
Hi Bin,
Bin Meng bmeng.cn@gmail.com writes:
Hi Thomas,
On Sat, Jun 9, 2018 at 6:06 AM Thomas Fitzsimmons fitzsim@fitzsim.org wrote:
Add support for loading U-Boot on the Broadcom 7445 SoC. This port assumes Broadcom's BOLT bootloader is acting as the second stage bootloader, and U-Boot is acting as the third stage bootloader, loaded as an ELF program by BOLT.
Signed-off-by: Thomas Fitzsimmons fitzsim@fitzsim.org Cc: Stefan Roese sr@denx.de Cc: Tom Rini trini@konsulko.com Cc: Florian Fainelli f.fainelli@gmail.com
Changes for v4:
- Use high timer register for get_ticks
- Move hard-coded register addresses from Kconfig to header
- Document I-cache/D-cache expectation
MAINTAINERS | 10 + arch/arm/Kconfig | 12 + arch/arm/Makefile | 1 + arch/arm/mach-bcmstb/Kconfig | 36 ++ arch/arm/mach-bcmstb/Makefile | 8 + arch/arm/mach-bcmstb/include/mach/gpio.h | 11 + arch/arm/mach-bcmstb/include/mach/hardware.h | 11 + arch/arm/mach-bcmstb/include/mach/prior_stage.h | 30 ++ arch/arm/mach-bcmstb/include/mach/sdhci.h | 15 + arch/arm/mach-bcmstb/include/mach/timer.h | 13 + arch/arm/mach-bcmstb/lowlevel_init.S | 21 ++ board/broadcom/bcmstb/MAINTAINERS | 7 + board/broadcom/bcmstb/Makefile | 8 + board/broadcom/bcmstb/bcmstb.c | 194 +++++++++++ configs/bcm7445_defconfig | 27 ++ doc/README.bcm7xxx | 150 ++++++++ drivers/mmc/Kconfig | 11 + drivers/mmc/Makefile | 1 + drivers/mmc/bcmstb_sdhci.c | 67 ++++ drivers/spi/Kconfig | 7 + drivers/spi/Makefile | 1 + drivers/spi/bcmstb_spi.c | 439 ++++++++++++++++++++++++ drivers/spi/spi-uclass.c | 2 +- dts/Kconfig | 7 + include/configs/bcm7445.h | 26 ++ include/configs/bcmstb.h | 183 ++++++++++ include/fdtdec.h | 4 + lib/fdtdec.c | 4 + 28 files changed, 1305 insertions(+), 1 deletion(-) create mode 100644 arch/arm/mach-bcmstb/Kconfig create mode 100644 arch/arm/mach-bcmstb/Makefile create mode 100644 arch/arm/mach-bcmstb/include/mach/gpio.h create mode 100644 arch/arm/mach-bcmstb/include/mach/hardware.h create mode 100644 arch/arm/mach-bcmstb/include/mach/prior_stage.h create mode 100644 arch/arm/mach-bcmstb/include/mach/sdhci.h create mode 100644 arch/arm/mach-bcmstb/include/mach/timer.h create mode 100644 arch/arm/mach-bcmstb/lowlevel_init.S create mode 100644 board/broadcom/bcmstb/MAINTAINERS create mode 100644 board/broadcom/bcmstb/Makefile create mode 100644 board/broadcom/bcmstb/bcmstb.c create mode 100644 configs/bcm7445_defconfig create mode 100644 doc/README.bcm7xxx create mode 100644 drivers/mmc/bcmstb_sdhci.c create mode 100644 drivers/spi/bcmstb_spi.c create mode 100644 include/configs/bcm7445.h create mode 100644 include/configs/bcmstb.h
[snip]
diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c index d2d091f..c517d06 100644 --- a/drivers/spi/spi-uclass.c +++ b/drivers/spi/spi-uclass.c @@ -273,7 +273,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, bool created = false; int ret;
-#if CONFIG_IS_ENABLED(OF_PLATDATA) +#if CONFIG_IS_ENABLED(OF_PLATDATA) || CONFIG_IS_ENABLED(OF_PRIOR_STAGE)
Could you please explain this change a little bit? Why should we call uclass_first_device_err() for OF_PRIOR_STAGE?
ret = uclass_first_device_err(UCLASS_SPI, &bus);
#else ret = uclass_get_device_by_seq(UCLASS_SPI, busnum, &bus);
On the BCM7445 eval board, the prior-stage-provided device tree does not have an alias for spi0, though it has aliases for other device types; I don't know why this is the case, but I don't have control over what the prior stage bootloader (Broadcom's BOLT) provides. Without that alias, uclass_get_device_by_seq fails to find the SPI bus (and so U-Boot can't find the SPI flash device that stores its environment).
At the time, I checked other ARM device trees in the Linux kernel and not many set an alias for spi0, so I wrote the patch to choose the first SPI bus. Doing so was in line with what CONFIG_OF_PLATDATA did on boards that wanted to avoid device tree accesses.
I see that since I introduced CONFIG_OF_PRIOR_STAGE, several other ports have started using it, so there's probably a need to generalize this; if other prior stage bootloaders provide SPI aliases then there should be a way for this code to use them.
diff --git a/dts/Kconfig b/dts/Kconfig index 0cef225..a1a92f2 100644 --- a/dts/Kconfig +++ b/dts/Kconfig @@ -101,6 +101,13 @@ config OF_HOSTFILE This is only useful for Sandbox. Use the -d flag to U-Boot to specify the file to read.
+config OF_PRIOR_STAGE
bool "Prior stage bootloader DTB for DT control"
help
If this option is enabled, the device tree used for DT
control will be read from a device tree binary, at a memory
location passed to U-Boot by the prior stage bootloader.
endchoice
[snip]
Thomas