ARM: shmobile: r8a7790 arch timer frequency update
Magnus Damm
maintainercover ARM: shmobile: r8a7790 arch timer frequency update
ARM: shmobile: r8a7790 arch timer frequency update
[PATCH 01/02] ARM: shmobile: Introduce r8a7790_read_mode_pins() [PATCH 02/02] ARM: shmobile: Setup r8a7790 arch timer based on MD pins
Add code to setup r8a7790 arch timer frequency dynamically at boot time based on the EXTAL frequency pointed out by the boot mode pins.
---
Built on top of renesas-next-20130704v2
arch/arm/mach-shmobile/clock-r8a7790.c | 11 ---- arch/arm/mach-shmobile/include/mach/r8a7790.h | 3 + arch/arm/mach-shmobile/setup-r8a7790.c | 63 +++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 14 deletions(-)
Magnus Damm
maintainerPATCH 1/2 ARM: shmobile: Introduce r8a7790_read_mode_pins()
From: Magnus Damm <[email protected]>
Break out the r8a7790 boot mode code into a separate function so it can be shared by multiple users.
---
arch/arm/mach-shmobile/clock-r8a7790.c | 11 ++--------- arch/arm/mach-shmobile/include/mach/r8a7790.h | 3 +++ arch/arm/mach-shmobile/setup-r8a7790.c | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 9 deletions(-)
arch/arm/mach-shmobile/clock-r8a7790.c +2 -9
@@ -24,6 +24,7 @@#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/common.h> +#include <mach/r8a7790.h> /* * MD EXTAL PLL0 PLL1 PLL3
@@ -42,8 +43,6 @@* see "p1 / 2" on R8A7790_CLOCK_ROOT() below */ -#define MD (nr) (1 << nr) -#define CPG_BASE 0xe6150000#define CPG_LEN 0x1000
@@ -53,7 +52,6 @@#define SMSTPCR5 0xe6150144#define SMSTPCR7 0xe615014c -#define MODEMR 0xE6160060#define SDCKCR 0xE6150074#define SD2CKCR 0xE6150078#define SD3CKCR 0xE615007C
@@ -288,14 +286,9 @@ static struct clk_lookup lookups[] = {void __init r8a7790_clock_init (void ) { -void __iomem *modemr =ioremap_nocache (MODEMR ,PAGE_SIZE ); -u32 mode; +u32 mode =r8a7790_read_mode_pins ();int k, ret =0 ; -BUG_ON (!modemr); - mode =ioread32 (modemr); -iounmap (modemr); -switch (mode & (MD (14 ) |MD (13 ))) {case 0 :R8A7790_CLOCK_ROOT (15 , &extal_clk,172 ,208 ,106 ,88 );
arch/arm/mach-shmobile/include/mach/r8a7790.h +3 -0
@@ -8,4 +8,7 @@ void r8a7790_pinmux_init(void);void r8a7790_init_delay (void );void r8a7790_timer_init (void ); +#define MD (nr) BIT(nr) +u32 r8a7790_read_mode_pins (void ); +#endif /* __ASM_R8A7790_H__ */
arch/arm/mach-shmobile/setup-r8a7790.c +14 -0
@@ -201,6 +201,20 @@ void __init r8a7790_add_standard_devicesr8a7790_register_thermal (); } +#define MODEMR 0xe6160060 + +u32 __init r8a7790_read_mode_pins (void ) +{ +void __iomem *modemr =ioremap_nocache (MODEMR ,PAGE_SIZE ); +u32 mode; + +BUG_ON (!modemr); + mode =ioread32 (modemr); +iounmap (modemr); + +return mode; +} +void __init r8a7790_timer_init (void ) {void __iomem *cntcr;
PATCH 1/2 ARM: shmobile: Introduce r8a7790_read_mode_pins()
Hello.
Quoted 7 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Break out the r8a7790 boot mode code into a separate function so it can be shared by multiple users.
Signed-off-by Magnus Damm <[email protected]>---
[...]
arch/arm/mach-shmobile/setup-r8a7790.c void __init r8a7790_add_standard_devices · line 208
Quoted 11 lines
arch/arm/mach-shmobile/setup-r8a7790.c +5
-0@@ -201,6 +201,20 @@ void __init r8a7790_add_standard_devicesr8a7790_register_thermal (); } +#define MODEMR 0xe6160060 + +u32 __init r8a7790_read_mode_pins (void ) +{ +void __iomem *modemr =ioremap_nocache (MODEMR ,PAGE_SIZE );
Why ioremap the whole page if you only need 4 bytes, and the address
is not aligned to page?
arch/arm/mach-shmobile/setup-r8a7790.c void __init r8a7790_add_standard_devices · line 217
Quoted 9 lines
arch/arm/mach-shmobile/setup-r8a7790.c +9
-0+u32 mode; + +BUG_ON (!modemr); + mode =ioread32 (modemr); +iounmap (modemr); + +return mode; +} +
WBR, Sergei
Magnus Damm
maintainerPATCH 1/2 ARM: shmobile: Introduce r8a7790_read_mode_pins()
Hi Sergei,
Quoted 26 lines · Sergei Shtylyov
Hello.
Quoted 9 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Break out the r8a7790 boot mode code into a separate function so it can be shared by multiple users.
Signed-off-by Magnus Damm <[email protected]>---
[...]
Quoted 7 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +0
-019:59:37.000000000 +0900
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +0
-0@@ -201,6 +201,20 @@ void __init r8a7790_add_standard_devices r8a7790_register_thermal(); }
Quoted 9 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 void __init r8a7790_add_standard_devices · line 208
Quoted 5 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +5
-0+#define MODEMR 0xe6160060 + +u32 __init r8a7790_read_mode_pins(void) +{ + void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);Why ioremap the whole page if you only need 4 bytes, and the address is
not aligned to page?
Because the original code did so. =)
But yes, indeed, using two pages seems kind of pointless.
/ magnus
PATCH 1/2 ARM: shmobile: Introduce r8a7790_read_mode_pins()
Quoted 40 lines · Magnus Damm
Hi Sergei,
Quoted 26 lines · Sergei Shtylyov
Hello.
Quoted 9 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Break out the r8a7790 boot mode code into a separate function so it can be shared by multiple users.
Signed-off-by Magnus Damm <[email protected]>---
[...]
Quoted 7 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +0
-019:59:37.000000000 +0900
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +0
-0@@ -201,6 +201,20 @@ void __init r8a7790_add_standard_devices r8a7790_register_thermal(); }Quoted 9 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 void __init r8a7790_add_standard_devices · line 208
Quoted 5 lines
arch/arm/mach-shmobile/setup-r8a7790.c 2013-07-09 renamed from arch/arm/mach-shmobile/setup-r8a7790.c +5
-0+#define MODEMR 0xe6160060 + +u32 __init r8a7790_read_mode_pins(void) +{ + void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);Why ioremap the whole page if you only need 4 bytes, and the address is
not aligned to page?
Quoted 3 lines
Because the original code did so. =)
But yes, indeed, using two pages seems kind of pointless.
Lets fix that up in another patch, it seems orthogonal to this change.
Magnus Damm
maintainerPATCH 2/2 ARM: shmobile: Setup r8a7790 arch timer based on MD pins
In reply to Magnus DammFrom: Magnus Damm <[email protected]>
Update the r8a7790 arch timer setup code to configure the frequency dynamically at boot time. This means that the arch timer driver will be able to detect a timer frequency that has been calculated based on the MD pins instead of a fixed and potentially incorrect 13 MHz.
With this patch applied the Linux kernel will correctly support the r8a7790 Lager board that uses a 20 Mhz EXTAL. The arch timer will operate on 10 MHz and the Linux arch timer driver will be correctly configured to use 10 MHz.
Without this patch the 20 MHz EXTAL will be used to drive the arch timer at 10 MHz, but the Linux arch timer driver will believe it is counting at 13 Mhz.
---
arch/arm/mach-shmobile/setup-r8a7790.c | 49 ++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 5 deletions(-)
arch/arm/mach-shmobile/setup-r8a7790.c +44 -5
@@ -215,14 +215,53 @@ u32 __init r8a7790_read_mode_pins(void)return mode; } +#define CNTCR 0 +#define CNTFID0 0x20 +void __init r8a7790_timer_init (void ) { -void __iomem *cntcr; +#ifdef CONFIG_ARM_ARCH_TIMER +u32 mode =r8a7790_read_mode_pins (); +void __iomem *base; +int extal_mhz =0 ; +u32 freq; + +/* At Linux boot time the r8a7790 arch timer comes up +* with the counter disabled. Moreover, it may also report +* a potentially incorrect fixed 13 MHz frequency. To be +* correct these registers need to be updated to use the +* frequency EXTAL / 2 which can be determined by the MD pins. +*/ + +switch (mode & (MD (14 ) |MD (13 ))) { +case 0 : + extal_mhz =15 ; +break ; +case MD (13 ): + extal_mhz =20 ; +break ; +case MD (14 ): + extal_mhz =26 ; +break ; +case MD (13 ) |MD (14 ): + extal_mhz =30 ; +break ; + } + +/* The arch timer frequency equals EXTAL / 2 */ + freq = extal_mhz * (1000000 /2 ); + +/* Remap "armgcnt address map" space */ + base =ioremap (0xe6080000 ,PAGE_SIZE ); + +/* Update registers with correct frequency */ +iowrite32 (freq, base +CNTFID0 ); + asmvolatile ("mcr p15, 0, %0, c14, c0, 0" : :"r" (freq)); -/* make sure arch timer is started by setting bit 0 of CNTCT */ - cntcr =ioremap (0xe6080000 ,PAGE_SIZE ); -iowrite32 (1 , cntcr); -iounmap (cntcr); +/* make sure arch timer is started by setting bit 0 of CNTCR */ +iowrite32 (1 , base +CNTCR ); +iounmap (base); +#endif /* CONFIG_ARM_ARCH_TIMER */ shmobile_timer_init (); }
cover ARM: shmobile: r8a7790 arch timer frequency update
In reply to Magnus DammQuoted 9 lines · Magnus Damm
ARM: shmobile: r8a7790 arch timer frequency update
[PATCH 01/02] ARM: shmobile: Introduce
r8a7790_read_mode_pins()[PATCH 02/02] ARM: shmobile: Setup r8a7790 arch timer based on MD pinsAdd code to setup r8a7790 arch timer frequency dynamically at boot time based on the EXTAL frequency pointed out by the boot mode pins.
Signed-off-by Magnus Damm <[email protected]>
Quoted 8 lines
---
Built on top of renesas-next-20130704v2
arch/arm/mach-shmobile/clock-r8a7790.c | 11 ---- arch/arm/mach-shmobile/include/mach/r8a7790.h | 3 + arch/arm/mach-shmobile/setup-r8a7790.c | 63 +++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 14 deletions(-)
Hi Magnus,
could you please let me know if/when these patches are ready to queue-up for v3.12?
Magnus Damm
maintainercover ARM: shmobile: r8a7790 arch timer frequency update
Quoted 12 lines · Simon Horman
Quoted 11 lines · Magnus Damm
ARM: shmobile: r8a7790 arch timer frequency update
[PATCH 01/02] ARM: shmobile: Introduce
r8a7790_read_mode_pins()[PATCH 02/02] ARM: shmobile: Setup r8a7790 arch timer based on MD pinsAdd code to setup r8a7790 arch timer frequency dynamically at boot time based on the EXTAL frequency pointed out by the boot mode pins.
Signed-off-by Magnus Damm <[email protected]>---
Quoted 8 lines
Quoted 6 lines
Built on top of renesas-next-20130704v2
arch/arm/mach-shmobile/clock-r8a7790.c | 11 ---- arch/arm/mach-shmobile/include/mach/r8a7790.h | 3 + arch/arm/mach-shmobile/setup-r8a7790.c | 63 +++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 14 deletions(-)Hi Magnus,
Hi Simon,
Thanks for your help picking up patches.
Quoted 2 lines
could you please let me know if/when these patches are ready to queue-up for v3.12?
There are two things to consider:
1) Patch 1/2 needs to be updated to handle feedback from Sergei.
2) I'd like the series to be tested by Ulrich to see if they actually help!
I can resend 1/2 today or tomorrow and I think Ulrich can most likely help us with testing sometime this week.
Cheers,
/ magnus
cover ARM: shmobile: r8a7790 arch timer frequency update
Quoted 29 lines · Magnus Damm
Quoted 12 lines · Simon Horman
Quoted 11 lines · Magnus Damm
ARM: shmobile: r8a7790 arch timer frequency update
[PATCH 01/02] ARM: shmobile: Introduce
r8a7790_read_mode_pins()[PATCH 02/02] ARM: shmobile: Setup r8a7790 arch timer based on MD pinsAdd code to setup r8a7790 arch timer frequency dynamically at boot time based on the EXTAL frequency pointed out by the boot mode pins.
Signed-off-by Magnus Damm <[email protected]>---
Quoted 8 lines
Quoted 6 lines
Built on top of renesas-next-20130704v2
arch/arm/mach-shmobile/clock-r8a7790.c | 11 ---- arch/arm/mach-shmobile/include/mach/r8a7790.h | 3 + arch/arm/mach-shmobile/setup-r8a7790.c | 63 +++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 14 deletions(-)Hi Magnus,
Hi Simon,
Thanks for your help picking up patches.
Quoted 2 lines
could you please let me know if/when these patches are ready to queue-up for v3.12?
Quoted 6 lines
There are two things to consider:
1) Patch 1/2 needs to be updated to handle feedback from Sergei.
2) I'd like the series to be tested by Ulrich to see if they actually help!I can resend 1/2 today or tomorrow and I think Ulrich can most likely help us with testing sometime this week.
Thanks, I'll wait for your repost and feedback from Ulrich.
cover ARM: shmobile: r8a7790 arch timer frequency update
Quoted 5 lines · Simon Horman
Quoted 2 lines · Magnus Damm
I can resend 1/2 today or tomorrow and I think Ulrich can most likely help us with testing sometime this week.
Thanks, I'll wait for your repost and feedback from Ulrich.
Works for me, "sleep 10" actually sleeps for 10 seconds now.
CU
Uli