[U-Boot] [PATCH v4 1/1] board: arm: Add support for Broadcom BCM7445
Thomas Fitzsimmons
fitzsim at fitzsim.org
Tue Aug 27 22:31:33 UTC 2019
Hi Bin,
Bin Meng <bmeng.cn at gmail.com> writes:
> Hi Thomas,
>
> On Sat, Jun 9, 2018 at 6:06 AM Thomas Fitzsimmons <fitzsim at 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 at fitzsim.org>
>> Cc: Stefan Roese <sr at denx.de>
>> Cc: Tom Rini <trini at konsulko.com>
>> Cc: Florian Fainelli <f.fainelli at 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
More information about the U-Boot
mailing list