[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <cover.1733136811.git.andrea.porta@suse.com>
Date: Mon, 2 Dec 2024 12:19:24 +0100
From: Andrea della Porta <andrea.porta@...e.com>
To: Andrea della Porta <andrea.porta@...e.com>,
Michael Turquette <mturquette@...libre.com>,
Stephen Boyd <sboyd@...nel.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Florian Fainelli <florian.fainelli@...adcom.com>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@...adcom.com>,
Lorenzo Pieralisi <lpieralisi@...nel.org>,
Krzysztof Wilczynski <kw@...ux.com>,
Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>,
Bjorn Helgaas <bhelgaas@...gle.com>,
Linus Walleij <linus.walleij@...aro.org>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Bartosz Golaszewski <brgl@...ev.pl>,
Derek Kiernan <derek.kiernan@....com>,
Dragan Cvetic <dragan.cvetic@....com>,
Arnd Bergmann <arnd@...db.de>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Saravana Kannan <saravanak@...gle.com>,
linux-clk@...r.kernel.org,
devicetree@...r.kernel.org,
linux-rpi-kernel@...ts.infradead.org,
linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org,
linux-pci@...r.kernel.org,
linux-gpio@...r.kernel.org,
Masahiro Yamada <masahiroy@...nel.org>,
Stefan Wahren <wahrenst@....net>,
Herve Codina <herve.codina@...tlin.com>,
Luca Ceresoli <luca.ceresoli@...tlin.com>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Andrew Lunn <andrew@...n.ch>
Subject: [PATCH v5 00/10] Add support for RaspberryPi RP1 PCI device using a DT overlay
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.
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 4: 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 though the
on-board gpio controller.
-PATCH 5 and 6: add clock and gpio device drivers.
-PATCH 7: the devicetree overlay describing the RP1 chipset. Please
note that this patch should be taken by the same maintainer that will
also take patch 11, since txeieh dtso is compiled in as binary blob and is
closely coupled to the driver.
-PATCH 8: this is the main patch to support RP1 chipset and peripherals
enabling through dtb overlay. The dtso since is intimately coupled with
the driver and will be linked in as binary blob in the driver obj.
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 9: add the external clock node (used by RP1) to the main dts.
-PATCH 10: add the relevant kernel CONFIG_ options to defconfig.
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.
Please note that albeit this patchset has no prerequisites in order to
be applied cleanly, it still depends on Stanimir's WIP patchset for BCM2712
PCIe controller (see [5]) in order to work at runtime.
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/
CHANGES IN V5:
PATCH RELATED -------------------------------------------------
- patch 1 and 2: added: 'Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>'
- patch 6 and 10: added 'Reviewed-by: Stefan Wahren <wahrenst@....net>'
- rebased on v6.13-rc1
KCONFIG -----------------------------------------
- drivers/misc/rp1/Kconfig: leading spaces converted to tab
RP1 MISC DRIVER -----------------------------------
- added a comment to describe ovcs_id field from struct rp1_dev
- added braces around a single line if statement followed by a braced
else condition
- removed a double space character
GPIO/PINCTRL --------------------------------------
- moved a multiplication (*) sign to the line it belongs to (code style
fixup)
DTS -----------------------------------------
- Moved clk_rp1_xosc from SoC DTS to board DTS
BINDINGS ------------------------------------
- pci1de4,1.yaml: adjusted ranges and reg properties in the example
to better reflect the address from RP1 documentation. These refelcts
the same convention used in the dtso
- raspberrypi,rp1-gpio.yaml: fixed 'pins' pattern to go at most up to 53
- raspberrypi,rp1-gpio.yaml: using single quotes consistently over double
quotes
- raspberrypi,rp1-gpio.yaml: added some pin config option supported by the
hw/driver but missing in the schema
Andrea della Porta (10):
dt-bindings: clock: Add RaspberryPi RP1 clock bindings
dt-bindings: pinctrl: Add RaspberryPi RP1 gpio/pinctrl/pinmux bindings
dt-bindings: pci: Add common schema for devices accessible through PCI
BARs
dt-bindings: misc: Add device specific bindings for RaspberryPi RP1
clk: rp1: Add support for clocks provided by RP1
pinctrl: rp1: Implement RaspberryPi RP1 gpio support
arm64: dts: rp1: Add support for RaspberryPi's RP1 device
misc: rp1: RaspberryPi RP1 misc driver
arm64: dts: bcm2712: Add external clock for RP1 chipset on Rpi5
arm64: defconfig: Enable RP1 misc/clock/gpio drivers
.../clock/raspberrypi,rp1-clocks.yaml | 58 +
.../devicetree/bindings/misc/pci1de4,1.yaml | 73 +
.../devicetree/bindings/pci/pci-ep-bus.yaml | 58 +
.../pinctrl/raspberrypi,rp1-gpio.yaml | 198 +++
MAINTAINERS | 14 +
.../boot/dts/broadcom/bcm2712-rpi-5-b.dts | 7 +
arch/arm64/boot/dts/broadcom/rp1.dtso | 58 +
arch/arm64/configs/defconfig | 3 +
drivers/clk/Kconfig | 9 +
drivers/clk/Makefile | 1 +
drivers/clk/clk-rp1.c | 1527 +++++++++++++++++
drivers/misc/Kconfig | 1 +
drivers/misc/Makefile | 1 +
drivers/misc/rp1/Kconfig | 21 +
drivers/misc/rp1/Makefile | 3 +
drivers/misc/rp1/rp1-pci.dtso | 8 +
drivers/misc/rp1/rp1_pci.c | 366 ++++
drivers/misc/rp1/rp1_pci.h | 14 +
drivers/pci/quirks.c | 1 +
drivers/pinctrl/Kconfig | 11 +
drivers/pinctrl/Makefile | 1 +
drivers/pinctrl/pinctrl-rp1.c | 789 +++++++++
.../clock/raspberrypi,rp1-clocks.h | 61 +
include/linux/pci_ids.h | 3 +
24 files changed, 3286 insertions(+)
create mode 100644 Documentation/devicetree/bindings/clock/raspberrypi,rp1-clocks.yaml
create mode 100644 Documentation/devicetree/bindings/misc/pci1de4,1.yaml
create mode 100644 Documentation/devicetree/bindings/pci/pci-ep-bus.yaml
create mode 100644 Documentation/devicetree/bindings/pinctrl/raspberrypi,rp1-gpio.yaml
create mode 100644 arch/arm64/boot/dts/broadcom/rp1.dtso
create mode 100644 drivers/clk/clk-rp1.c
create mode 100644 drivers/misc/rp1/Kconfig
create mode 100644 drivers/misc/rp1/Makefile
create mode 100644 drivers/misc/rp1/rp1-pci.dtso
create mode 100644 drivers/misc/rp1/rp1_pci.c
create mode 100644 drivers/misc/rp1/rp1_pci.h
create mode 100644 drivers/pinctrl/pinctrl-rp1.c
create mode 100644 include/dt-bindings/clock/raspberrypi,rp1-clocks.h
--
2.35.3
Powered by blists - more mailing lists