[PATCH v4 0/3] PCI: introduce TC9564 misc driver

From: Alex Elder

Date: Fri Sep 18 2026 - 12:05:35 EST


The Toshiba TC9564 is specialized SoC that implements a PCIe switch as
well as an Ethernet AVB/TSN bridge. It also implements other functions,
including a reset and clock controller, an address translation unit, and
a few other devices. PCIe BARs provide access to registers that manage
these IP blocks, and the SoC is modeled using a PCI endpoint bus in
devicetree. This allows the IP blocks to be bound to platform drivers
using MMIO through the PCI BARs.

This series introduces the simple PCI driver necessary to implement the
PCI endpoint bus. It enables the device, enables master access, and
then scans the devicetree subnodes to discover any devices defined
within the endpoint buses.

The driver is placed in the "misc" directory, following the practice
of other PCI endpoint bus drivers.

This version of the series was sent quickly after version 2, to just
address some very simple Sashiko-reported observations before others
had a chance to comment.

-Alex

Note: to work correctly, this series depends on this:
https://lore.kernel.org/lkml/20260910021919.3421449-1-elder@xxxxxxxxxxxx/

Between version 3 and version 4:
- Dropped the pci-ep-bus@0 node from the DT binding example, because
we have found we can do without programming translation unit, which
is the only user of this bus (BAR).
- Modified some details for the TC9564_PCI Kconfig:
- Added "depends on OF"
- Added "select PCI_DYNAMIC_OF_NODES"
- Added "select PCI_QUIRKS"
- Added "default m"
- Probe now uses pci_enable_device() rather than pcim_enable_device(),
and all error and exit paths handle calling pci_disable_device()

Version 3 is available here:
https://lore.kernel.org/lkml/20260915181003.1633543-1-elder@xxxxxxxxxxxx/

Between version 2 and version 3:
- Call of_platform_depopulate() if case of_platform_populate() returns
an error in tc9564_function_probe()
- Eliminated an unnecessary dependency in the Kconfig file
- Updated "parent addresses" in the DTS file
- Fixed a dumb typo in the binding
- Note:
- Ignoring the Sashiko report about the place holder ranges
possibly not being updated at runtime. (The above-mentioned
prerequisite series will cause them to be updated.)
- Ignoring the Sashiko report that the pci-ep-bus nodes should
include a reg property that matches the node's unit number.

Version 2 is available here:
https://lore.kernel.org/lkml/20260915031038.1087264-1-elder@xxxxxxxxxxxx/

Between version 1 and version 2:
- Updated the block diagram in the binding to include BAR2 and SRAM
- Use KBUILD_MODNAME for the driver name
- Removed bogus initialization of pci_driver->driver field
- Added the third patch, which defines pci-ep-bus DTS information.
- Now based on the Qualcomm for-next branch

Version 1 is available here:
https://lore.kernel.org/lkml/20260813222943.1655453-1-elder@xxxxxxxxxxxx/


Alex Elder (3):
dt-bindings: misc: introduce pci1179,0220.yaml
misc: tc9564: introduce base PCI driver
arm64: dts: qcom: qcs6490-rb3gen2: add endpoint buses

.../bindings/misc/pci1179,0220.yaml | 146 ++++++++++++++++++
MAINTAINERS | 7 +
arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 30 ++++
drivers/misc/Kconfig | 15 ++
drivers/misc/Makefile | 1 +
drivers/misc/tc9564-pci.c | 84 ++++++++++
drivers/pci/quirks.c | 1 +
7 files changed, 284 insertions(+)
create mode 100644 Documentation/devicetree/bindings/misc/pci1179,0220.yaml
create mode 100644 drivers/misc/tc9564-pci.c


base-commit: b41f628f0cbcac09e6bfe7bc322e2d0c7c7403d0
--
2.53.0