mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
Rockchip: RK3399: u-boot: backport u-boot patch
This commit is contained in:
parent
fcdf6fa397
commit
d3590b6c1a
@ -0,0 +1,115 @@
|
|||||||
|
From 2cb23b80e4169e121c520ff33cb6a60e0a0ded21 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Xavier Drudis Ferran <xdrudis@tinet.cat>
|
||||||
|
Date: Sat, 16 Jul 2022 12:31:45 +0200
|
||||||
|
Subject: [PATCH] arm: rockchip: rk3399: Program PLL clock for DDR at 50 MHz in
|
||||||
|
documented range
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The original code set up the DDR clock to 48 MHz, not 50MHz as
|
||||||
|
requested, and did it in a way that didn't satisfy the Application
|
||||||
|
Notes in RK3399 TRM [1]. 2.9.2.B says:
|
||||||
|
|
||||||
|
PLL frequency range requirement
|
||||||
|
[...]
|
||||||
|
FOUTVCO: 800MHz to 3.2GHz
|
||||||
|
|
||||||
|
2.9.2.A :
|
||||||
|
PLL output frequency configuration
|
||||||
|
[...]
|
||||||
|
FOUTVCO = FREF / REFDIV * FBDIV
|
||||||
|
FOUTPOSTDIV = FOUTVCO / POSTDIV1 / POSTDIV2
|
||||||
|
|
||||||
|
FREF = 24 MHz
|
||||||
|
|
||||||
|
The original code gives FOUTVCO: 24MHz/1 * 12 = 288MHz < 800MHz
|
||||||
|
And the resulting FOUTPOSTDIV is 288MHz / 3 / 2 = 48MHz
|
||||||
|
but the requested frequency was 50MHz
|
||||||
|
|
||||||
|
Note:
|
||||||
|
2.7.2 Detail Register Description
|
||||||
|
PMUCRU_PPLL_CON0 says
|
||||||
|
|
||||||
|
fbdiv
|
||||||
|
Feedback Divide Value
|
||||||
|
Valid divider settings are:
|
||||||
|
[16, 3200] in integer mode
|
||||||
|
|
||||||
|
So .fbdiv = 12 wouldn't be right. But 2.9.2.C says:
|
||||||
|
|
||||||
|
PLL setting consideration
|
||||||
|
[...]
|
||||||
|
The following settings are valid for FBDIV:
|
||||||
|
DSMPD=1 (Integer Mode):
|
||||||
|
12,13,14,16-4095 (practical value is limited to 3200, 2400, or 1600
|
||||||
|
(FVCOMAX / FREFMIN))
|
||||||
|
[...]
|
||||||
|
|
||||||
|
So .fbdiv = 12 would be right.
|
||||||
|
|
||||||
|
In any case FOUTVCO is still wrong. I thank YouMin Chen for
|
||||||
|
confirmation and explanation.
|
||||||
|
|
||||||
|
Despite documentation, I don't seem to be able to reproduce a
|
||||||
|
practical problem with the wrong FOUTVCO. When I initially found it I
|
||||||
|
thought some problems with detecting the RAM capacity in my Rock Pi 4B
|
||||||
|
could be related to it and my patch seemed to help. But since I'm no
|
||||||
|
longer able to reproduce the issue, it works with or without this
|
||||||
|
patch. And meanwhile a patch[2] by Lee Jones and YouMin Chen addresses
|
||||||
|
this issue. Btw, shouldn't that be commited?
|
||||||
|
|
||||||
|
So this patches solves no visible problem. Yet, to prevent future
|
||||||
|
problems, I think it'd be best to stick to spec.
|
||||||
|
|
||||||
|
An alternative to this patch could be
|
||||||
|
|
||||||
|
{.refdiv = 1, .fbdiv = 75, .postdiv1 = 6, .postdiv2 = 6};
|
||||||
|
|
||||||
|
This would theoretically consume more power and yield less jitter,
|
||||||
|
according to 2.9.2.C :
|
||||||
|
|
||||||
|
PLL setting consideration
|
||||||
|
[...]
|
||||||
|
For lowest power operation, the minimum VCO and FREF frequencies
|
||||||
|
should be used. For minimum jitter operation, the highest VCO and
|
||||||
|
FREF frequencies should be used.
|
||||||
|
[...]
|
||||||
|
|
||||||
|
But I haven't tried it because I don't think it matters much. 50MHz
|
||||||
|
for DDR is only shortly used by TPL at RAM init. Normal operation is
|
||||||
|
at 800MHz. Maybe it's better to use less power until later when more
|
||||||
|
complex software can control batteries or charging or whatever ?
|
||||||
|
|
||||||
|
Cc: Simon Glass <sjg@chromium.org>
|
||||||
|
Cc: Philipp Tomsich <philipp.tomsich@vrull.eu>
|
||||||
|
Cc: Kever Yang <kever.yang@rock-chips.com>
|
||||||
|
Cc: Lukasz Majewski <lukma@denx.de>
|
||||||
|
Cc: Sean Anderson <seanga2@gmail.com>
|
||||||
|
|
||||||
|
Link: [1] https://opensource.rock-chips.com/images/e/ee/Rockchip_RK3399TRM_V1.4_Part1-20170408.pdf
|
||||||
|
Link: [2] https://patchwork.ozlabs.org/project/uboot/list/?series=305766
|
||||||
|
|
||||||
|
Signed-off-by: Xavier Drudis Ferran <xdrudis@tinet.cat>
|
||||||
|
Tested-by: Michal Suchánek <msuchanek@suse.de>
|
||||||
|
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
|
||||||
|
---
|
||||||
|
drivers/clk/rockchip/clk_rk3399.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c
|
||||||
|
index 97bf1c6e15..eaeac451df 100644
|
||||||
|
--- a/drivers/clk/rockchip/clk_rk3399.c
|
||||||
|
+++ b/drivers/clk/rockchip/clk_rk3399.c
|
||||||
|
@@ -856,7 +856,7 @@ static ulong rk3399_ddr_set_clk(struct rockchip_cru *cru,
|
||||||
|
switch (set_rate) {
|
||||||
|
case 50 * MHz:
|
||||||
|
dpll_cfg = (struct pll_div)
|
||||||
|
- {.refdiv = 1, .fbdiv = 12, .postdiv1 = 3, .postdiv2 = 2};
|
||||||
|
+ {.refdiv = 2, .fbdiv = 75, .postdiv1 = 3, .postdiv2 = 6};
|
||||||
|
break;
|
||||||
|
case 200 * MHz:
|
||||||
|
dpll_cfg = (struct pll_div)
|
||||||
|
--
|
||||||
|
2.39.0
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user