[PATCH v11 0/13] Add support for RaspberryPi RP1 PCI device using a DT overlay
Andrea della Porta
andrea.porta at suse.com
Thu May 29 06:39:06 PDT 2025
Again, this patchset for some reason has duplicated Message-Id for
patches 1 to 5, so they will result as clobbered up. Please ignore
V10 and V11, I'll send V12 which should be, hopefully, the correct one.
Sorry for that.
Andrea
On 14:43 Thu 29 May , Andrea della Porta wrote:
> *** RESENDING PATCHSET AS V11 SINCE LAST ONE HAS CLOBBERED SEQUENCE NUMBER ***
>
> RP1 is an MFD chipset that acts as a south-bridge PCIe endpoint sporting
> a pletora of subdevices (i.e. Ethernet, USB host controller, I2C, PWM,
> etc.) whose registers are all reachable starting from an offset from the
> BAR address. The main point here is that while the RP1 as an endpoint
> itself is discoverable via usual PCI enumeraiton, the devices it contains
> are not discoverable and must be declared e.g. via the devicetree.
>
> This patchset is an attempt to provide a minimum infrastructure to allow
> the RP1 chipset to be discovered and perpherals it contains to be added
> from a devictree overlay loaded during RP1 PCI endpoint enumeration. To
> ensure compatibility with downstream, a devicetree already comprising the
> RP1 node is also provided, so it's not strictly necessary to use the
> dynamically loaded overlay if the devicetree is already fully defined at
> the origin.
> To achieve this modularity, the RP1 node DT definitions are arranged by
> file inclusion as per following schema (the arrow points to the includer,
> see also [9]):
>
> rp1-pci.dtso rp1.dtso
> ^ ^
> | |
> rp1-common.dtsi ----> rp1-nexus.dtsi ----> bcm2712-rpi-5-b.dts
> ^
> |
> bcm2712-rpi-5-b-ovl-rp1.dts
>
> Followup patches should add support for the several peripherals contained
> in RP1.
>
> This work is based upon dowstream drivers code and the proposal from RH
> et al. (see [1] and [2]). A similar approach is also pursued in [3].
>
> The patches are ordered as follows:
>
> -PATCHES 1 to 3: add binding schemas for clock, gpio and RP1 peripherals.
> They are needed to support the other peripherals, e.g. the ethernet mac
> depends on a clock generated by RP1 and the phy is reset through the
> on-board gpio controller.
>
> -PATCH 4 and 5: add clock and gpio device drivers.
>
> -PATCH 6: the devicetree node describing the RP1 chipset.
>
> -PATCH 7: this is the main patch to support RP1 chipset. It can work
> either with a fully defined devicetree (i.e. one that already included
> the rp1 node since boot time) or with a runtime loaded dtb overlay
> which is linked as binary blob in the driver obj. This duality is
> useful to comply with both downstream and upstream needs (see [9]).
> The real dtso is in devicetree folder while the dtso in driver folder is
> just a placeholder to include the real dtso.
> In this way it is possible to check the dtso against dt-bindings.
> The reason why drivers/misc has been selected as containing folder
> for this driver can be seen in [6], [7] and [8].
>
> -PATCH 8: add the external clock node (used by RP1) to the main dts.
>
> -PATCH 9: the fully fledged devictree containing also the rp1 node.
> This devicetree is functionally similar to the one downstream is using.
>
> -PATCH 10 (OPTIONAL): this patch introduces a new scenario about how
> the rp1 node is specified and loaded in DT. On top of the base DT
> (without rp1 node), the fw loads this overlay and the end result is
> the same devicetree as in patch 9, which is then passed to the next
> stage (either the kernel or u-boot/bootloader).
> While this patch is not strictly necessary and can therefore be dropped
> (see [10]), it's not introducing much extra work and maybe can come
> in handy while debugging.
>
> -PATCH 11: add the relevant kernel CONFIG_ options to defconfig.
>
> -PATCH 12: enable CONFIG_OF_OVERLAY in order for 'make defconfig'
> to produce a configuration valid for the RP1 driver. Without this
> patch, the user has to explicitly enable it since the misc driver
> depends on OF_OVERLAY.
>
> -PATCH 13: collect all changes for MAINTAINERS file.
>
> This patchset is also a first attempt to be more agnostic wrt hardware
> description standards such as OF devicetree and ACPI, where 'agnostic'
> means "using DT in coexistence with ACPI", as been already promoted
> by e.g. AL (see [4]). Although there's currently no evidence it will also
> run out of the box on purely ACPI system, it is a first step towards
> that direction.
>
> Many thanks,
> Andrea della Porta
>
> Links:
> - [1]: https://lpc.events/event/17/contributions/1421/attachments/1337/2680/LPC2023%20Non-discoverable%20devices%20in%20PCI.pdf
> - [2]: https://lore.kernel.org/lkml/20230419231155.GA899497-robh@kernel.org/t/
> - [3]: https://lore.kernel.org/all/20240808154658.247873-1-herve.codina@bootlin.com/#t
> - [4]: https://lore.kernel.org/all/73e05c77-6d53-4aae-95ac-415456ff0ae4@lunn.ch/
> - [5]: https://lore.kernel.org/all/20240626104544.14233-1-svarbanov@suse.de/
> - [6]: https://lore.kernel.org/all/20240612140208.GC1504919@google.com/
> - [7]: https://lore.kernel.org/all/83f7fa09-d0e6-4f36-a27d-cee08979be2a@app.fastmail.com/
> - [8]: https://lore.kernel.org/all/2024081356-mutable-everyday-6f9d@gregkh/
> - [9]: https://lore.kernel.org/all/Z87wTfChRC5Ruwc0@apocalypse/
> - [10]: https://lore.kernel.org/all/CAMEGJJ0f4YUgdWBhxvQ_dquZHztve9KO7pvQjoDWJ3=zd3cgcg@mail.gmail.com/#t
>
> CHANGES IN V11
>
>
> PATCH RELATED -------------------------------------------------
>
> - Patch 10,11,12: Added: Reviewed-by: Reviewed-by: Florian Fainelli <florian.fainelli at broadcom.com>
>
> - Patches reworked to apply cleanly on broadcom/stblinux branches:
> patch 1,2,3,6,8,9,10 -> devicetree/next
> patch 11,12 -> defconfig/next
> patch 4,5,7 -> drivers/next
> patch 13 -> maintainers/next
>
> - Patch 13: new patch gathering all changes for MAINTAINERS
>
>
> RP1 CLOCK DRIVER ------------------------------------
>
> - Dropped some WARN_ONCE() lines that are basically useless
>
> - rp1_clock_set_parent() now returns EINVAL in case the parent check
> is failing. As a result, rp1_clock_set_rate_and_parent() has also
> been adapted to return rp1_clock_set_parent() retcode.
>
> - Return an ERR_PTR from rp1_register_clock() instead of just NULL
>
> - Dropped some unaesthetic blank lines
>
> - Disabled the builtin locking in regmap since we're already dealing
> with concurrency in the code
>
> - rp1_clk_probe(): dropped dev_err_probe() as redundant due to commit
> 12a0fd23e870 ("clk: Print an error when clk registration fails")
>
More information about the linux-arm-kernel
mailing list