[PATCH 3/4] mach-sunxi: Configurable SPI clockdivider in SPL
Benedikt-Alexander Mokroß
u-boot at bamkrs.de
Tue Apr 28 16:04:06 CEST 2020
This patch adds a configurable spi clockdivider.
In the original version, the divider is set to /4 to mimic
the BROMs behaviour. However, in many cases this can be
changed to /2 or no divider at all to speed up the booting
process.
Signed-off-by: Benedikt-Alexander Mokroß <u-boot at bamkrs.de>
---
arch/arm/mach-sunxi/spl/spi/Kconfig | 18 ++++++++++++++++++
arch/arm/mach-sunxi/spl/spi/spl_spi_sunxi.c | 10 +++++++++-
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-sunxi/spl/spi/Kconfig b/arch/arm/mach-sunxi/spl/spi/Kconfig
index f92b80583f..2edc7c0917 100644
--- a/arch/arm/mach-sunxi/spl/spi/Kconfig
+++ b/arch/arm/mach-sunxi/spl/spi/Kconfig
@@ -9,4 +9,22 @@ config SPL_SPI_SUNXI_NOR
sunxi SPI-NOR Flash. It uses the same method as the boot ROM, so does
not need any extra configuration.
+choice
+ prompt "SPI Clockdivider of Allwinner SoCs in SPL"
+ depends on SPL_SPI_SUNXI
+ ---help---
+ Select which clock divider should be used for spi clock
+
+config SPL_SPI_SUNXI_DIV_4
+ bool "Clock / 4"
+ default y
+
+config SPL_SPI_SUNXI_DIV_2
+ bool "Clock / 2"
+
+config SPL_SPI_SUNXI_DIV_NONE
+ bool "No clock divider"
+
+endchoice
+
endif
diff --git a/arch/arm/mach-sunxi/spl/spi/spl_spi_sunxi.c b/arch/arm/mach-sunxi/spl/spi/spl_spi_sunxi.c
index 2f1d40dcfe..fd5f84a90c 100644
--- a/arch/arm/mach-sunxi/spl/spi/spl_spi_sunxi.c
+++ b/arch/arm/mach-sunxi/spl/spi/spl_spi_sunxi.c
@@ -69,8 +69,16 @@ void sunxi_spi0_enable_clock(void)
setbits_le32(CCM_AHB_GATING0, (1 << AHB_GATE_OFFSET_SPI0));
/* Clock divider */
- writel(SPI0_CLK_DIV_BY_4, base + (is_sun6i_gen_spi() ?
+ if (IS_ENABLED(CONFIG_SPL_SPI_SUNXI_DIV_4))
+ writel(SPI0_CLK_DIV_BY_4, base + (is_sun6i_gen_spi() ?
SUN6I_SPI0_CCTL : SUN4I_SPI0_CCTL));
+ else if (IS_ENABLED(CONFIG_SPL_SPI_SUNXI_DIV_2))
+ writel(SPI0_CLK_DIV_BY_2, base + (is_sun6i_gen_spi() ?
+ SUN6I_SPI0_CCTL : SUN4I_SPI0_CCTL));
+ else
+ writel(SPI0_CLK_DIV_NONE, base + (is_sun6i_gen_spi() ?
+ SUN6I_SPI0_CCTL : SUN4I_SPI0_CCTL));
+
/* 24MHz from OSC24M */
writel((1 << 31), CCM_SPI0_CLK);
--
2.20.1
More information about the U-Boot
mailing list