
Hello, Kevel!
I can confirm, that rk3188 doesn’t have arch timer. I made test, see below.
By the way, could you tell what git head to use to apply your patch series? I want to test other changes as well.
I failed to apply to this one head:
commit eef11acebaa48e241e9187c717dc92d3e175c119 Author: Tom Rini trini@konsulko.com Date: Mon Jan 29 20:12:33 2018 -0500
Prepare v2018.03-rc1
Signed-off-by: Tom Rini trini@konsulko.com
I took get_ticks() code from arch_timer.c into board file and tried to execute it:
diff --git a/arch/arm/mach-rockchip/rk3188-board.c b/arch/arm/mach-rockchip/rk3188-board.c index fc58aeb..b5d0984 100644 --- a/arch/arm/mach-rockchip/rk3188-board.c +++ b/arch/arm/mach-rockchip/rk3188-board.c @@ -25,9 +25,28 @@ __weak int rk_board_late_init(void) return 0; }
+#define CONFIG_SYS_HZ_CLOCK 24000000 + +ulong arch_tbl = 0; +ulong arch_tbu = 0; +ulong arch_timer_rate_hz = CONFIG_SYS_HZ_CLOCK / CONFIG_SYS_HZ; + +unsigned long long arch_get_ticks(void) +{ + ulong nowl, nowu; + + asm volatile("mrrc p15, 0, %0, %1, c14" : "=r" (nowl), "=r" (nowu)); + + arch_tbl = nowl; + arch_tbu = nowu; + + return (((unsigned long long)arch_tbu) << 32) | arch_tbl; +} + int board_late_init(void) { struct rk3188_grf *grf; + ulong val0, val1;
setup_boot_mode(); grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); @@ -40,6 +59,12 @@ int board_late_init(void) NOC_REMAP_MASK << NOC_REMAP_SHIFT); }
+ val0 = arch_get_ticks(); + udelay(100); + val1 = arch_get_ticks(); + + pr_err("val0 %lu; val1 %lu\n", val0, val1); + return rk_board_late_init(); }
And I get undefined instruction error on rk3188 board:
undefined instruction pc : [<9ff760d6>] lr : [<9ff76129>] reloc pc : [<600010d6>] lr : [<60001129>] sp : 9df669d8 ip : 9df66918 fp : 00000017 r10: 6003d648 r9 : 9df6cee8 r8 : 10080228 r7 : 9ffb0654 r6 : 9ffb05e4 r5 : 9ffb0658 r4 : 3ff75000 r3 : 10001000 r2 : 80000000 r1 : 20008000 r0 : 20008000 Flags: nzcv IRQs off FIQs off Mode SVC_32
Regards, Alexander.
28 марта 2018 г., в 5:33, Kever Yang kever.yang@rock-chips.com написал(а):
Hi Alexander,
On 03/28/2018 12:21 AM, Alexander Kochetkov wrote:
The question is: does rk3066 and rk3188 have arch timer? If no, than removing rk_timer will break u-boot for these chips.
Thanks for your comment, I will double check about if this two chips have arch timer, I think it should be, but I don't have boards now.
Thanks,
- Kever
And my comment was about global timer, not arch timer. And I failed to enable arch timer for rk3188 in the kernel.
Alexander.
27 марта 2018 г., в 19:07, Alexander Kochetkov al.kochet@gmail.com написал(а):
27 марта 2018 г., в 12:29, Kever Yang kever.yang@rock-chips.com написал(а):
We use ARM arch timer instead.
Hi, Kever!
Just let you know, that arch timer rate on rk3066 and rk3188 depends on CPU frequency. I’ve made patch[1] for fixing that in kernel. If u-boot do arm clock changes after timer initialization, timer can provide inaccurate delays.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/dr...
Alexander.