Re: [RFC 0/9] PCI: introduce the concept of power sequencing of PCIe devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 04/01/2024 14:01, Bartosz Golaszewski wrote:
From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx>

During last year's Linux Plumbers we had several discussions centered
around the need to power-on PCI devices before they can be detected on
the bus.

The consensus during the conference was that we need to introduce a
class of "PCI slot drivers" that would handle the power-sequencing.

After some additional brain-storming with Manivannan and the realization
that the DT maintainers won't like adding any "fake" nodes not
representing actual devices, we decided to reuse the existing
infrastructure provided by the PCIe port drivers.

The general idea is to instantiate platform devices for child nodes of
the PCIe port DT node. For those nodes for which a power-sequencing
driver exists, we bind it and let it probe. The driver then triggers a
rescan of the PCI bus with the aim of detecting the now powered-on
device. The device will consume the same DT node as the platform,
power-sequencing device. We use device links to make the latter become
the parent of the former.

The main advantage of this approach is not modifying the existing DT in
any way and especially not adding any "fake" platform devices.

I've successfully tested this serie for the WCN7850 Wifi/BT combo onboard chip
present on the SM8550-QRD and SM8650-QRD boards and it works just fine.

Here's a branch with the wcn7850 vreg table added to the pwrseq driver,
and the DT changes:
https://git.codelinaro.org/neil.armstrong/linux/-/commits/topic/sm8x50/wcn7850-wifi-pwrseq/?ref_type=heads

Thanks,
Neil


Bartosz Golaszewski (9):
   arm64: dts: qcom: sm8250: describe the PCIe port
   arm64: dts: qcom: qrb5165-rb5: describe the WLAN module of QCA6390
   PCI/portdrv: create platform devices for child OF nodes
   PCI: hold the rescan mutex when scanning for the first time
   PCI/pwrseq: add pwrseq core code
   dt-bindings: vendor-prefixes: add a PCI prefix for Qualcomm Atheros
   dt-bindings: wireless: ath11k: describe QCA6390
   PCI/pwrseq: add a pwrseq driver for QCA6390
   arm64: defconfig: enable the PCIe power sequencing for QCA6390

  .../net/wireless/qcom,ath11k-pci.yaml         |  14 ++
  .../devicetree/bindings/vendor-prefixes.yaml  |   1 +
  arch/arm64/boot/dts/qcom/qrb5165-rb5.dts      |  24 +++
  arch/arm64/boot/dts/qcom/sm8250.dtsi          |  10 +
  arch/arm64/configs/defconfig                  |   2 +
  drivers/pci/pcie/Kconfig                      |   2 +
  drivers/pci/pcie/Makefile                     |   2 +
  drivers/pci/pcie/portdrv.c                    |   3 +-
  drivers/pci/pcie/pwrseq/Kconfig               |  19 ++
  drivers/pci/pcie/pwrseq/Makefile              |   4 +
  drivers/pci/pcie/pwrseq/pcie-pwrseq-qca6390.c | 197 ++++++++++++++++++
  drivers/pci/pcie/pwrseq/pwrseq.c              |  83 ++++++++
  drivers/pci/probe.c                           |   2 +
  include/linux/pcie-pwrseq.h                   |  24 +++
  14 files changed, 386 insertions(+), 1 deletion(-)
  create mode 100644 drivers/pci/pcie/pwrseq/Kconfig
  create mode 100644 drivers/pci/pcie/pwrseq/Makefile
  create mode 100644 drivers/pci/pcie/pwrseq/pcie-pwrseq-qca6390.c
  create mode 100644 drivers/pci/pcie/pwrseq/pwrseq.c
  create mode 100644 include/linux/pcie-pwrseq.h






[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux