[PATCH v4 00/13] Raspberry Pi 400/Compute Module 4 support

Simon Glass sjg at chromium.org
Wed Dec 23 01:19:01 CET 2020


Hi Nicolas,

On Tue, 22 Dec 2020 at 05:36, Nicolas Saenz Julienne
<nsaenzjulienne at suse.de> wrote:
>
> @Simon: I had to roll back all "if (CONFIG_IS_ENABLED(DM_DMA)" uses. As
> per buildman it breaks compilation when !DM or !DM_DMA due to access to
> undefined variables, namely dev and dev->dma_offset. I figure in u-boot
> we root for small Image sizes, so defining the variables regarless of
> them being needed is not an option.

Our approach so far is to define inline functions to get/set the
variables, which do nothing if those vars don't exist. See
gd_of_root() for example.

>
> ---
>
> This series could be split into at least two or even three parts, but I
> kept it as is for now as it contains all the changes needed in order to
> have u-boot working on the new Raspberry Pi 400 and Raspberry Pi Compute
> Module 4.
>
> There are core changes, specifically with regard to cpu to bus address
> space translations. So far we had relied on hard-coded values but RPi
> needs per device translations as it has at least three distinct bus
> address spaces with different offsets. So it's a good opportunity to
> implement bus translations the right way by parsing DT's dma-ranges.
>
> Here's a more concrete example of what we're dealing with:
>
>  - On a RPi4, SoC version BCM2711C0 with 8GB of memory
>
>         [0x0 0x200000000]   [0x200000000 0x400000000]  [0xc0000000 0x100000000]  [0x00000000 0x100000000]
>          phys/cpu address       PCIe bus address           Legacy peripheral           emmc2 address
>              space                   space                   address space                space
>
>  - On a RPi4, SoC version BCM2711C0 with 4GB of memory
>
>         [0x0 0x100000000]   [0x100000000 0x200000000]  [0xc0000000 0x100000000]  [0x00000000 0x100000000]
>           phys/cpu address      PCIe bus address          Legacy peripheral            emmc2 address
>             space                  space                    address space                space
>
> - On a RPi4, SoC version BCM2711B0 with 8GB of memory (bus can only access the
>   lower 3GB of memory because of a SoC routing bug)
>
>         [0x0 0x200000000]   [0x00000000 0xC0000000]   [0xc0000000 0x100000000]
>          phys/cpu address      PCIe bus address          Legacy peripheral
>             space                  space                   address space
>
> ---
>
> Changes since v3:
>  - Add commit "video: arm: rpi: Add brcm,bcm2711-hdmi0 compatible", it's
>    pretty harmless
>  - Get rid of non-device based phys2bus call in xhci & mmc
>  - Simon's review changes in tests
>  - Comment some of the APIs
>
> Changes since v2:
>  - Test builds not broken with buildman
>  - Add tests to all DM changes
>  - Make code conditional with config option
>  - Correct OF refcount
>  - Add config changes
>  - Address small changes as per reviews
>
> Changes since v1:
>  - Fix some issues in 'dm: Introduce xxx_get_dma_range()'
>  - Fix some typos in commit messages
>  - Change DTB file name for RPi400
>  - Address Matthias' comments
>
> Nicolas Saenz Julienne (13):
>   rpi: Add identifier for the new RPi400
>   rpi: Add identifier for the new CM4
>   pci: pcie-brcmstb: Fix inbound window configurations
>   dm: Introduce xxx_get_dma_range()
>   dm: test: Add test case for dev_get_dma_ranges()
>   dm: Introduce DMA constraints into the core device model
>   dm: test: Add test case for dev->dma_offset
>   dm: Introduce dev_phys_to_bus()/dev_bus_to_phys()
>   dm: test: Add test case for dev_phys_to_bus()/dev_bus_to_phys()
>   xhci: translate virtual addresses into the bus's address space
>   mmc: Introduce mmc_phys_to_bus()/mmc_bus_to_phys()
>   configs: rpi4: Enable DM_DMA across all RPi4 configurations
>   video: arm: rpi: Add brcm,bcm2711-hdmi0 compatible
>
>  arch/sandbox/dts/test.dts          | 21 ++++++++
>  board/raspberrypi/rpi/rpi.c        | 10 ++++
>  common/fdt_support.c               | 73 ++++++++++++++++++++++++++++
>  configs/rpi_4_32b_defconfig        |  1 +
>  configs/rpi_4_defconfig            |  1 +
>  configs/rpi_arm64_defconfig        |  1 +
>  configs/sandbox64_defconfig        |  1 +
>  configs/sandbox_defconfig          |  1 +
>  configs/sandbox_flattree_defconfig |  1 +
>  configs/sandbox_spl_defconfig      |  1 +
>  drivers/core/Kconfig               | 10 ++++
>  drivers/core/device.c              | 45 +++++++++++++++++
>  drivers/core/of_addr.c             | 78 ++++++++++++++++++++++++++++++
>  drivers/core/ofnode.c              |  9 ++++
>  drivers/core/read.c                |  6 +++
>  drivers/mmc/sdhci.c                |  7 +--
>  drivers/pci/pcie_brcmstb.c         | 12 ++---
>  drivers/usb/host/xhci-mem.c        | 45 +++++++++--------
>  drivers/usb/host/xhci-ring.c       | 11 +++--
>  drivers/usb/host/xhci.c            |  4 +-
>  drivers/video/bcm2835.c            |  1 +
>  include/dm/device.h                |  5 ++
>  include/dm/of_addr.h               | 17 +++++++
>  include/dm/ofnode.h                | 16 ++++++
>  include/dm/read.h                  | 21 ++++++++
>  include/fdt_support.h              | 14 ++++++
>  include/mmc.h                      | 10 ++++
>  include/phys2bus.h                 | 16 ++++++
>  include/usb/xhci.h                 | 22 ++++++++-
>  test/dm/Makefile                   |  2 +
>  test/dm/core.c                     | 30 ++++++++++++
>  test/dm/phys2bus.c                 | 37 ++++++++++++++
>  test/dm/read.c                     | 49 +++++++++++++++++++
>  33 files changed, 540 insertions(+), 38 deletions(-)
>  create mode 100644 test/dm/phys2bus.c
>  create mode 100644 test/dm/read.c
>
> --
> 2.29.2
>

Regards,
Simon


More information about the U-Boot mailing list