Skip to content

Commit b2e000a

Browse files
wzyy2yihsin-hung
authored andcommitted
dmc: fix some possible bugs
Change-Id: I98f1fc9ac8e5d2701c0ca49aa1f8f72cbbeb54ef Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
1 parent 24b7d26 commit b2e000a

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

arch/arm/boot/dts/rk3288-miniarm.dts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -751,15 +751,15 @@
751751
&dmc {
752752
status = "okay";
753753
logic-supply = <&vdd_log>;
754-
rockchip,odt-disable-freq = <333000000>;
754+
rockchip,odt-disable-freq = <666000000>;
755755
rockchip,dll-disable-freq = <333000000>;
756756
rockchip,sr-enable-freq = <333000000>;
757757
rockchip,auto-self-refresh-cnt = <0>;
758758
rockchip,auto-power-down-cnt = <64>;
759759
rockchip,ddr-speed-bin = <21>;
760760
rockchip,trcd = <10>;
761761
rockchip,trp = <10>;
762-
rockchip,pd-enable-freq = <533000000>;
762+
rockchip,pd-enable-freq = <333000000>;
763763
operating-points = <
764764
/* KHz uV */
765765
200000 1000000

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,8 @@ static void vop_enable(struct drm_crtc *crtc)
920920
}
921921

922922
#ifdef CONFIG_ARM_RK3288_DMC_DEVFREQ
923-
if (!vop->dmc_disabled_rk3288 && vop->vblank_time <= DMC_SET_RATE_TIME_NS +
924-
DMC_PAUSE_CPU_TIME_NS) {
923+
if (!vop->dmc_disabled_rk3288 && ( vop->vblank_time <= DMC_SET_RATE_TIME_NS +
924+
DMC_PAUSE_CPU_TIME_NS || num_enabled_crtc > 1)) {
925925
rockchip_dmc_disable();
926926
vop->dmc_disabled_rk3288 = true;
927927
}
@@ -1503,6 +1503,7 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
15031503
u16 vact_end = vact_st + vdisplay;
15041504
uint32_t version = vop->data->version;
15051505
uint32_t val;
1506+
int num_enabled_crtc = 0;
15061507

15071508
#ifdef CONFIG_ARM_RK3288_DMC_DEVFREQ
15081509
u64 vblank_time;
@@ -1635,8 +1636,14 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
16351636

16361637
VOP_CTRL_SET(vop, standby, 0);
16371638

1639+
/* check how many vop we use now */
1640+
drm_for_each_crtc(crtc, vop->drm_dev) {
1641+
if (crtc->state->enable)
1642+
num_enabled_crtc++;
1643+
}
1644+
16381645
#ifdef CONFIG_ARM_RK3288_DMC_DEVFREQ
1639-
if (vblank_time > DMC_SET_RATE_TIME_NS + DMC_PAUSE_CPU_TIME_NS) {
1646+
if (vblank_time > DMC_SET_RATE_TIME_NS + DMC_PAUSE_CPU_TIME_NS && num_enabled_crtc != 2) {
16401647
rockchip_dmc_lock();
16411648
vop->vblank_time = vblank_time;
16421649
rockchip_dmc_unlock();

0 commit comments

Comments
 (0)