Skip to content

Commit 5c906a2

Browse files
Tang Yun pingjayxurockchip
authored andcommitted
PM / devfreq: assign set_auto_self_refresh for rk3288
This makes ddr possible to enter auto self-refresh mode when early suspend. Change-Id: I0cd214bcb9c8e82aeea3f335a77be21feb356e2d Signed-off-by: Tang Yun ping <typ@rock-chips.com>
1 parent 0637d2d commit 5c906a2

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

drivers/devfreq/rockchip_dmc.c

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ struct share_params {
8686
/* if need, add parameter after */
8787
};
8888

89+
static struct share_params *ddr_psci_param;
90+
8991
char *rk3288_dts_timing[] = {
9092
"ddr3_speed_bin",
9193
"pd_idle",
@@ -631,12 +633,23 @@ static int rk_drm_get_lcdc_type(void)
631633
return lcdc_type;
632634
}
633635

634-
static int rk3288_dmc_init(struct platform_device *pdev)
636+
static int rockchip_ddr_set_auto_self_refresh(uint32_t en)
637+
{
638+
struct arm_smccc_res res;
639+
640+
ddr_psci_param->sr_idle_en = en;
641+
res = sip_smc_dram(SHARE_PAGE_TYPE_DDR, 0,
642+
ROCKCHIP_SIP_CONFIG_DRAM_SET_AT_SR);
643+
644+
return res.a0;
645+
}
646+
647+
static int rk3288_dmc_init(struct platform_device *pdev,
648+
struct rockchip_dmcfreq *dmcfreq)
635649
{
636650
struct device *dev = &pdev->dev;
637651
struct clk *pclk_phy, *pclk_upctl, *dmc_clk;
638652
struct arm_smccc_res res;
639-
struct share_params *init_param;
640653
struct drm_device *drm = drm_device_get_by_name("rockchip");
641654
int ret;
642655

@@ -706,12 +719,12 @@ static int rk3288_dmc_init(struct platform_device *pdev)
706719
return -ENOMEM;
707720
}
708721

709-
init_param = (struct share_params *)res.a1;
722+
ddr_psci_param = (struct share_params *)res.a1;
710723
of_get_rk3288_timings(&pdev->dev, pdev->dev.of_node,
711-
(uint32_t *)init_param);
724+
(uint32_t *)ddr_psci_param);
712725

713-
init_param->hz = 0;
714-
init_param->lcdc_type = rk_drm_get_lcdc_type();
726+
ddr_psci_param->hz = 0;
727+
ddr_psci_param->lcdc_type = rk_drm_get_lcdc_type();
715728
res = sip_smc_dram(SHARE_PAGE_TYPE_DDR, 0,
716729
ROCKCHIP_SIP_CONFIG_DRAM_INIT);
717730

@@ -721,6 +734,8 @@ static int rk3288_dmc_init(struct platform_device *pdev)
721734
return -ENOMEM;
722735
}
723736

737+
dmcfreq->set_auto_self_refresh = rockchip_ddr_set_auto_self_refresh;
738+
724739
return 0;
725740
}
726741

0 commit comments

Comments
 (0)