Am 2022-08-16 22:00, schrieb Pali Rohár:
Bit 21 in SAR register specifies if TCLK is running at 166 MHz or 200 MHz.
This information is undocumented in public Marvell Kirkwood Functional
Specifications [2], but is available in Linux v3.15 kirkwood code [1].

Commit 8ac303d49f89 ("arm: kirkwood: Do not overwrite CONFIG_SYS_TCLK")
broke support for Marvell 88F6281 SoCs because it was expected that all
those SoCs have TCLK running at 200 MHz as specified in Marvell 88F6281
Hardware Specifications [3].

Fix broken support for 88F6281 by detecting CONFIG_SYS_TCLK from SAR
register, like it was doing Linux v3.15.

[1] -
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/arm/mach-kirkwood/common.c?h=v3.15#n542
[2] -
https://web.archive.org/web/20130730091033/http://www.marvell.com/embedded-processors/kirkwood/assets/FS_88F6180_9x_6281_OpenSource.pdf
[3] -
https://web.archive.org/web/20120620073511/http://www.marvell.com/embedded-processors/kirkwood/assets/HW_88F6281_OpenSource.pdf

Fixes: 8ac303d49f89 ("arm: kirkwood: Do not overwrite CONFIG_SYS_TCLK")
Signed-off-by: Pali Rohár <p...@kernel.org>
---
Michael, please test this patch, if it fixes your boards.

Thanks, but this doesn't compile:

In file included from lib/time.c:19:
lib/time.c: In function ‘timer_get_boot_us’:
./arch/arm/include/asm/io.h:108:19: error: token "{" is not valid in preprocessor expressions
  108 | #define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; })
      |                   ^
./arch/arm/include/asm/arch/kw88f6281.h:18:29: note: in expansion of macro ‘readl’
   18 | #define CONFIG_SYS_TCLK   ((readl(CONFIG_SAR_REG) & BIT(21)) ? \
      |                             ^~~~~
./arch/arm/include/asm/arch/config.h:56:32: note: in expansion of macro ‘CONFIG_SYS_TCLK’
   56 | #define CONFIG_SYS_TIMER_RATE  CONFIG_SYS_TCLK
      |                                ^~~~~~~~~~~~~~~
lib/time.c:50:5: note: in expansion of macro ‘CONFIG_SYS_TIMER_RATE’
   50 | #if CONFIG_SYS_TIMER_RATE == 1000000
      |     ^~~~~~~~~~~~~~~~~~~~~
./arch/arm/include/asm/io.h:108:19: error: token "{" is not valid in preprocessor expressions
  108 | #define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; })
      |                   ^
./arch/arm/include/asm/arch/kw88f6281.h:18:29: note: in expansion of macro ‘readl’
   18 | #define CONFIG_SYS_TCLK   ((readl(CONFIG_SAR_REG) & BIT(21)) ? \
      |                             ^~~~~
./arch/arm/include/asm/arch/config.h:56:32: note: in expansion of macro ‘CONFIG_SYS_TCLK’
   56 | #define CONFIG_SYS_TIMER_RATE  CONFIG_SYS_TCLK
      |                                ^~~~~~~~~~~~~~~
lib/time.c:52:7: note: in expansion of macro ‘CONFIG_SYS_TIMER_RATE’
   52 | #elif CONFIG_SYS_TIMER_RATE > 1000000
      |       ^~~~~~~~~~~~~~~~~~~~~
make[1]: *** [scripts/Makefile.build:257: lib/time.o] Fehler 1

-michael

Reply via email to