Loading drivers/video/fbdev/msm/mdss_debug.c +38 −2 Original line number Diff line number Diff line Loading @@ -1377,6 +1377,38 @@ static inline struct mdss_mdp_misr_map *mdss_misr_get_map(u32 block_id, } } else { if (block_id <= DISPLAY_MISR_HDMI) { /* * In Dual LM single display configuration, * the interface number (i.e. block_id) * might not be the one given from ISR. * We should always check with the actual * intf_num from ctl. */ struct msm_fb_data_type *mfd = NULL; /* * ISR pass in NULL ctl, so we need to get it * from the mdata. */ if (!ctl && mdata->mixer_intf) ctl = mdata->mixer_intf->ctl; if (ctl) mfd = ctl->mfd; if (mfd && is_dual_lm_single_display(mfd)) { switch (ctl->intf_num) { case MDSS_MDP_INTF1: block_id = DISPLAY_MISR_DSI0; break; case MDSS_MDP_INTF2: block_id = DISPLAY_MISR_DSI1; break; default: pr_err("Unmatch INTF for Dual LM single display configuration, INTF:%d\n", ctl->intf_num); return NULL; } } intf_base = (char *)mdss_mdp_get_intf_base_addr( mdata, block_id); Loading @@ -1390,11 +1422,15 @@ static inline struct mdss_mdp_misr_map *mdss_misr_get_map(u32 block_id, /* * extra offset required for * cmd misr in 8996 * cmd misr in 8996 and mdss3.x */ if (IS_MDSS_MAJOR_MINOR_SAME( mdata->mdp_rev, MDSS_MDP_HW_REV_107)) { MDSS_MDP_HW_REV_107) || (mdata->mdp_rev == MDSS_MDP_HW_REV_300) || (mdata->mdp_rev == MDSS_MDP_HW_REV_301)) { ctrl_reg += 0x8; value_reg += 0x8; } Loading drivers/video/fbdev/msm/mdss_fb.c +3 −0 Original line number Diff line number Diff line Loading @@ -4752,6 +4752,9 @@ static int mdss_fb_mode_switch(struct msm_fb_data_type *mfd, u32 mode) if (!mfd || !mfd->panel_info) return -EINVAL; /* make sure that we are idle while switching */ mdss_fb_wait_for_kickoff(mfd); pinfo = mfd->panel_info; if (pinfo->mipi.dms_mode == DYNAMIC_MODE_SWITCH_SUSPEND_RESUME) { ret = mdss_fb_blanking_mode_switch(mfd, mode); Loading drivers/video/fbdev/msm/mdss_mdp.c +35 −0 Original line number Diff line number Diff line Loading @@ -1455,6 +1455,35 @@ static int mdss_mdp_idle_pc_restore(void) return rc; } /** * mdss_mdp_retention_init() - initialize retention setting * @mdata: pointer to the global mdss data structure. */ static int mdss_mdp_retention_init(struct mdss_data_type *mdata) { struct clk *mdss_axi_clk = mdss_mdp_get_clk(MDSS_CLK_AXI); int rc; if (!mdss_axi_clk) { pr_err("failed to get AXI clock\n"); return -EINVAL; } rc = clk_set_flags(mdss_axi_clk, CLKFLAG_NORETAIN_MEM); if (rc) { pr_err("failed to set AXI no memory retention %d\n", rc); return rc; } rc = clk_set_flags(mdss_axi_clk, CLKFLAG_NORETAIN_PERIPH); if (rc) { pr_err("failed to set AXI no periphery retention %d\n", rc); return rc; } return rc; } /** * mdss_bus_bandwidth_ctrl() -- place bus bandwidth request * @enable: value of enable or disable Loading Loading @@ -2695,6 +2724,12 @@ static int mdss_mdp_probe(struct platform_device *pdev) goto probe_done; } rc = mdss_mdp_retention_init(mdata); if (rc) { pr_err("unable to initialize mdss mdp retention\n"); goto probe_done; } pm_runtime_set_autosuspend_delay(&pdev->dev, AUTOSUSPEND_TIMEOUT_MS); if (mdata->idle_pc_enabled) pm_runtime_use_autosuspend(&pdev->dev); Loading drivers/video/fbdev/msm/mdss_mdp_ctl.c +8 −5 Original line number Diff line number Diff line Loading @@ -571,11 +571,12 @@ static u32 __calc_qseed3_mdp_clk_rate(struct mdss_mdp_pipe *pipe, u32 fps, u32 v_total) { u32 active_line_cycle, backfill_cycle, total_cycle; u32 ver_dwnscale; u64 ver_dwnscale; u32 active_line; u32 backfill_line; ver_dwnscale = (src_h << PHASE_STEP_SHIFT) / dst.h; ver_dwnscale = src_h << PHASE_STEP_SHIFT; do_div(ver_dwnscale, dst.h); if (ver_dwnscale > (MDSS_MDP_QSEED3_VER_DOWNSCALE_LIM << PHASE_STEP_SHIFT)) { Loading @@ -599,7 +600,7 @@ static u32 __calc_qseed3_mdp_clk_rate(struct mdss_mdp_pipe *pipe, total_cycle = active_line_cycle + backfill_cycle; pr_debug("line: active=%d backfill=%d vds=%d\n", active_line, backfill_line, ver_dwnscale); active_line, backfill_line, (u32)ver_dwnscale); pr_debug("cycle: total=%d active=%d backfill=%d\n", total_cycle, active_line_cycle, backfill_cycle); Loading Loading @@ -4340,9 +4341,11 @@ void mdss_mdp_check_ctl_reset_status(struct mdss_mdp_ctl *ctl) return; pr_debug("hw ctl reset is set for ctl:%d\n", ctl->num); status = mdss_mdp_poll_ctl_reset_status(ctl, 5); /* poll for at least ~1 frame */ status = mdss_mdp_poll_ctl_reset_status(ctl, 320); if (status) { pr_err("hw recovery is not complete for ctl:%d\n", ctl->num); pr_err("hw recovery is not complete for ctl:%d status:0x%x\n", ctl->num, status); MDSS_XLOG_TOUT_HANDLER("mdp", "vbif", "vbif_nrt", "dbg_bus", "vbif_dbg_bus", "panic"); } Loading Loading
drivers/video/fbdev/msm/mdss_debug.c +38 −2 Original line number Diff line number Diff line Loading @@ -1377,6 +1377,38 @@ static inline struct mdss_mdp_misr_map *mdss_misr_get_map(u32 block_id, } } else { if (block_id <= DISPLAY_MISR_HDMI) { /* * In Dual LM single display configuration, * the interface number (i.e. block_id) * might not be the one given from ISR. * We should always check with the actual * intf_num from ctl. */ struct msm_fb_data_type *mfd = NULL; /* * ISR pass in NULL ctl, so we need to get it * from the mdata. */ if (!ctl && mdata->mixer_intf) ctl = mdata->mixer_intf->ctl; if (ctl) mfd = ctl->mfd; if (mfd && is_dual_lm_single_display(mfd)) { switch (ctl->intf_num) { case MDSS_MDP_INTF1: block_id = DISPLAY_MISR_DSI0; break; case MDSS_MDP_INTF2: block_id = DISPLAY_MISR_DSI1; break; default: pr_err("Unmatch INTF for Dual LM single display configuration, INTF:%d\n", ctl->intf_num); return NULL; } } intf_base = (char *)mdss_mdp_get_intf_base_addr( mdata, block_id); Loading @@ -1390,11 +1422,15 @@ static inline struct mdss_mdp_misr_map *mdss_misr_get_map(u32 block_id, /* * extra offset required for * cmd misr in 8996 * cmd misr in 8996 and mdss3.x */ if (IS_MDSS_MAJOR_MINOR_SAME( mdata->mdp_rev, MDSS_MDP_HW_REV_107)) { MDSS_MDP_HW_REV_107) || (mdata->mdp_rev == MDSS_MDP_HW_REV_300) || (mdata->mdp_rev == MDSS_MDP_HW_REV_301)) { ctrl_reg += 0x8; value_reg += 0x8; } Loading
drivers/video/fbdev/msm/mdss_fb.c +3 −0 Original line number Diff line number Diff line Loading @@ -4752,6 +4752,9 @@ static int mdss_fb_mode_switch(struct msm_fb_data_type *mfd, u32 mode) if (!mfd || !mfd->panel_info) return -EINVAL; /* make sure that we are idle while switching */ mdss_fb_wait_for_kickoff(mfd); pinfo = mfd->panel_info; if (pinfo->mipi.dms_mode == DYNAMIC_MODE_SWITCH_SUSPEND_RESUME) { ret = mdss_fb_blanking_mode_switch(mfd, mode); Loading
drivers/video/fbdev/msm/mdss_mdp.c +35 −0 Original line number Diff line number Diff line Loading @@ -1455,6 +1455,35 @@ static int mdss_mdp_idle_pc_restore(void) return rc; } /** * mdss_mdp_retention_init() - initialize retention setting * @mdata: pointer to the global mdss data structure. */ static int mdss_mdp_retention_init(struct mdss_data_type *mdata) { struct clk *mdss_axi_clk = mdss_mdp_get_clk(MDSS_CLK_AXI); int rc; if (!mdss_axi_clk) { pr_err("failed to get AXI clock\n"); return -EINVAL; } rc = clk_set_flags(mdss_axi_clk, CLKFLAG_NORETAIN_MEM); if (rc) { pr_err("failed to set AXI no memory retention %d\n", rc); return rc; } rc = clk_set_flags(mdss_axi_clk, CLKFLAG_NORETAIN_PERIPH); if (rc) { pr_err("failed to set AXI no periphery retention %d\n", rc); return rc; } return rc; } /** * mdss_bus_bandwidth_ctrl() -- place bus bandwidth request * @enable: value of enable or disable Loading Loading @@ -2695,6 +2724,12 @@ static int mdss_mdp_probe(struct platform_device *pdev) goto probe_done; } rc = mdss_mdp_retention_init(mdata); if (rc) { pr_err("unable to initialize mdss mdp retention\n"); goto probe_done; } pm_runtime_set_autosuspend_delay(&pdev->dev, AUTOSUSPEND_TIMEOUT_MS); if (mdata->idle_pc_enabled) pm_runtime_use_autosuspend(&pdev->dev); Loading
drivers/video/fbdev/msm/mdss_mdp_ctl.c +8 −5 Original line number Diff line number Diff line Loading @@ -571,11 +571,12 @@ static u32 __calc_qseed3_mdp_clk_rate(struct mdss_mdp_pipe *pipe, u32 fps, u32 v_total) { u32 active_line_cycle, backfill_cycle, total_cycle; u32 ver_dwnscale; u64 ver_dwnscale; u32 active_line; u32 backfill_line; ver_dwnscale = (src_h << PHASE_STEP_SHIFT) / dst.h; ver_dwnscale = src_h << PHASE_STEP_SHIFT; do_div(ver_dwnscale, dst.h); if (ver_dwnscale > (MDSS_MDP_QSEED3_VER_DOWNSCALE_LIM << PHASE_STEP_SHIFT)) { Loading @@ -599,7 +600,7 @@ static u32 __calc_qseed3_mdp_clk_rate(struct mdss_mdp_pipe *pipe, total_cycle = active_line_cycle + backfill_cycle; pr_debug("line: active=%d backfill=%d vds=%d\n", active_line, backfill_line, ver_dwnscale); active_line, backfill_line, (u32)ver_dwnscale); pr_debug("cycle: total=%d active=%d backfill=%d\n", total_cycle, active_line_cycle, backfill_cycle); Loading Loading @@ -4340,9 +4341,11 @@ void mdss_mdp_check_ctl_reset_status(struct mdss_mdp_ctl *ctl) return; pr_debug("hw ctl reset is set for ctl:%d\n", ctl->num); status = mdss_mdp_poll_ctl_reset_status(ctl, 5); /* poll for at least ~1 frame */ status = mdss_mdp_poll_ctl_reset_status(ctl, 320); if (status) { pr_err("hw recovery is not complete for ctl:%d\n", ctl->num); pr_err("hw recovery is not complete for ctl:%d status:0x%x\n", ctl->num, status); MDSS_XLOG_TOUT_HANDLER("mdp", "vbif", "vbif_nrt", "dbg_bus", "vbif_dbg_bus", "panic"); } Loading