power: sequencing: implement the subsystem and add first users
Subsystems (13)
v6 cover power: sequencing: implement the subsystem and add first users
From: Bartosz Golaszewski <[email protected]>
Note: I dropped most of the the review and test tags on purpose, the code changed significantly and warrants a new round of reviews and tests.
===
Problem statement #1: Dynamic bus chicken-and-egg problem.
Certain on-board PCI devices need to be powered up before they are can be detected but their PCI drivers won't get bound until the device is powered-up so enabling the relevant resources in the PCI device driver itself is impossible.
Problem statement #2: Sharing inter-dependent resources between devices.
Certain devices that use separate drivers (often on different busses) share resources (regulators, clocks, etc.). Typically these resources are reference-counted but in some cases there are additional interactions between them to consider, for example specific power-up sequence timings.
===
The reason for tackling both of these problems in a single series is the fact the the platform I'm working on - Qualcomm RB5 - deals with both and both need to be addressed in order to enable WLAN and Bluetooth support upstream.
The on-board WLAN/BT package - QCA6391 - has a Power Management Unit that takes inputs from the host and exposes LDO outputs consumed by the BT and WLAN modules which can be powered-up and down independently. However a delay of 100ms must be respected between enabling the BT- and WLAN-enable GPIOs.
A similar design with a discreet PMU is also employed in other models of the WCN family of chips although we can often do without the delays. With this series we add support for the WCN7850 as well.
===
We introduce a new subsystem here - the power sequencing framework. The qcom-wcn driver that we add is its first user. It implements the power-up sequences for QCA6390 and WCN7850 chips. However - we only use it to power-up the bluetooth module in the former. We use it to driver the WLAN modules in both. The reason for this is that for WCN7850 we have comprehensive bindings already upstream together with existing DT users. Porting them to using the pwrseq subsystem can be done separately and in an incremental manner once the subsystem itself is upstream. We will also have to ensure backward DT compatibility. To avoid overcomplicating this series, let's leave it out for now.
===
This series is logically split into several sections. I'll go patch-by-patch and explain each step.
Patches 1/16-5/16:
These contain all relevant DT bindings changes. We add new documents for the QCA6390 & WCN7850 PMUs and ATH12K devices as well as extend the bindings for the Qualcomm Bluetooth and ATH11K modules with regulators used by them in QCA6390.
Patches 6/16-8/16:
These contain changes to device-tree sources for the three platforms we work with in this series. We model the PMUs of the WLAN/BT chips as top-level platform devices on the device tree. In order to limit the scope of this series and not introduce an excessive amount of confusion with deprecating DT bindings, we leave the Bluetooth nodes on sm8650 and sm8550 as is (meaning: they continue to consumer the GPIOs and power inputs from the host). As the WCN7850 module doesn't require any specific timings, we can incrementally change that later.
In both cases we add WLAN nodes that consume the power outputs of the PMU. For QCA6390 we also make the Bluetooth node of the RB5 consume the outputs of the PMU - we can do it as the bindings for this chip did not define any supply handles prior to this series meaning we are able to get this correct right away.
Patches 9/16-12/16:
These contain the bulk of the PCI changes for this series. We introduce a simple framework for powering up PCI devices before detecting them on the bus.
The general approach is as follows: PCI devices that need special treatment before they can be powered up, scanned and bound to their PCI drivers must be described on the device-tree as child nodes of the PCI port node. These devices will be instantiated on the platform bus. They will in fact be generic platform devices with the compatible of the form used for PCI devices already upstream ("pci<vendor ID>,<device ID">). We add a new directory under drivers/pci/pwrctl/ that contains PCI pwrctl drivers. These drivers are platform drivers that will now be matched against the devices instantiated from port children just like any other platform pairs.
Both the power control platform device *AND* the associated PCI device reuse the same OF node and have access to the same properties. The goal of the platform driver is to request and bring up any required resources and let the pwrctl framework know that it's now OK to rescan the bus and detect the devices. When the device is bound, we are notified about it by the PCI bus notifier event and can establish a device link between the power control device and the PCI device so that any future extension for power-management will already be able to work with the correct hierachy.
The reusing of the OF node is the reason for the small changes to the PCI OF core: as the bootloader can possibly leave the relevant regulators on before booting linux, the PCI device can be detected before its platform abstraction is probed. In this case, we find that device first and mark its OF node as reused. The pwrctl framework handles the opposite case (when the PCI device is detected only after the platform driver successfully enabled it).
Patch 13/16 - 14/16:
These add a relatively simple power sequencing subsystem and the first driver using it: the pwrseq module for the PMUs on the WCN family of chips.
I'm proposing to add a subsystem that allows different devices to use a shared power sequence split into consumer-specific as well as common "units".
A power sequence provider driver registers a set of units with pwrseq core. Each unit can be enabled and disabled and contains an optional list of other units which must be enabled before it itself can be. A unit represents a discreet chunk of the power sequence.
It also registers a list of targets: a target is an abstraction wrapping a unit which allows consumers to tell pwrseq which unit they want to reach. Real-life example is the driver we're adding here: there's a set of common regulators, two PCIe-specific ones and two enable GPIOs: one for Bluetooth and one for WLAN.
The Bluetooth driver requests a descriptor to the power sequencer and names the target it wants to reach:
pwrseq = devm_pwrseq_get(dev, "bluetooth");
The pwrseq core then knows that when the driver calls:
pwrseq_power_on(pwrseq);
It must enable the "bluetooth-enable" unit but it depends on the "regulators-common" unit so this one is enabled first. The provider driver is also in charge of assuring an appropriate delay between enabling the BT and WLAN enable GPIOs. The WLAN-specific resources are handled by the "wlan-enable" unit and so are not enabled until the WLAN driver requests the "wlan" target to be powered on.
Another thing worth discussing is the way we associate the consumer with the relevant power sequencer. DT maintainers have expressed a discontent with the existing mmc pwrseq bindings and have NAKed an earlier initiative to introduce global pwrseq bindings to the kernel[1].
In this approach, we model the existing regulators and GPIOs in DT but the pwrseq subsystem requires each provider to provide a .match() callback. Whenever a consumer requests a power sequencer handle, we iterate over the list of pwrseq drivers and call .match() for each. It's up to the driver to verify in a platform-specific way whether it deals with its consumer and let the core pwrseq code know.
The advantage of this over reusing the regulator or reset subsystem is that it's more generalized and can handle resources of all kinds as well as deal with any kind of power-on sequences: for instance, Qualcomm has a PCI switch they want a driver for but this switch requires enabling some resources first (PCI pwrctl) and then configuring the device over I2C (which can be handled by the pwrseq provider).
Patch 15:
This patch makes the Qualcomm Bluetooth driver get and use the power sequencer for QCA6390.
Patch 16:
While tiny, this patch is possibly the highlight of the entire series. It uses the two abstraction layers we introduced before to create an elegant power sequencing PCI power control driver and supports the ath11k module on QCA6390 and ath12k on WCN7850.
With this series we can now enable BT and WLAN on several new Qualcomm boards upstream.
Tested on RB5, sm8650-qrd and sm8550-qrd.
Changelog:
Since v5:
- unify the approach to modelling the WCN WLAN/BT chips by always exposing the PMU node on the device tree and making the WLAN and BT nodes become consumers of its power outputs; this includes a major rework of the DT sources, bindings and driver code; there's no more a separate PCI pwrctl driver for WCN7850, instead its power-up sequence was moved into the pwrseq driver common for all WCN chips
- don't set load_uA from new regulator consumers
- fix reported kerneldoc issues
- drop voltage ranges for PMU outputs from DT
- many minor tweaks and reworks
v1: Original RFC:
https://lore.kernel.org/lkml/[email protected]/T/
v2: First real patch series (should have been PATCH v2) adding what I
referred to back then as PCI power sequencing:
https://lore.kernel.org/linux-arm-kernel/2024021413-grumbling-unlivable-c145@gregkh/T/
v3: RFC for the DT representation of the PMU supplying the WLAN and BT
modules inside the QCA6391 package (was largely separate from the series but probably should have been called PATCH or RFC v3):
https://lore.kernel.org/all/CAMRc=Mc+GNoi57eTQg71DXkQKjdaoAmCpB=h2ndEpGnmdhVV-Q@mail.gmail.com/T/
v4: Second attempt at the full series with changed scope (introduction of
the pwrseq subsystem, should have been RFC v4)
https://lore.kernel.org/lkml/[email protected]/T/
v5: Two different ways of handling QCA6390 and WCN7850:
https://lore.kernel.org/lkml/[email protected]/
Bartosz Golaszewski (16):
regulator: dt-bindings: describe the PMU module of the QCA6390 package
regulator: dt-bindings: describe the PMU module of the WCN7850 package
dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390
dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on
QCA6390
dt-bindings: net: wireless: describe the ath12k PCI module
arm64: dts: qcom: sm8550-qrd: add the Wifi node
arm64: dts: qcom: sm8650-qrd: add the Wifi node
arm64: dts: qcom: qrb5165-rb5: add the Wifi node
PCI: hold the rescan mutex when scanning for the first time PCI/pwrctl: reuse the OF node for power controlled devices PCI/pwrctl: create platform devices for child OF nodes of the port
node
PCI/pwrctl: add PCI power control core code
power: sequencing: implement the pwrseq core
power: pwrseq: add a driver for the PMU module on the QCom WCN
chipsets
Bluetooth: qca: use the power sequencer for QCA6390 PCI/pwrctl: add a PCI power control driver for power sequenced devices
.../net/bluetooth/qualcomm-bluetooth.yaml | 17 + .../net/wireless/qcom,ath11k-pci.yaml | 46 + .../bindings/net/wireless/qcom,ath12k.yaml | 100 ++ .../bindings/regulator/qcom,qca6390-pmu.yaml | 185 +++ MAINTAINERS | 8 + arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 103 +- arch/arm64/boot/dts/qcom/sm8250.dtsi | 10 + arch/arm64/boot/dts/qcom/sm8550-qrd.dts | 97 ++ arch/arm64/boot/dts/qcom/sm8550.dtsi | 10 + arch/arm64/boot/dts/qcom/sm8650-qrd.dts | 89 ++ arch/arm64/boot/dts/qcom/sm8650.dtsi | 10 + drivers/bluetooth/hci_qca.c | 74 +- drivers/pci/Kconfig | 1 + drivers/pci/Makefile | 1 + drivers/pci/bus.c | 9 +- drivers/pci/of.c | 14 +- drivers/pci/probe.c | 2 + drivers/pci/pwrctl/Kconfig | 17 + drivers/pci/pwrctl/Makefile | 6 + drivers/pci/pwrctl/core.c | 136 +++ drivers/pci/pwrctl/pci-pwrctl-pwrseq.c | 89 ++ drivers/pci/remove.c | 2 + drivers/power/Kconfig | 1 + drivers/power/Makefile | 1 + drivers/power/sequencing/Kconfig | 28 + drivers/power/sequencing/Makefile | 6 + drivers/power/sequencing/core.c | 1065 +++++++++++++++++ drivers/power/sequencing/pwrseq-qcom-wcn.c | 336 ++++++ include/linux/pci-pwrctl.h | 51 + include/linux/pwrseq/consumer.h | 56 + include/linux/pwrseq/provider.h | 75 ++ 31 files changed, 2614 insertions(+), 31 deletions(-) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml create mode 100644 Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml create mode 100644 drivers/pci/pwrctl/Kconfig create mode 100644 drivers/pci/pwrctl/Makefile create mode 100644 drivers/pci/pwrctl/core.c create mode 100644 drivers/pci/pwrctl/pci-pwrctl-pwrseq.c create mode 100644 drivers/power/sequencing/Kconfig create mode 100644 drivers/power/sequencing/Makefile create mode 100644 drivers/power/sequencing/core.c create mode 100644 drivers/power/sequencing/pwrseq-qcom-wcn.c create mode 100644 include/linux/pci-pwrctl.h create mode 100644 include/linux/pwrseq/consumer.h create mode 100644 include/linux/pwrseq/provider.h
Signature · 1 line
2.40.1
PATCH v6 1/16 regulator: dt-bindings: describe the PMU module of the QCA6390 package
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
--- .../bindings/regulator/qcom,qca6390-pmu.yaml | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml
Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml new file +151 -0
@@ -0,0 +1,151 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/qcom,qca6390-pmu.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. QCA6390 PMU Regulators + +maintainers: + - Bartosz Golaszewski <[email protected]> + +description: + The QCA6390 package contains discreet modules for WLAN and Bluetooth. They + are powered by the Power Management Unit (PMU) that takes inputs from the + host and provides LDO outputs. This document describes this module. + +properties: + compatible: + const: qcom,qca6390-pmu + + vddaon-supply: + description: VDD_AON supply regulator handle + + vddpmu-supply: + description: VDD_PMU supply regulator handle + + vddrfa0p95-supply: + description: VDD_RFA_0P95 supply regulator handle + + vddrfa1p3-supply: + description: VDD_RFA_1P3 supply regulator handle + + vddrfa1p9-supply: + description: VDD_RFA_1P9 supply regulator handle + + vddpcie1p3-supply: + description: VDD_PCIE_1P3 supply regulator handle<S-Del> + + vddpcie1p9-supply: + description: VDD_PCIE_1P9 supply regulator handle + + vddio-supply: + description: VDD_IO supply regulator handle + + wlan-enable-gpios: + maxItems: 1 + description: GPIO line enabling the ATH11K WLAN module supplied by the PMU + + bt-enable-gpios: + maxItems: 1 + description: GPIO line enabling the ATH11K Bluetooth module supplied by the PMU + + regulators: + type: object + description: + LDO outputs of the PMU + + patternProperties: + "^ldo[0-9]$": + $ref: regulator.yaml# + type: object + unevaluatedProperties: false + + additionalProperties: false + +required: + - compatible + - regulators + +allOf: + - if: + properties: + compatible: + contains: + const: qcom,qca6390-pmu + then: + required: + - vddaon-supply + - vddpmu-supply + - vddrfa0p95-supply + - vddrfa1p3-supply + - vddrfa1p9-supply + - vddpcie1p3-supply + - vddpcie1p9-supply + - vddio-supply + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + pmu { + compatible = "qcom,qca6390-pmu"; + + pinctrl-names = "default"; + pinctrl-0 = <&bt_en_state>, <&wlan_en_state>; + + vddaon-supply = <&vreg_s6a_0p95>; + vddpmu-supply = <&vreg_s2f_0p95>; + vddrfa0p95-supply = <&vreg_s2f_0p95>; + vddrfa1p3-supply = <&vreg_s8c_1p3>; + vddrfa1p9-supply = <&vreg_s5a_1p9>; + vddpcie1p3-supply = <&vreg_s8c_1p3>; + vddpcie1p9-supply = <&vreg_s5a_1p9>; + vddio-supply = <&vreg_s4a_1p8>; + + wlan-enable-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; + bt-enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; + + regulators { + vreg_pmu_rfa_cmn: ldo0 { + regulator-name = "vreg_pmu_rfa_cmn"; + }; + + vreg_pmu_aon_0p59: ldo1 { + regulator-name = "vreg_pmu_aon_0p59"; + }; + + vreg_pmu_wlcx_0p8: ldo2 { + regulator-name = "vreg_pmu_wlcx_0p8"; + }; + + vreg_pmu_wlmx_0p85: ldo3 { + regulator-name = "vreg_pmu_wlmx_0p85"; + }; + + vreg_pmu_btcmx_0p85: ldo4 { + regulator-name = "vreg_pmu_btcmx_0p85"; + }; + + vreg_pmu_rfa_0p8: ldo5 { + regulator-name = "vreg_pmu_rfa_0p8"; + }; + + vreg_pmu_rfa_1p2: ldo6 { + regulator-name = "vreg_pmu_rfa_1p2"; + }; + + vreg_pmu_rfa_1p7: ldo7 { + regulator-name = "vreg_pmu_rfa_1p7"; + }; + + vreg_pmu_pcie_0p9: ldo8 { + regulator-name = "vreg_pmu_pcie_0p9"; + }; + + vreg_pmu_pcie_1p8: ldo9 { + regulator-name = "vreg_pmu_pcie_1p8"; + }; + }; + };
Signature · 1 line
2.40.1
This is an automated email and please do not reply to this email.
Dear Submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.
----- Output -----
error: patch failed: arch/arm64/boot/dts/qcom/sm8650-qrd.dts:203
error: arch/arm64/boot/dts/qcom/sm8650-qrd.dts: patch does not apply
hint: Use 'git am --show-current-patch' to see the failed patch
Please resolve the issue and submit the patches again.
---
Regards,
Linux Bluetooth
Re: [PATCH v6 01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
In reply to Bartosz GolaszewskiQuoted 5 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=837880
---Test result---
Test Summary:
CheckPatch FAIL 17.35 seconds GitLint FAIL 5.29 seconds SubjectPrefix FAIL 2.20 seconds BuildKernel PASS 30.27 seconds CheckAllWarning PASS 32.81 seconds CheckSparse PASS 40.46 seconds CheckSmatch FAIL 35.39 seconds BuildKernel32 PASS 29.16 seconds TestRunnerSetup PASS 522.12 seconds TestRunner_l2cap-tester PASS 20.13 seconds TestRunner_iso-tester FAIL 32.73 seconds TestRunner_bnep-tester PASS 4.90 seconds TestRunner_mgmt-tester PASS 112.58 seconds TestRunner_rfcomm-tester PASS 7.33 seconds TestRunner_sco-tester PASS 14.93 seconds TestRunner_ioctl-tester PASS 7.77 seconds TestRunner_mesh-tester FAIL 6.00 seconds TestRunner_smp-tester PASS 6.87 seconds TestRunner_userchan-tester PASS 4.97 seconds IncrementalBuild PASS 95.81 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
[v6,01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #147:
new file mode 100644
total: 0 errors, 1 warnings, 151 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602138.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,05/16] dt-bindings: net: wireless: describe the ath12k PCI module
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #145:
new file mode 100644
total: 0 errors, 1 warnings, 100 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602142.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,06/16] arm64: dts: qcom: sm8550-qrd: add the Wifi node
WARNING: DT compatible string vendor "pci17cb" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml #225: FILE: arch/arm64/boot/dts/qcom/sm8550-qrd.dts:891:
+ compatible = "pci17cb,1107";
total: 0 errors, 1 warnings, 137 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602143.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,07/16] arm64: dts: qcom: sm8650-qrd: add the Wifi node
WARNING: DT compatible string vendor "pci17cb" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml #228: FILE: arch/arm64/boot/dts/qcom/sm8650-qrd.dts:915:
+ compatible = "pci17cb,1107";
total: 0 errors, 1 warnings, 123 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602145.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,08/16] arm64: dts: qcom: qrb5165-rb5: add the Wifi node
WARNING: DT compatible string vendor "pci17cb" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml #223: FILE: arch/arm64/boot/dts/qcom/qrb5165-rb5.dts:800:
+ compatible = "pci17cb,1101";
total: 0 errors, 1 warnings, 143 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602144.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,12/16] PCI/pwrctl: add PCI power control core code
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #186:
new file mode 100644
total: 0 errors, 1 warnings, 212 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602149.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,13/16] power: sequencing: implement the pwrseq core
WARNING: ENOSYS means 'invalid syscall nr' and nothing else #1328: FILE: include/linux/pwrseq/consumer.h:31:
+ return ERR_PTR(-ENOSYS);
WARNING: ENOSYS means 'invalid syscall nr' and nothing else #1338: FILE: include/linux/pwrseq/consumer.h:41:
+ return ERR_PTR(-ENOSYS);
WARNING: ENOSYS means 'invalid syscall nr' and nothing else #1343: FILE: include/linux/pwrseq/consumer.h:46:
+ return -ENOSYS;
WARNING: ENOSYS means 'invalid syscall nr' and nothing else #1348: FILE: include/linux/pwrseq/consumer.h:51:
+ return -ENOSYS;
total: 0 errors, 4 warnings, 1234 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602150.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,14/16] power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #183:
new file mode 100644
total: 0 errors, 1 warnings, 360 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602151.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
[v6,16/16] PCI/pwrctl: add a PCI power control driver for power sequenced devices
WARNING: please write a help paragraph that fully describes the config symbol #155: FILE: drivers/pci/pwrctl/Kconfig:8:
+config PCI_PWRCTL_PWRSEQ
+ tristate "PCI Power Control driver using the Power Sequencing subsystem"
+ select POWER_SEQUENCING
+ select PCI_PWRCTL
+ default m if (ATH11K_PCI && ARCH_QCOM)
+ help
+ Enable support for the PCI power control driver for device
+ drivers using the Power Sequencing subsystem.
+
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #176:
new file mode 100644
WARNING: DT compatible string vendor "pci17cb" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml #246: FILE: drivers/pci/pwrctl/pci-pwrctl-pwrseq.c:66:
+ .compatible = "pci17cb,1101",
WARNING: DT compatible string vendor "pci17cb" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml #251: FILE: drivers/pci/pwrctl/pci-pwrctl-pwrseq.c:71:
+ .compatible = "pci17cb,1107",
total: 0 errors, 4 warnings, 107 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/src/13602153.patch has style problems, please review.
NOTE: Ignored message types: UNKNOWN_COMMIT_ID
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
[v6,01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (81>80): "[v6,01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package"
13: B1 Line exceeds max length (85>80): " create mode 100644 Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml"
[v6,02/16] regulator: dt-bindings: describe the PMU module of the WCN7850 package
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (81>80): "[v6,02/16] regulator: dt-bindings: describe the PMU module of the WCN7850 package"
[v6,03/16] dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (81>80): "[v6,03/16] dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390"
[v6,04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (82>80): "[v6,04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390"
[v6,05/16] dt-bindings: net: wireless: describe the ath12k PCI module
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
12: B1 Line exceeds max length (83>80): " create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml"
[v6,11/16] PCI/pwrctl: create platform devices for child OF nodes of the port node
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (82>80): "[v6,11/16] PCI/pwrctl: create platform devices for child OF nodes of the port node"
[v6,14/16] power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (82>80): "[v6,14/16] power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets"
[v6,16/16] PCI/pwrctl: add a PCI power control driver for power sequenced devices
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (81>80): "[v6,16/16] PCI/pwrctl: add a PCI power control driver for power sequenced devices"
##############################
Test: SubjectPrefix - FAIL
Desc: Check subject contains "Bluetooth" prefix
Output:
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
"Bluetooth: " prefix is not specified in the subject
##############################
Test: CheckSmatch - FAIL
Desc: Run smatch tool with source
Output:
Segmentation fault (core dumped)
make[4]: *** [scripts/Makefile.build:244: net/bluetooth/hci_core.o] Error 139 make[4]: *** Deleting file 'net/bluetooth/hci_core.o'
make[3]: *** [scripts/Makefile.build:485: net/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:485: net] Error 2
make[2]: *** Waiting for unfinished jobs....
Segmentation fault (core dumped)
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/bcm203x.o] Error 139 make[4]: *** Deleting file 'drivers/bluetooth/bcm203x.o'
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[1]: *** [/github/workspace/src/src/Makefile:1919: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: TestRunner_iso-tester - FAIL
Desc: Run iso-tester with test-runner
Output:
Total: 117, Passed: 116 (99.1%), Failed: 1, Not Run: 0
Failed Test Cases
ISO Connect Suspend - Success Failed 4.185 seconds
##############################
Test: TestRunner_mesh-tester - FAIL
Desc: Run mesh-tester with test-runner Output:
Total: 10, Passed: 9 (90.0%), Failed: 1, Not Run: 0
Failed Test Cases
Mesh - Send cancel - 2 Failed 0.097 seconds
---
Regards,
Linux Bluetooth
Re: [PATCH v6 01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
In reply to Bartosz GolaszewskiQuoted 7 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
Signed-off-by Bartosz Golaszewski <[email protected]>
Can you start using b4?
This is a friendly reminder during the review process.
It looks like you received a tag and forgot to add it.
If you do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new versions, under or above your Signed-off-by tag. Tag is "received", when provided in a message replied to you on the mailing list. Tools like b4 can help here. However, there's no need to repost patches *only* to add the tags. The upstream maintainer will do that for tags received on the version they apply.
https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577
If a tag was not added on purpose, please state why and what changed.
Best regards,
Krzysztof
Re: [PATCH v6 01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
Quoted 24 lines · Krzysztof Kozlowski
Quoted 7 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
Signed-off-by Bartosz Golaszewski <[email protected]>Can you start using b4?
This is a friendly reminder during the review process.
It looks like you received a tag and forgot to add it.
If you do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new versions, under or above your Signed-off-by tag. Tag is "received", when provided in a message replied to you on the mailing list. Tools like b4 can help here. However, there's no need to repost patches *only* to add the tags. The upstream maintainer will do that for tags received on the version they apply.
Quoted 4 lines
https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577
If a tag was not added on purpose, please state why and what changed.
As per the first sentence of the cover letter: I dropped review tags from the patches that changed significantly while keeping them for those that didn't. If there's a way to let your automation know about this, please let me know/point me in the right direction because I don't know about it.
Bart
Re: [PATCH v6 01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
Quoted 28 lines · Bartosz Golaszewski
Quoted 26 lines · Krzysztof Kozlowski
Quoted 7 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
Signed-off-by Bartosz Golaszewski <[email protected]>Can you start using b4?
This is a friendly reminder during the review process.
It looks like you received a tag and forgot to add it.
If you do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new versions, under or above your Signed-off-by tag. Tag is "received", when provided in a message replied to you on the mailing list. Tools like b4 can help here. However, there's no need to repost patches *only* to add the tags. The upstream maintainer will do that for tags received on the version they apply.https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577
Quoted 9 lines
Quoted 2 lines
If a tag was not added on purpose, please state why and what changed.
As per the first sentence of the cover letter: I dropped review tags from the patches that changed significantly while keeping them for those that didn't. If there's a way to let your automation know about this, please let me know/point me in the right direction because I don't know about it.
I went through changelog and did not see any remarks that patch #1 changed. b4 diff tells me: not much changed. Same properties and you just do not require supplies on other variant.
This is rather minor change - just see by yourself.
Best regards,
Krzysztof
Re: [PATCH v6 01/16] regulator: dt-bindings: describe the PMU module of the QCA6390 package
In reply to Bartosz GolaszewskiQuoted 8 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The QCA6390 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. This document describes this module.
Signed-off-by Bartosz Golaszewski <[email protected]>---
Best regards,
Krzysztof
PATCH v6 2/16 regulator: dt-bindings: describe the PMU module of the WCN7850 package
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
The WCN7850 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. Extend the bindings for QCA6390 to also document this model.
--- .../bindings/regulator/qcom,qca6390-pmu.yaml | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml +35 -1
@@ -16,20 +16,37 @@ description: properties: compatible: - const: qcom,qca6390-pmu + enum: + - qcom,qca6390-pmu + - qcom,wcn7850-pmu + + vdd-supply: + description: VDD supply regulator handle vddaon-supply: description: VDD_AON supply regulator handle + vdddig-supply: + description: VDD_DIG supply regulator handle + vddpmu-supply: description: VDD_PMU supply regulator handle + vddio1p2-supply: + description: VDD_IO_1P2 supply regulator handle + vddrfa0p95-supply: description: VDD_RFA_0P95 supply regulator handle + vddrfa1p2-supply: + description: VDD_RFA_1P2 supply regulator handle + vddrfa1p3-supply: description: VDD_RFA_1P3 supply regulator handle + vddrfa1p8-supply: + description: VDD_RFA_1P8 supply regulator handle + vddrfa1p9-supply: description: VDD_RFA_1P9 supply regulator handle
@@ -50,6 +67,10 @@ properties: maxItems: 1 description: GPIO line enabling the ATH11K Bluetooth module supplied by the PMU + clocks: + maxItems: 1 + description: Reference clock handle + regulators: type: object description:
@@ -83,6 +104,19 @@ allOf: - vddpcie1p3-supply - vddpcie1p9-supply - vddio-supply + - if: + properties: + compatible: + contains: + const: qcom,wcn7850-pmu + then: + required: + - vdd-supply + - vddio-supply + - vddaon-supply + - vdddig-supply + - vddrfa1p2-supply + - vddrfa1p8-supply additionalProperties: false
Signature · 1 line
2.40.1
Re: [PATCH v6 02/16] regulator: dt-bindings: describe the PMU module of the WCN7850 package
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
The WCN7850 package contains discreet modules for WLAN and Bluetooth. They are powered by the Power Management Unit (PMU) that takes inputs from the host and provides LDO outputs. Extend the bindings for QCA6390 to also document this model.
Re: [PATCH v6 02/16] regulator: dt-bindings: describe the PMU module of the WCN7850 package
In reply to Bartosz GolaszewskiDocumentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml allOf: · line 119
Quoted 8 lines · Bartosz Golaszewski
Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml +8
-0+ then: + required: + - vdd-supply + - vddio-supply + - vddaon-supply + - vdddig-supply + - vddrfa1p2-supply + - vddrfa1p8-supply
I assume vddio1p2 is not required on purpose.
Best regards,
Krzysztof
Re: [PATCH v6 02/16] regulator: dt-bindings: describe the PMU module of the WCN7850 package
Quoted 11 lines · Krzysztof Kozlowski
Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml allOf: · line 119
Quoted 8 lines · Bartosz Golaszewski
Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yaml +8
-0+ then: + required: + - vdd-supply + - vddio-supply + - vddaon-supply + - vdddig-supply + - vddrfa1p2-supply + - vddrfa1p8-supply
Quoted 2 lines
I assume vddio1p2 is not required on purpose.
Correct.
Bart
Quoted 5 lines
Reviewed-by Krzysztof Kozlowski <[email protected]>Best regards,
Krzysztof
PATCH v6 3/16 dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
QCA6390 has a compatible listed in the bindings but is missing the regulators description. Add the missing supply property and list the required ones in the allOf section.
--- .../net/bluetooth/qualcomm-bluetooth.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
Documentation/devicetree/bindings/net/bluetooth/qualcomm-bluetooth.yaml +17 -0
@@ -62,6 +62,9 @@ properties: vdddig-supply: description: VDD_DIG supply regulator handle + vddbtcmx-supply: + description: VDD_BT_CMX supply regulator handle + vddbtcxmx-supply: description: VDD_BT_CXMX supply regulator handle
@@ -180,6 +183,20 @@ allOf: - vddrfa0p8-supply - vddrfa1p2-supply - vddrfa1p9-supply + - if: + properties: + compatible: + contains: + enum: + - qcom,qca6390-bt + then: + required: + - vddrfacmn-supply + - vddaon-supply + - vddbtcmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply examples: - |
Signature · 1 line
2.40.1
PATCH v6 4/16 dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
--- .../net/wireless/qcom,ath11k-pci.yaml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+)
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +46 -0
@@ -17,6 +17,7 @@ description: | properties: compatible: enum: + - pci17cb,1101 # QCA6390 - pci17cb,1103 # WCN6855 reg:
@@ -28,10 +29,55 @@ properties: string to uniquely identify variant of the calibration data for designs with colliding bus and device ids + vddrfacmn-supply: + description: VDD_RFA_CMN supply regulator handle + + vddaon-supply: + description: VDD_AON supply regulator handle + + vddwlcx-supply: + description: VDD_WL_CX supply regulator handle + + vddwlmx-supply: + description: VDD_WL_MX supply regulator handle + + vddrfa0p8-supply: + description: VDD_RFA_0P8 supply regulator handle + + vddrfa1p2-supply: + description: VDD_RFA_1P2 supply regulator handle + + vddrfa1p7-supply: + description: VDD_RFA_1P7 supply regulator handle + + vddpcie0p9-supply: + description: VDD_PCIE_0P9 supply regulator handle + + vddpcie1p8-supply: + description: VDD_PCIE_1P8 supply regulator handle + required: - compatible - reg +allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then: + required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supply + additionalProperties: false examples:
Signature · 1 line
2.40.1
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>
[...]
Quoted 7 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +7
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then:
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml properties: · line 79
Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +10
-0+ required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 30 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>[...]
Quoted 7 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +7
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then:Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml properties: · line 79
Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +10
-0+ required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
Quoted 4 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
Bart
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 32 lines · Bartosz Golaszewski
Quoted 30 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>[...]
Quoted 17 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +17
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then: + required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
Quoted 5 lines
Quoted 3 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
You can attach the device to any PCI slot, connect the WLAN antenna and it just works without DT nodes. I'm trying to make sure here that basic setup still works.
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 39 lines · Kalle Valo
Quoted 36 lines · Bartosz Golaszewski
Quoted 33 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>[...]
Quoted 7 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +7
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then:Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml properties: · line 79
Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +10
-0+ required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supplyI don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Quoted 6 lines
Quoted 1 line
Do they require a DT node though for some reason?
You can attach the device to any PCI slot, connect the WLAN antenna and it just works without DT nodes. I'm trying to make sure here that basic setup still works.
Sure, definitely. I there's no DT node, then the binding doesn't apply and the driver (the platform part of it) will not probe.
Quoted 5 lines
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
Good point. I will receive the X13s in a month from now. I do plan on upstreaming correct support for WLAN and BT for it as well.
I guess we can always relax the requirements once a valid use-case appears?
Bart
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 20 lines · Bartosz Golaszewski
Quoted 10 lines
Quoted 5 lines
Quoted 3 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
You can attach the device to any PCI slot, connect the WLAN antenna and it just works without DT nodes. I'm trying to make sure here that basic setup still works.
Sure, definitely. I there's no DT node, then the binding doesn't apply and the driver (the platform part of it) will not probe.
Quoted 5 lines
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
Quoted 4 lines
Good point. I will receive the X13s in a month from now. I do plan on upstreaming correct support for WLAN and BT for it as well.
I guess we can always relax the requirements once a valid use-case appears?
I think we have such cases already now:
$ git grep ath11k-calibration-variant -- arch arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts: qcom,ath11k-calibration-variant = "Fairphone_5"; arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts: qcom,ath11k-calibration-variant = "LE_X13S";
But please do check that. I'm no DT expert :)
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 28 lines · Kalle Valo
Quoted 20 lines · Bartosz Golaszewski
Quoted 10 lines
Quoted 5 lines
Quoted 3 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
You can attach the device to any PCI slot, connect the WLAN antenna and it just works without DT nodes. I'm trying to make sure here that basic setup still works.
Sure, definitely. I there's no DT node, then the binding doesn't apply and the driver (the platform part of it) will not probe.
Quoted 5 lines
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
Quoted 4 lines
Good point. I will receive the X13s in a month from now. I do plan on upstreaming correct support for WLAN and BT for it as well.
I guess we can always relax the requirements once a valid use-case appears?
Quoted 8 lines
I think we have such cases already now:
$ git grep ath11k-calibration-variant -- arch arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts: qcom,ath11k-calibration-variant = "Fairphone_5"; arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts: qcom,ath11k-calibration-variant = "LE_X13S";But please do check that. I'm no DT expert :)
You're thinking about making the required: field depend on the value of qcom,ath11k-calibration-variant? Am I getting this right?
Bart
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
Quoted 14 lines · Bartosz Golaszewski
Quoted 12 lines · Kalle Valo
Quoted 9 lines
Quoted 4 lines
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
Good point. I will receive the X13s in a month from now. I do plan on upstreaming correct support for WLAN and BT for it as well.
I guess we can always relax the requirements once a valid use-case appears?
I think we have such cases already now:
Quoted 8 lines
Quoted 5 lines
$ git grep ath11k-calibration-variant -- arch arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts: qcom,ath11k-calibration-variant = "Fairphone_5"; arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts: qcom,ath11k-calibration-variant = "LE_X13S";But please do check that. I'm no DT expert :)
You're thinking about making the required: field depend on the value of qcom,ath11k-calibration-variant? Am I getting this right?
No, I think Kalle is worried about requiring the supply properties for certain PCI device ids, in case we have existing or future devicetrees with those ids that did not specify them or that need not specify them (e.g. any PC modules).
Currently we only have the X13s controller in mainline being described by a PCIe endpoint node in DT, but it has a different id ("pci17cb,1103" instead of "pci17cb,1101" which you are adding here).
The Fairphone controller is apparently not a PCI device at all.
Johan
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
In reply to Kalle ValoQuoted 36 lines · Kalle Valo
Quoted 29 lines · Bartosz Golaszewski
Quoted 28 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>[...]
Quoted 17 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +17
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then: + required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supplyQuoted 5 lines
Quoted 3 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
Quoted 8 lines
You can attach the device to any PCI slot, connect the WLAN antenna and it just works without DT nodes. I'm trying to make sure here that basic setup still works.
Adding also Johan and ath11k list. For example, I don't know what's the plan with Lenovo X13s, will it use this framework? I guess in theory we could have devices which use qcom,ath11k-calibration-variant from DT but not any of these supply properties?
In theory we could, but at least the WCN6855 in the X13s has a similar set of supplies and enable gpios which are currently not fully described in the devicetree as there has been no support for doing so thus far. Instead we rely on the bootloader to enable the module.
I haven't had time to look at the latest attempt on adding support for handling such resources, but eventually we'll need to address this in some way.
Johan
Re: [PATCH v6 04/16] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390
In reply to Bartosz GolaszewskiQuoted 31 lines · Bartosz Golaszewski
Quoted 30 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add a PCI compatible for the ATH11K module on QCA6390 and describe the power inputs from the PMU that it consumes.
Signed-off-by Bartosz Golaszewski <[email protected]>[...]
Quoted 17 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml +17
-0+allOf: + - if: + properties: + compatible: + contains: + const: pci17cb,1101 + then: + required: + - vddrfacmn-supply + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p7-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
Quoted 6 lines
Quoted 4 lines
I don't know DT well enough to know what the "required:" above means, but does this take into account that there are normal "plug&play" type of QCA6390 boards as well which don't need any DT settings?
Do they require a DT node though for some reason?
I would not expect the "PC" flavor of the card to require DT. The "mobile" and "automotive" flavors would probably require it.
PATCH v6 5/16 dt-bindings: net: wireless: describe the ath12k PCI module
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add device-tree bindings for the ATH12K module found in the WCN7850 package.
--- .../bindings/net/wireless/qcom,ath12k.yaml | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +100 -0
@@ -0,0 +1,100 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2024 Linaro Limited +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/wireless/qcom,ath12k.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies ath12k wireless devices (PCIe) + +maintainers: + - Bartosz Golaszewski <[email protected]> + - Jeff Johnson <[email protected]> + - Kalle Valo <[email protected]> + +description: + Qualcomm Technologies IEEE 802.11ax PCIe devices. + +properties: + compatible: + enum: + - pci17cb,1107 # WCN7850 + + reg: + maxItems: 1 + + vddaon-supply: + description: VDD_AON supply regulator handle + + vddwlcx-supply: + description: VDD_WLCX supply regulator handle + + vddwlmx-supply: + description: VDD_WLMX supply regulator handle + + vddrfacmn-supply: + description: VDD_RFA_CMN supply regulator handle + + vddrfa0p8-supply: + description: VDD_RFA_0P8 supply regulator handle + + vddrfa1p2-supply: + description: VDD_RFA_1P2 supply regulator handle + + vddrfa1p8-supply: + description: VDD_RFA_1P8 supply regulator handle + + vddpcie0p9-supply: + description: VDD_PCIE_0P9 supply regulator handle + + vddpcie1p8-supply: + description: VDD_PCIE_1P8 supply regulator handle + +required: + - compatible + - reg + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfacmn-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p8-supply + - vddpcie0p9-supply + - vddpcie1p8-supply + +additionalProperties: false + +examples: + - | + #include <dt-bindings/clock/qcom,rpmh.h> + #include <dt-bindings/gpio/gpio.h> + pcie { + #address-cells = <3>; + #size-cells = <2>; + + pcie@0 { + device_type = "pci"; + reg = <0x0 0x0 0x0 0x0 0x0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + bus-range = <0x01 0xff>; + + wifi@0 { + compatible = "pci17cb,1107"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; + vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; + vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + }; + }; + };
Signature · 1 line
2.40.1
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 18 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add device-tree bindings for the ATH12K module found in the WCN7850 package.
Signed-off-by Bartosz Golaszewski <[email protected]>--- .../bindings/net/wireless/qcom,ath12k.yaml | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yamlDocumentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +1
-0@@ -0,0 +1,100 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +10
-0+# Copyright (c) 2024 Linaro Limited +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/wireless/qcom,ath12k.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies ath12k wireless devices (PCIe) + +maintainers: + - Bartosz Golaszewski <[email protected]>
IMHO it would be better to have just driver maintainers listed here.
Quoted 43 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +43
-0+ - Jeff Johnson <[email protected]> + - Kalle Valo <[email protected]> + +description: + Qualcomm Technologies IEEE 802.11ax PCIe devices. + +properties: + compatible: + enum: + - pci17cb,1107 # WCN7850 + + reg: + maxItems: 1 + + vddaon-supply: + description: VDD_AON supply regulator handle + + vddwlcx-supply: + description: VDD_WLCX supply regulator handle + + vddwlmx-supply: + description: VDD_WLMX supply regulator handle + + vddrfacmn-supply: + description: VDD_RFA_CMN supply regulator handle + + vddrfa0p8-supply: + description: VDD_RFA_0P8 supply regulator handle + + vddrfa1p2-supply: + description: VDD_RFA_1P2 supply regulator handle + + vddrfa1p8-supply: + description: VDD_RFA_1P8 supply regulator handle + + vddpcie0p9-supply: + description: VDD_PCIE_0P9 supply regulator handle + + vddpcie1p8-supply: + description: VDD_PCIE_1P8 supply regulator handle + +required: + - compatible
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 64
Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +10
-0+ - reg + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfacmn-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p8-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
Same comment here as in patch 4. There are also ath12k PCI devices which don't need DT at all. I don't know if that should be reflected in the bindings doc but I want to point out this.
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 11 lines · Kalle Valo
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 5 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +3
-0+ +maintainers: + - Bartosz Golaszewski <[email protected]>IMHO it would be better to have just driver maintainers listed here.
Why? What's wrong with having the author of the bindings in the Cc list?
Quoted 13 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 64
Quoted 12 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +12
-0+required: + - compatible + - reg + - vddaon-supply + - vddwlcx-supply + - vddwlmx-supply + - vddrfacmn-supply + - vddrfa0p8-supply + - vddrfa1p2-supply + - vddrfa1p8-supply + - vddpcie0p9-supply + - vddpcie1p8-supply
Quoted 4 lines
Same comment here as in patch 4. There are also ath12k PCI devices which don't need DT at all. I don't know if that should be reflected in the bindings doc but I want to point out this.
But DT bindings don't apply to devices that don't have DT nodes. This isn't an issue at all.
Bart
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 6 lines · Bartosz Golaszewski
Quoted 5 lines · Kalle Valo
Quoted 2 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Quoted 8 lines
Quoted 6 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 3 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +3
-0+ +maintainers: + - Bartosz Golaszewski <[email protected]>IMHO it would be better to have just driver maintainers listed here.
Why? What's wrong with having the author of the bindings in the Cc list?
If you want follow the ath12k development and review patches then you can join the ath12k list. I'm not fond of having too many maintainers, it's not really helping anything and just extra work to periodically cleanup the silent maintainers.
I would ask the opposite question: why add you as the maintainer? There's not even a single ath12k patch from you, nor I haven't seen you doing any patch review or otherwise helping others related to ath12k. Don't get me wrong, I value the work you do with this important powerseq feature and hopefully we get it into the tree soon. But I don't see adding you as a maintainer at this point.
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 22 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
Quoted 5 lines · Kalle Valo
Quoted 2 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Quoted 8 lines
Quoted 6 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 3 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +3
-0+ +maintainers: + - Bartosz Golaszewski <[email protected]>IMHO it would be better to have just driver maintainers listed here.
Why? What's wrong with having the author of the bindings in the Cc list?
If you want follow the ath12k development and review patches then you can join the ath12k list. I'm not fond of having too many maintainers, it's not really helping anything and just extra work to periodically cleanup the silent maintainers.
Quoted 6 lines
I would ask the opposite question: why add you as the maintainer? There's not even a single ath12k patch from you, nor I haven't seen you doing any patch review or otherwise helping others related to ath12k. Don't get me wrong, I value the work you do with this important powerseq feature and hopefully we get it into the tree soon. But I don't see adding you as a maintainer at this point.
This is not a maintainer of driver. This is maintainer of bindings, so someone who has hardware, datasheets, knowledge and/or interest in keeping the bindings accurate.
All your arguments above suggest you talk about the driver. This is not the point here.
Best regards,
Krzysztof
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 30 lines · Krzysztof Kozlowski
Quoted 22 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
Quoted 5 lines · Kalle Valo
Quoted 2 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Quoted 8 lines
Quoted 6 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 3 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +3
-0+ +maintainers: + - Bartosz Golaszewski <[email protected]>IMHO it would be better to have just driver maintainers listed here.
Why? What's wrong with having the author of the bindings in the Cc list?
If you want follow the ath12k development and review patches then you can join the ath12k list. I'm not fond of having too many maintainers, it's not really helping anything and just extra work to periodically cleanup the silent maintainers.
Quoted 6 lines
I would ask the opposite question: why add you as the maintainer? There's not even a single ath12k patch from you, nor I haven't seen you doing any patch review or otherwise helping others related to ath12k. Don't get me wrong, I value the work you do with this important powerseq feature and hopefully we get it into the tree soon. But I don't see adding you as a maintainer at this point.
Quoted 7 lines
This is not a maintainer of driver. This is maintainer of bindings, so someone who has hardware, datasheets, knowledge and/or interest in keeping the bindings accurate.
All your arguments above suggest you talk about the driver. This is not the point here.
And to clarify: I do not have opinion whether Bartosz is a suitable person here and whether driver maintainers should be instead or not. I only want to clarify the purpose of the binding maintainer.
Best regards,
Krzysztof
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
In reply to Kalle ValoQuoted 23 lines · Kalle Valo
Quoted 6 lines · Bartosz Golaszewski
Quoted 5 lines · Kalle Valo
Quoted 2 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Quoted 8 lines
Quoted 6 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml line 11
Quoted 3 lines
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml new file +3
-0+ +maintainers: + - Bartosz Golaszewski <[email protected]>IMHO it would be better to have just driver maintainers listed here.
Why? What's wrong with having the author of the bindings in the Cc list?
If you want follow the ath12k development and review patches then you can join the ath12k list. I'm not fond of having too many maintainers, it's not really helping anything and just extra work to periodically cleanup the silent maintainers.
Quoted 7 lines
I would ask the opposite question: why add you as the maintainer? There's not even a single ath12k patch from you, nor I haven't seen you doing any patch review or otherwise helping others related to ath12k. Don't get me wrong, I value the work you do with this important powerseq feature and hopefully we get it into the tree soon. But I don't see adding you as a maintainer at this point.
In addition to what Krzysztof already said about you seamingly confusing the maintenance of the driver vs maintenance of the device-tree bindings (IOW: structured hardware description) and in response to your question: I don't see any functional change to any dt-bindings neither from you nor from Jeff. Are you convinced you can maintain and properly review any changes?
If so, I don't really care, I can drop myself and have less work.
Bartosz
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
Quoted 6 lines · Bartosz Golaszewski
In addition to what Krzysztof already said about you seamingly confusing the maintenance of the driver vs maintenance of the device-tree bindings (IOW: structured hardware description) and in response to your question: I don't see any functional change to any dt-bindings neither from you nor from Jeff. Are you convinced you can maintain and properly review any changes?
Speaking just for myself, I know Bartosz is far more capable in this regard than I am, so I'd expect him to be listed as a maintainer before me.
/jeff
Re: [PATCH v6 05/16] dt-bindings: net: wireless: describe the ath12k PCI module
In reply to Bartosz GolaszewskiQuoted 11 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Add device-tree bindings for the ATH12K module found in the WCN7850 package.
Signed-off-by Bartosz Golaszewski <[email protected]>--- .../bindings/net/wireless/qcom,ath12k.yaml | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yaml
Best regards,
Krzysztof
PATCH v6 6/16 arm64: dts: qcom: sm8550-qrd: add the Wifi node
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Describe the ath12k WLAN on-board the WCN7850 module present on the board.
--- arch/arm64/boot/dts/qcom/sm8550-qrd.dts | 97 +++++++++++++++++++++++++ arch/arm64/boot/dts/qcom/sm8550.dtsi | 10 +++ 2 files changed, 107 insertions(+)
arch/arm64/boot/dts/qcom/sm8550-qrd.dts +97 -0
@@ -214,6 +214,68 @@ vph_pwr: vph-pwr-regulator { regulator-always-on; regulator-boot-on; }; + + wcn7850-pmu { + compatible = "qcom,wcn7850-pmu"; + + pinctrl-names = "default"; + pinctrl-0 = <&wlan_en>, <&pmk8550_sleep_clk>; + + wlan-enable-gpios = <&tlmm 80 GPIO_ACTIVE_HIGH>; + /* + * TODO Add bt-enable-gpios once the Bluetooth driver is + * converted to using the power sequencer. + */ + + vdd-supply = <&vreg_s5g_0p85>; + vddio-supply = <&vreg_l15b_1p8>; + vddaon-supply = <&vreg_s2g_0p85>; + vdddig-supply = <&vreg_s4e_0p95>; + vddrfa1p2-supply = <&vreg_s4g_1p25>; + vddrfa1p8-supply = <&vreg_s6g_1p86>; + + regulators { + vreg_pmu_rfa_cmn: ldo0 { + regulator-name = "vreg_pmu_rfa_cmn"; + }; + + vreg_pmu_aon_0p59: ldo1 { + regulator-name = "vreg_pmu_aon_0p59"; + }; + + vreg_pmu_wlcx_0p8: ldo2 { + regulator-name = "vreg_pmu_wlcx_0p8"; + }; + + vreg_pmu_wlmx_0p85: ldo3 { + regulator-name = "vreg_pmu_wlmx_0p85"; + }; + + vreg_pmu_btcmx_0p85: ldo4 { + regulator-name = "vreg_pmu_btcmx_0p85"; + }; + + vreg_pmu_rfa_0p8: ldo5 { + regulator-name = "vreg_pmu_rfa_0p8"; + }; + + vreg_pmu_rfa_1p2: ldo6 { + regulator-name = "vreg_pmu_rfa_1p2"; + }; + + vreg_pmu_rfa_1p8: ldo7 { + regulator-name = "vreg_pmu_rfa_1p8"; + }; + + vreg_pmu_pcie_0p9: ldo8 { + regulator-name = "vreg_pmu_pcie_0p9"; + }; + + vreg_pmu_pcie_1p8: ldo9 { + regulator-name = "vreg_pmu_pcie_1p8"; + }; + }; + }; }; &apps_rsc {
@@ -824,6 +886,23 @@ &pcie0 { status = "okay"; }; +&pcieport0 { + wifi@0 { + compatible = "pci17cb,1107"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; + vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; + vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + }; +}; + &pcie0_phy { vdda-phy-supply = <&vreg_l1e_0p88>; vdda-pll-supply = <&vreg_l3e_1p2>;
@@ -911,6 +990,17 @@ &pcie_1_phy_aux_clk { clock-frequency = <1000>; }; +&pmk8550_gpios { + pmk8550_sleep_clk: sleep-clk-state { + pins = "gpio3"; + function = "func1"; + input-disable; + output-enable; + bias-disable; + power-source = <0>; + }; +}; + &qupv3_id_0 { status = "okay"; };
@@ -1084,6 +1174,13 @@ wcd_default: wcd-reset-n-active-state { bias-disable; output-low; }; + + wlan_en: wlan-en-state { + pins = "gpio80"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; }; &uart7 {
arch/arm64/boot/dts/qcom/sm8550.dtsi +10 -0
@@ -1770,6 +1770,16 @@ pcie0: pcie@1c00000 { phy-names = "pciephy"; status = "disabled"; + + pcieport0: pcie@0 { + device_type = "pci"; + reg = <0x0 0x0 0x0 0x0 0x0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + bus-range = <0x01 0xff>; + }; }; pcie0_phy: phy@1c06000 {
Signature · 1 line
2.40.1
PATCH v6 7/16 arm64: dts: qcom: sm8650-qrd: add the Wifi node
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Describe the ath12k WLAN on-board the WCN7850 module present on the board.
--- arch/arm64/boot/dts/qcom/sm8650-qrd.dts | 89 +++++++++++++++++++++++++ arch/arm64/boot/dts/qcom/sm8650.dtsi | 10 +++ 2 files changed, 99 insertions(+)
arch/arm64/boot/dts/qcom/sm8650-qrd.dts +89 -0
@@ -203,6 +203,71 @@ wcd_codec_headset_in: endpoint { }; }; }; + + wcn7850-pmu { + compatible = "qcom,wcn7850-pmu"; + + pinctrl-names = "default"; + pinctrl-0 = <&wlan_en>; + + wlan-enable-gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>; + /* + * TODO Add bt-enable-gpios once the Bluetooth driver is + * converted to using the power sequencer. + */ + + vdd-supply = <&vreg_s4i_0p85>; + vddio-supply = <&vreg_l15b_1p8>; + vddio1p2-supply = <&vreg_l3c_1p2>; + vddaon-supply = <&vreg_s2c_0p8>; + vdddig-supply = <&vreg_s3c_0p9>; + vddrfa1p2-supply = <&vreg_s1c_1p2>; + vddrfa1p8-supply = <&vreg_s6c_1p8>; + + clocks = <&rpmhcc RPMH_RF_CLK1>; + + regulators { + vreg_pmu_rfa_cmn: ldo0 { + regulator-name = "vreg_pmu_rfa_cmn"; + }; + + vreg_pmu_aon_0p59: ldo1 { + regulator-name = "vreg_pmu_aon_0p59"; + }; + + vreg_pmu_wlcx_0p8: ldo2 { + regulator-name = "vreg_pmu_wlcx_0p8"; + }; + + vreg_pmu_wlmx_0p85: ldo3 { + regulator-name = "vreg_pmu_wlmx_0p85"; + }; + + vreg_pmu_btcmx_0p85: ldo4 { + regulator-name = "vreg_pmu_btcmx_0p85"; + }; + + vreg_pmu_rfa_0p8: ldo5 { + regulator-name = "vreg_pmu_rfa_0p8"; + }; + + vreg_pmu_rfa_1p2: ldo6 { + regulator-name = "vreg_pmu_rfa_1p2"; + }; + + vreg_pmu_rfa_1p8: ldo7 { + regulator-name = "vreg_pmu_rfa_1p8"; + }; + + vreg_pmu_pcie_0p9: ldo8 { + regulator-name = "vreg_pmu_pcie_0p9"; + }; + + vreg_pmu_pcie_1p8: ldo9 { + regulator-name = "vreg_pmu_pcie_1p8"; + }; + }; + }; }; &apps_rsc {
@@ -845,6 +910,23 @@ &pcie0 { status = "okay"; }; +&pcieport0 { + wifi@0 { + compatible = "pci17cb,1107"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; + vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; + vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + }; +}; + &pcie0_phy { vdda-phy-supply = <&vreg_l1i_0p88>; vdda-pll-supply = <&vreg_l3i_1p2>;
@@ -1139,6 +1221,13 @@ wcd_default: wcd-reset-n-active-state { bias-disable; output-low; }; + + wlan_en: wlan-en-state { + pins = "gpio16"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; }; &uart14 {
arch/arm64/boot/dts/qcom/sm8650.dtsi +10 -0
@@ -2293,6 +2293,16 @@ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, dma-coherent; status = "disabled"; + + pcieport0: pcie@0 { + device_type = "pci"; + reg = <0x0 0x0 0x0 0x0 0x0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + bus-range = <0x01 0xff>; + }; }; pcie0_phy: phy@1c06000 {
Signature · 1 line
2.40.1
PATCH v6 8/16 arm64: dts: qcom: qrb5165-rb5: add the Wifi node
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add a node for the PMU module of the QCA6391 present on the RB5 board. Assign its LDO power outputs to the existing Bluetooth module. Add a node for the PCIe port to sm8250.dtsi and define the WLAN node on it in the board's .dts and also make it consume the power outputs of the PMU.
--- arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 103 ++++++++++++++++++++--- arch/arm64/boot/dts/qcom/sm8250.dtsi | 10 +++ 2 files changed, 102 insertions(+), 11 deletions(-)
arch/arm64/boot/dts/qcom/qrb5165-rb5.dts +92 -11
@@ -108,6 +108,67 @@ lt9611_3v3: lt9611-3v3 { regulator-always-on; }; + qca6390-pmu { + compatible = "qcom,qca6390-pmu"; + + pinctrl-names = "default"; + pinctrl-0 = <&bt_en_state>, <&wlan_en_state>; + + vddaon-supply = <&vreg_s6a_0p95>; + vddpmu-supply = <&vreg_s2f_0p95>; + vddrfa0p95-supply = <&vreg_s2f_0p95>; + vddrfa1p3-supply = <&vreg_s8c_1p3>; + vddrfa1p9-supply = <&vreg_s5a_1p9>; + vddpcie1p3-supply = <&vreg_s8c_1p3>; + vddpcie1p9-supply = <&vreg_s5a_1p9>; + vddio-supply = <&vreg_s4a_1p8>; + + wlan-enable-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; + bt-enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; + + regulators { + vreg_pmu_rfa_cmn: ldo0 { + regulator-name = "vreg_pmu_rfa_cmn"; + }; + + vreg_pmu_aon_0p59: ldo1 { + regulator-name = "vreg_pmu_aon_0p59"; + }; + + vreg_pmu_wlcx_0p8: ldo2 { + regulator-name = "vreg_pmu_wlcx_0p8"; + }; + + vreg_pmu_wlmx_0p85: ldo3 { + regulator-name = "vreg_pmu_wlmx_0p85"; + }; + + vreg_pmu_btcmx_0p85: ldo4 { + regulator-name = "vreg_pmu_btcmx_0p85"; + }; + + vreg_pmu_rfa_0p8: ldo5 { + regulator-name = "vreg_pmu_rfa_0p8"; + }; + + vreg_pmu_rfa_1p2: ldo6 { + regulator-name = "vreg_pmu_rfa_1p2"; + }; + + vreg_pmu_rfa_1p7: ldo7 { + regulator-name = "vreg_pmu_rfa_1p7"; + }; + + vreg_pmu_pcie_0p9: ldo8 { + regulator-name = "vreg_pmu_pcie_0p9"; + }; + + vreg_pmu_pcie_1p8: ldo9 { + regulator-name = "vreg_pmu_pcie_1p8"; + }; + }; + }; + thermal-zones { conn-thermal { polling-delay-passive = <0>;
@@ -734,6 +795,23 @@ &pcie0_phy { vdda-pll-supply = <&vreg_l9a_1p2>; }; +&pcieport0 { + wifi@0 { + compatible = "pci17cb,1101"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p7-supply = <&vreg_pmu_rfa_1p7>; + vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; + vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + }; +}; + &pcie1 { status = "okay"; };
@@ -1303,6 +1381,14 @@ sdc2_card_det_n: sd-card-det-n-state { function = "gpio"; bias-pull-up; }; + + wlan_en_state: wlan-default-state { + pins = "gpio20"; + function = "gpio"; + drive-strength = <16>; + output-low; + bias-pull-up; + }; }; &uart6 {
@@ -1311,17 +1397,12 @@ &uart6 { bluetooth { compatible = "qcom,qca6390-bt"; - pinctrl-names = "default"; - pinctrl-0 = <&bt_en_state>; - - enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; - - vddio-supply = <&vreg_s4a_1p8>; - vddpmu-supply = <&vreg_s2f_0p95>; - vddaon-supply = <&vreg_s6a_0p95>; - vddrfa0p9-supply = <&vreg_s2f_0p95>; - vddrfa1p3-supply = <&vreg_s8c_1p3>; - vddrfa1p9-supply = <&vreg_s5a_1p9>; + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddbtcmx-supply = <&vreg_pmu_btcmx_0p85>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p7-supply = <&vreg_pmu_rfa_1p7>; }; };
arch/arm64/boot/dts/qcom/sm8250.dtsi +10 -0
@@ -2203,6 +2203,16 @@ pcie0: pcie@1c00000 { dma-coherent; status = "disabled"; + + pcieport0: pcie@0 { + device_type = "pci"; + reg = <0x0 0x0 0x0 0x0 0x0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + bus-range = <0x01 0xff>; + }; }; pcie0_phy: phy@1c06000 {
Signature · 1 line
2.40.1
PATCH v6 9/16 PCI: hold the rescan mutex when scanning for the first time
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
With the introduction of PCI device power control drivers that will be able to trigger the port rescan when probing, we need to hold the rescan mutex during the initial pci_host_probe() too or the two could get in each other's way.
--- drivers/pci/probe.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pci/probe.c +2 -0
@@ -3066,7 +3066,9 @@ int pci_host_probe(struct pci_host_bridge *bridge)struct pci_bus *bus, *child;int ret; +pci_lock_rescan_remove (); ret =pci_scan_root_bus_bridge (bridge); +pci_unlock_rescan_remove ();if (ret <0 ) {dev_err (bridge->dev.parent,"Scanning root bridge failed" );return ret;
Signature · 1 line
2.40.1
PATCH v6 10/16 PCI/pwrctl: reuse the OF node for power controlled devices
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
With PCI power control we deal with two struct device objects bound to two different drivers but consuming the same OF node. We must not bind the pinctrl twice. To that end: before setting the OF node of the newly instantiated PCI device, check if a platform device consuming the same OF node doesn't already exist on the platform bus and - if so - mark the PCI device as reusing the OF node.
--- drivers/pci/of.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/pci/of.c +10 -4
@@ -6,6 +6,7 @@*/ #define pr_fmt (fmt) "PCI: OF: " fmt +#include <linux/cleanup.h> #include <linux/irqdomain.h> #include <linux/kernel.h> #include <linux/pci.h>
@@ -13,6 +14,7 @@#include <linux/of_irq.h> #include <linux/of_address.h> #include <linux/of_pci.h> +#include <linux/platform_device.h> #include "pci.h" #ifdef CONFIG_PCI
@@ -25,16 +27,20 @@*/ int pci_set_of_node (struct pci_dev *dev) { -struct device_node *node; -if (!dev->bus->dev.of_node)return 0 ; - node =of_pci_find_child_device (dev->bus->dev.of_node, dev->devfn); + struct device_node *node __free(device_node) = +of_pci_find_child_device (dev->bus->dev.of_node, dev->devfn);if (!node)return 0 ; -device_set_node (&dev->dev,of_fwnode_handle (node)); + struct device *pdev __free(put_device) = +bus_find_device_by_of_node (&platform_bus_type, node); +if (pdev) + dev->bus->dev.of_node_reused = true; + +device_set_node (&dev->dev,of_fwnode_handle (no_free_ptr (node)));return 0 ; }
Signature · 1 line
2.40.1
PATCH v6 11/16 PCI/pwrctl: create platform devices for child OF nodes of the port node
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
In preparation for introducing PCI device power control - a set of library functions that will allow powering-up of PCI devices before they're detected on the PCI bus - we need to populate the devices defined on the device-tree.
We are reusing the platform bus as it provides us with all the infrastructure we need to match the pwrctl drivers against the compatibles from OF nodes.
These platform devices will be probed by the driver core and bound to the PCI pwrctl drivers we'll introduce later.
--- drivers/pci/bus.c | 9 ++++++++- drivers/pci/remove.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-)
drivers/pci/bus.c +8 -1
@@ -12,6 +12,7 @@#include <linux/errno.h> #include <linux/ioport.h> #include <linux/of.h> +#include <linux/of_platform.h> #include <linux/proc_fs.h> #include <linux/slab.h>
@@ -342,8 +343,14 @@ void pci_bus_add_device(struct pci_dev *dev)*/ pcibios_bus_add_device (dev);pci_fixup_device (pci_fixup_final, dev); -if (pci_is_bridge (dev)) +if (pci_is_bridge (dev)) {of_pci_make_dev_node (dev); + retval =of_platform_populate (dev->dev.of_node,NULL ,NULL , + &dev->dev); +if (retval) +pci_err (dev,"failed to populate child OF nodes (%d)\n" , + retval); + }pci_create_sysfs_dev_files (dev);pci_proc_attach_device (dev);pci_bridge_d3_update (dev);
drivers/pci/remove.c +2 -0
@@ -1,6 +1,7 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/pci.h> #include <linux/module.h> +#include <linux/of_platform.h> #include "pci.h" static void pci_free_resources (struct pci_dev *dev)
@@ -22,6 +23,7 @@ static void pci_stop_dev(struct pci_dev *dev)device_release_driver (&dev->dev);pci_proc_detach_device (dev);pci_remove_sysfs_dev_files (dev); +of_platform_depopulate (&dev->dev);of_pci_remove_node (dev);pci_dev_assign_added (dev, false);
Signature · 1 line
2.40.1
PATCH v6 12/16 PCI/pwrctl: add PCI power control core code
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Some PCI devices must be powered-on before they can be detected on the bus. Introduce a simple framework reusing the existing PCI OF infrastructure.
The way this works is: a DT node representing a PCI device connected to the port can be matched against its power control platform driver. If the match succeeds, the driver is responsible for powering-up the device and calling pcie_pwrctl_device_set_ready() which will trigger a PCI bus rescan as well as subscribe to PCI bus notifications.
When the device is detected and created, we'll make it consume the same DT node that the platform device did. When the device is bound, we'll create a device link between it and the parent power control device.
--- drivers/pci/Kconfig | 1 + drivers/pci/Makefile | 1 + drivers/pci/pwrctl/Kconfig | 8 +++ drivers/pci/pwrctl/Makefile | 4 ++ drivers/pci/pwrctl/core.c | 136 ++++++++++++++++++++++++++++++++++++ include/linux/pci-pwrctl.h | 51 ++++++++++++++ 6 files changed, 201 insertions(+) create mode 100644 drivers/pci/pwrctl/Kconfig create mode 100644 drivers/pci/pwrctl/Makefile create mode 100644 drivers/pci/pwrctl/core.c create mode 100644 include/linux/pci-pwrctl.h
drivers/pci/Kconfig +1 -0
@@ -296,5 +296,6 @@ source "drivers/pci/hotplug/Kconfig" source "drivers/pci/controller/Kconfig" source "drivers/pci/endpoint/Kconfig" source "drivers/pci/switch/Kconfig" +source "drivers/pci/pwrctl/Kconfig" endif
drivers/pci/Makefile +1 -0
@@ -9,6 +9,7 @@ obj-$(CONFIG_PCI) += access.o bus.o probe.o host-bridge.o \ obj-$(CONFIG_PCI) += msi/ obj-$(CONFIG_PCI) += pcie/ +obj-$(CONFIG_PCI) += pwrctl/ ifdef CONFIG_PCI obj-$(CONFIG_PROC_FS) += proc.o
drivers/pci/pwrctl/Kconfig new file +8 -0
@@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0-only + +menu "PCI Power control drivers" + +config PCI_PWRCTL + tristate + +endmenu
drivers/pci/pwrctl/Makefile new file +4 -0
@@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-only + +obj-$(CONFIG_PCI_PWRCTL) += pci-pwrctl-core.o +pci-pwrctl-core-y := core.o
drivers/pci/pwrctl/core.c new file +136 -0
136 lines not on this page · raw message
include/linux/pci-pwrctl.h new file +51 -0
51 lines not on this page · raw message
Signature · 1 line
2.40.1
Simon Horman
reviewerRe: [PATCH v6 12/16] PCI/pwrctl: add PCI power control core code
Quoted 12 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Some PCI devices must be powered-on before they can be detected on the bus. Introduce a simple framework reusing the existing PCI OF infrastructure.
The way this works is: a DT node representing a PCI device connected to the port can be matched against its power control platform driver. If the match succeeds, the driver is responsible for powering-up the device and calling
pcie_pwrctl_device_set_ready()which will trigger a PCI bus rescan as well as subscribe to PCI bus notifications.
Quoted 5 lines
When the device is detected and created, we'll make it consume the same DT node that the platform device did. When the device is bound, we'll create a device link between it and the parent power control device.
Signed-off-by Bartosz Golaszewski <[email protected]>
Hi Bartosz,
some minor Kernel doc nits from my side.
...
Quoted 1 line
drivers/pci/pwrctl/core.c +0
-0
...
Quoted 4 lines
+/**
+ *devm_pci_pwrctl_device_set_ready- Managed variant of
+ *pci_pwrctl_device_set_ready().
+ *
nit: @dev should be documented here
Quoted 51 lines
+ * @pwrctl: PCI power control data
+ *
+ * Returns:
+ * 0 on success, negative error number on error.
+ */drivers/pci/pwrctl/core.c +18
-0+int devm_pci_pwrctl_device_set_ready (struct device *dev, +struct pci_pwrctl *pwrctl) +{ +int ret; + + ret =pci_pwrctl_device_set_ready (pwrctl); +if (ret) +return ret; + +return devm_add_action_or_reset (dev, + devm_pci_pwrctl_device_unset_ready, + pwrctl); +} +EXPORT_SYMBOL_GPL (devm_pci_pwrctl_device_set_ready); + +MODULE_AUTHOR ("Bartosz Golaszewski <[email protected]>" ); +MODULE_DESCRIPTION ("PCI Device Power Control core driver" ); +MODULE_LICENSE ("GPL" );include/linux/pci-pwrctl.h new file +22
-0@@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* +* Copyright (C) 2024 Linaro Ltd. +*/ + +#ifndef __PCI_PWRCTL_H__ +#define __PCI_PWRCTL_H__ + +#include <linux/notifier.h> + +struct device ; +struct device_link ; + +/* +* This is a simple framework for solving the issue of PCI devices that require +* certain resources (regulators, GPIOs, clocks) to be enabled before the +* device can actually be detected on the PCI bus. +* +* The idea is to reuse the platform bus to populate OF nodes describing the +* PCI device and its resources, let these platform devices probe and enable +* relevant resources and then trigger a rescan of the PCI bus allowing for the +* same device (with a second associated struct device) to be registered with
include/linux/pci-pwrctl.h line 32
Quoted 10 lines
include/linux/pci-pwrctl.h new file +10
-0+* the PCI subsystem. +* +* To preserve a correct hierarchy for PCI power management and device reset, +* we create a device link between the power control platform device (parent) +* and the supplied PCI device (child). +*/ + +/** +* struct pci_pwrctl - PCI device power control context. +* @dev - Address of the power controlling device.
nit: I think this should be "@dev: " rather than "@dev - "
As is, "./scripts/kernel-doc -none" complains.
include/linux/pci-pwrctl.h line 41
Quoted 9 lines
include/linux/pci-pwrctl.h new file +9
-0+* +* An object of this type must be allocated by the PCI power control device and +* passed to the pwrctl subsystem to trigger a bus rescan and setup a device +* link with the device once it's up. +*/ +struct pci_pwrctl { +struct device *dev; + +/* Private, don't use. */
I think Private needs to be followed by a ':' rather than a ',' to keep kernel-doc happy.
Quoted 14 lines
include/linux/pci-pwrctl.h new file +10
-0+struct notifier_block nb; + struct device_link *link; +}; + +int pci_pwrctl_device_set_ready (struct pci_pwrctl *pwrctl); +void pci_pwrctl_device_unset_ready (struct pci_pwrctl *pwrctl); +int devm_pci_pwrctl_device_set_ready (struct device *dev, +struct pci_pwrctl *pwrctl); + +#endif /* __PCI_PWRCTL_H__ */ Signature · 1 line
2.40.1
PATCH v6 13/16 power: sequencing: implement the pwrseq core
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Implement the power sequencing subsystem allowing devices to share complex powering-up and down procedures. It's split into the consumer and provider parts but does not implement any new DT bindings so that the actual power sequencing is never revealed in the DT representation.
--- MAINTAINERS | 8 + drivers/power/Kconfig | 1 + drivers/power/Makefile | 1 + drivers/power/sequencing/Kconfig | 12 + drivers/power/sequencing/Makefile | 4 + drivers/power/sequencing/core.c | 1065 +++++++++++++++++++++++++++++ include/linux/pwrseq/consumer.h | 56 ++ include/linux/pwrseq/provider.h | 75 ++ 8 files changed, 1222 insertions(+) create mode 100644 drivers/power/sequencing/Kconfig create mode 100644 drivers/power/sequencing/Makefile create mode 100644 drivers/power/sequencing/core.c create mode 100644 include/linux/pwrseq/consumer.h create mode 100644 include/linux/pwrseq/provider.h
MAINTAINERS +8 -0
@@ -17631,6 +17631,14 @@ F: include/linux/pm_* F: include/linux/powercap.h F: kernel/configs/nopm.config +POWER SEQUENCING +M: Bartosz Golaszewski <[email protected]> +L: [email protected] +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git +F: drivers/power/sequencing/ +F: include/linux/pwrseq/ + POWER STATE COORDINATION INTERFACE (PSCI) M: Mark Rutland <[email protected]> M: Lorenzo Pieralisi <[email protected]>
drivers/power/Kconfig +1 -0
@@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only source "drivers/power/reset/Kconfig" +source "drivers/power/sequencing/Kconfig" source "drivers/power/supply/Kconfig"
drivers/power/Makefile +1 -0
@@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_POWER_RESET) += reset/ +obj-$(CONFIG_POWER_SEQUENCING) += sequencing/ obj-$(CONFIG_POWER_SUPPLY) += supply/
drivers/power/sequencing/Kconfig new file +12 -0
@@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0-only + +menuconfig POWER_SEQUENCING + tristate "Power Sequencing support" + help + Say Y here to enable the Power Sequencing subsystem. + + This subsystem is designed to control power to devices that share + complex resources and/or require specific power sequences to be run + during power-up. + + If unsure, say no.
drivers/power/sequencing/Makefile new file +4 -0
@@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-$(CONFIG_POWER_SEQUENCING) += pwrseq-core.o +pwrseq-core-y := core.o
drivers/power/sequencing/core.c new file +1065 -0
1,065 lines not on this page · raw message
include/linux/pwrseq/consumer.h new file +56 -0
56 lines not on this page · raw message
include/linux/pwrseq/provider.h new file +75 -0
75 lines not on this page · raw message
Signature · 1 line
2.40.1
PATCH v6 14/16 power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
This adds the power sequencing driver for the PMU modules present on the Qualcomm WCN Bluetooth and Wifi chipsets. It uses the pwrseq subsystem and knows how to match the sequencer to the consumer device by verifying the relevant properties and DT layout.
--- drivers/power/sequencing/Kconfig | 16 + drivers/power/sequencing/Makefile | 2 + drivers/power/sequencing/pwrseq-qcom-wcn.c | 336 +++++++++++++++++++++ 3 files changed, 354 insertions(+) create mode 100644 drivers/power/sequencing/pwrseq-qcom-wcn.c
drivers/power/sequencing/Kconfig +16 -0
@@ -10,3 +10,19 @@ menuconfig POWER_SEQUENCING during power-up. If unsure, say no. + +if POWER_SEQUENCING + +config POWER_SEQUENCING_QCOM_WCN + tristate "Qualcomm WCN family PMU driver" + default m if ARCH_QCOM + help + Say U here to enable the power sequencing driver for Qualcomm + WCN Bluetooth/WLAN chipsets. + + Typically, a package from the Qualcomm WCN family contains the BT + and WLAN modules whose power is controlled by the PMU module. As the + former two share the power-up sequence which is executed by the PMU, + this driver is needed for correct power control. + +endif
drivers/power/sequencing/Makefile +2 -0
@@ -2,3 +2,5 @@ obj-$(CONFIG_POWER_SEQUENCING) += pwrseq-core.o pwrseq-core-y := core.o + +obj-$(CONFIG_POWER_SEQUENCING_QCOM_WCN) += pwrseq-qcom-wcn.o
drivers/power/sequencing/pwrseq-qcom-wcn.c new file +336 -0
336 lines not on this page · raw message
Signature · 1 line
2.40.1
PATCH v6 15/16 Bluetooth: qca: use the power sequencer for QCA6390
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Use the pwrseq subsystem's consumer API to run the power-up sequence for the Bluetooth module of the QCA6390 package.
--- drivers/bluetooth/hci_qca.c | 74 +++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 15 deletions(-)
drivers/bluetooth/hci_qca.c +59 -15
@@ -29,6 +29,7 @@#include <linux/of.h> #include <linux/acpi.h> #include <linux/platform_device.h> +#include <linux/pwrseq/consumer.h> #include <linux/regulator/consumer.h> #include <linux/serdev.h> #include <linux/mutex.h>
@@ -215,6 +216,7 @@ struct qca_power {struct regulator_bulk_data *vreg_bulk;int num_vregs;bool vregs_on; +struct pwrseq_desc *pwrseq; };struct qca_serdev {
@@ -1682,6 +1684,27 @@ static bool qca_wakeup(struct hci_dev *hdev)return wakeup; } +static int qca_port_reopen (struct hci_uart *hu) +{ +int ret; + +/* Now the device is in ready state to communicate with host. +* To sync host with device we need to reopen port. +* Without this, we will have RTS and CTS synchronization +* issues. +*/ +serdev_device_close (hu->serdev); + ret =serdev_device_open (hu->serdev); +if (ret) { +bt_dev_err (hu->hdev,"failed to open port" ); +return ret; + } + +hci_uart_set_flow_control (hu, false); + +return 0 ; +} +static int qca_regulator_init (struct hci_uart *hu) {enum qca_btsoc_type soc_type =qca_soc_type (hu);
@@ -1750,21 +1773,7 @@ static int qca_regulator_init(struct hci_uart *hu)break ; } -/* Now the device is in ready state to communicate with host. -* To sync host with device we need to reopen port. -* Without this, we will have RTS and CTS synchronization -* issues. -*/ -serdev_device_close (hu->serdev); - ret =serdev_device_open (hu->serdev); -if (ret) { -bt_dev_err (hu->hdev,"failed to open port" ); -return ret; - } - -hci_uart_set_flow_control (hu, false); - -return 0 ; +return qca_port_reopen (hu); }static int qca_power_on (struct hci_dev *hdev)
@@ -1792,6 +1801,17 @@ static int qca_power_on(struct hci_dev *hdev) ret =qca_regulator_init (hu);break ; +case QCA_QCA6390 : + qcadev =serdev_device_get_drvdata (hu->serdev); + ret =pwrseq_power_on (qcadev->bt_power->pwrseq); +if (ret) +return ret; + + ret =qca_port_reopen (hu); +if (ret) +return ret; +break ; +default : qcadev =serdev_device_get_drvdata (hu->serdev);if (qcadev->bt_en) {
@@ -2170,6 +2190,10 @@ static void qca_power_shutdown(struct hci_uart *hu) }break ; +case QCA_QCA6390 : +pwrseq_power_off (qcadev->bt_power->pwrseq); +break ; +default :gpiod_set_value_cansleep (qcadev->bt_en,0 ); }
@@ -2308,12 +2332,25 @@ static int qca_serdev_probe(struct serdev_device *serdev)case QCA_WCN6750 :case QCA_WCN6855 :case QCA_WCN7850 : +case QCA_QCA6390 : qcadev->bt_power =devm_kzalloc (&serdev->dev,sizeof (struct qca_power ),GFP_KERNEL );if (!qcadev->bt_power)return -ENOMEM ; +break ; +default : +break ; + } +switch (qcadev->btsoc_type) { +case QCA_WCN3988 : +case QCA_WCN3990 : +case QCA_WCN3991 : +case QCA_WCN3998 : +case QCA_WCN6750 : +case QCA_WCN6855 : +case QCA_WCN7850 : qcadev->bt_power->dev = &serdev->dev; err =qca_init_regulators (qcadev->bt_power, data->vregs, data->num_vregs);
@@ -2354,6 +2391,13 @@ static int qca_serdev_probe(struct serdev_device *serdev) }break ; +case QCA_QCA6390 : + qcadev->bt_power->pwrseq =devm_pwrseq_get (&serdev->dev, +"bluetooth" ); +if (IS_ERR (qcadev->bt_power->pwrseq)) +return PTR_ERR (qcadev->bt_power->pwrseq); + fallthrough; +default : qcadev->bt_en =devm_gpiod_get_optional (&serdev->dev,"enable" ,GPIOD_OUT_LOW );
Signature · 1 line
2.40.1
PATCH v6 16/16 PCI/pwrctl: add a PCI power control driver for power sequenced devices
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add a PCI power control driver that's capable of correctly powering up devices using the power sequencing subsystem. The first user of this driver is the ath11k module on QCA6390.
--- drivers/pci/pwrctl/Kconfig | 9 +++ drivers/pci/pwrctl/Makefile | 2 + drivers/pci/pwrctl/pci-pwrctl-pwrseq.c | 89 ++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
drivers/pci/pwrctl/Kconfig +9 -0
@@ -5,4 +5,13 @@ menu "PCI Power control drivers" config PCI_PWRCTL tristate +config PCI_PWRCTL_PWRSEQ + tristate "PCI Power Control driver using the Power Sequencing subsystem" + select POWER_SEQUENCING + select PCI_PWRCTL + default m if (ATH11K_PCI && ARCH_QCOM) + help + Enable support for the PCI power control driver for device + drivers using the Power Sequencing subsystem. + endmenu
drivers/pci/pwrctl/Makefile +2 -0
@@ -2,3 +2,5 @@ obj-$(CONFIG_PCI_PWRCTL) += pci-pwrctl-core.o pci-pwrctl-core-y := core.o + +obj-$(CONFIG_PCI_PWRCTL_PWRSEQ) += pci-pwrctl-pwrseq.o
drivers/pci/pwrctl/pci-pwrctl-pwrseq.c new file +89 -0
89 lines not on this page · raw message
Signature · 1 line
2.40.1
Quoted 276 lines · Bartosz Golaszewski
From: Bartosz Golaszewski<[email protected]>
Note: I dropped most of the the review and test tags on purpose, the code changed significantly and warrants a new round of reviews and tests.
===
Problem statement #1: Dynamic bus chicken-and-egg problem.
Certain on-board PCI devices need to be powered up before they are can be detected but their PCI drivers won't get bound until the device is powered-up so enabling the relevant resources in the PCI device driver itself is impossible.
Problem statement #2: Sharing inter-dependent resources between devices.
Certain devices that use separate drivers (often on different busses) share resources (regulators, clocks, etc.). Typically these resources are reference-counted but in some cases there are additional interactions between them to consider, for example specific power-up sequence timings.
===
The reason for tackling both of these problems in a single series is the fact the the platform I'm working on - Qualcomm RB5 - deals with both and both need to be addressed in order to enable WLAN and Bluetooth support upstream.
The on-board WLAN/BT package - QCA6391 - has a Power Management Unit that takes inputs from the host and exposes LDO outputs consumed by the BT and WLAN modules which can be powered-up and down independently. However a delay of 100ms must be respected between enabling the BT- and WLAN-enable GPIOs.
A similar design with a discreet PMU is also employed in other models of the WCN family of chips although we can often do without the delays. With this series we add support for the WCN7850 as well.
===
We introduce a new subsystem here - the power sequencing framework. The qcom-wcn driver that we add is its first user. It implements the power-up sequences for QCA6390 and WCN7850 chips. However - we only use it to power-up the bluetooth module in the former. We use it to driver the WLAN modules in both. The reason for this is that for WCN7850 we have comprehensive bindings already upstream together with existing DT users. Porting them to using the pwrseq subsystem can be done separately and in an incremental manner once the subsystem itself is upstream. We will also have to ensure backward DT compatibility. To avoid overcomplicating this series, let's leave it out for now.
===
This series is logically split into several sections. I'll go patch-by-patch and explain each step.
Patches 1/16-5/16:
These contain all relevant DT bindings changes. We add new documents for the QCA6390 & WCN7850 PMUs and ATH12K devices as well as extend the bindings for the Qualcomm Bluetooth and ATH11K modules with regulators used by them in QCA6390.
Patches 6/16-8/16:
These contain changes to device-tree sources for the three platforms we work with in this series. We model the PMUs of the WLAN/BT chips as top-level platform devices on the device tree. In order to limit the scope of this series and not introduce an excessive amount of confusion with deprecating DT bindings, we leave the Bluetooth nodes on sm8650 and sm8550 as is (meaning: they continue to consumer the GPIOs and power inputs from the host). As the WCN7850 module doesn't require any specific timings, we can incrementally change that later.
In both cases we add WLAN nodes that consume the power outputs of the PMU. For QCA6390 we also make the Bluetooth node of the RB5 consume the outputs of the PMU - we can do it as the bindings for this chip did not define any supply handles prior to this series meaning we are able to get this correct right away.
Patches 9/16-12/16:
These contain the bulk of the PCI changes for this series. We introduce a simple framework for powering up PCI devices before detecting them on the bus.
The general approach is as follows: PCI devices that need special treatment before they can be powered up, scanned and bound to their PCI drivers must be described on the device-tree as child nodes of the PCI port node. These devices will be instantiated on the platform bus. They will in fact be generic platform devices with the compatible of the form used for PCI devices already upstream ("pci<vendor ID>,<device ID">). We add a new directory under
drivers/pci/pwrctl/that contains PCI pwrctl drivers. These drivers are platform drivers that will now be matched against the devices instantiated from port children just like any other platform pairs.Both the power control platform device *AND* the associated PCI device reuse the same OF node and have access to the same properties. The goal of the platform driver is to request and bring up any required resources and let the pwrctl framework know that it's now OK to rescan the bus and detect the devices. When the device is bound, we are notified about it by the PCI bus notifier event and can establish a device link between the power control device and the PCI device so that any future extension for power-management will already be able to work with the correct hierachy.
The reusing of the OF node is the reason for the small changes to the PCI OF core: as the bootloader can possibly leave the relevant regulators on before booting linux, the PCI device can be detected before its platform abstraction is probed. In this case, we find that device first and mark its OF node as reused. The pwrctl framework handles the opposite case (when the PCI device is detected only after the platform driver successfully enabled it).
Patch 13/16 - 14/16:
These add a relatively simple power sequencing subsystem and the first driver using it: the pwrseq module for the PMUs on the WCN family of chips.
I'm proposing to add a subsystem that allows different devices to use a shared power sequence split into consumer-specific as well as common "units".
A power sequence provider driver registers a set of units with pwrseq core. Each unit can be enabled and disabled and contains an optional list of other units which must be enabled before it itself can be. A unit represents a discreet chunk of the power sequence.
It also registers a list of targets: a target is an abstraction wrapping a unit which allows consumers to tell pwrseq which unit they want to reach. Real-life example is the driver we're adding here: there's a set of common regulators, two PCIe-specific ones and two enable GPIOs: one for Bluetooth and one for WLAN.
The Bluetooth driver requests a descriptor to the power sequencer and names the target it wants to reach:
pwrseq = devm_pwrseq_get(dev, "bluetooth");The pwrseq core then knows that when the driver calls:
pwrseq_power_on(pwrseq);It must enable the "bluetooth-enable" unit but it depends on the "regulators-common" unit so this one is enabled first. The provider driver is also in charge of assuring an appropriate delay between enabling the BT and WLAN enable GPIOs. The WLAN-specific resources are handled by the "wlan-enable" unit and so are not enabled until the WLAN driver requests the "wlan" target to be powered on.
Another thing worth discussing is the way we associate the consumer with the relevant power sequencer. DT maintainers have expressed a discontent with the existing mmc pwrseq bindings and have NAKed an earlier initiative to introduce global pwrseq bindings to the kernel[1].
In this approach, we model the existing regulators and GPIOs in DT but the pwrseq subsystem requires each provider to provide a .match() callback. Whenever a consumer requests a power sequencer handle, we iterate over the list of pwrseq drivers and call .match() for each. It's up to the driver to verify in a platform-specific way whether it deals with its consumer and let the core pwrseq code know.
The advantage of this over reusing the regulator or reset subsystem is that it's more generalized and can handle resources of all kinds as well as deal with any kind of power-on sequences: for instance, Qualcomm has a PCI switch they want a driver for but this switch requires enabling some resources first (PCI pwrctl) and then configuring the device over I2C (which can be handled by the pwrseq provider).
Patch 15:
This patch makes the Qualcomm Bluetooth driver get and use the power sequencer for QCA6390.
Patch 16:
While tiny, this patch is possibly the highlight of the entire series. It uses the two abstraction layers we introduced before to create an elegant power sequencing PCI power control driver and supports the ath11k module on QCA6390 and ath12k on WCN7850.
With this series we can now enable BT and WLAN on several new Qualcomm boards upstream.
Tested on RB5, sm8650-qrd and sm8550-qrd.
Changelog:
Since v5:
- unify the approach to modelling the WCN WLAN/BT chips by always exposing the PMU node on the device tree and making the WLAN and BT nodes become consumers of its power outputs; this includes a major rework of the DT sources, bindings and driver code; there's no more a separate PCI pwrctl driver for WCN7850, instead its power-up sequence was moved into the pwrseq driver common for all WCN chips
- don't setload_uAfrom new regulator consumers
- fix reported kerneldoc issues
- drop voltage ranges for PMU outputs from DT
- many minor tweaks and reworksv1: Original RFC:
https://lore.kernel.org/lkml/[email protected]/T/
v2: First real patch series (should have been PATCH v2) adding what I
referred to back then as PCI power sequencing:https://lore.kernel.org/linux-arm-kernel/2024021413-grumbling-unlivable-c145@gregkh/T/
v3: RFC for the DT representation of the PMU supplying the WLAN and BT
modules inside the QCA6391 package (was largely separate from the series but probably should have been called PATCH or RFC v3):https://lore.kernel.org/all/CAMRc=Mc+GNoi57eTQg71DXkQKjdaoAmCpB=h2ndEpGnmdhVV-Q@mail.gmail.com/T/
v4: Second attempt at the full series with changed scope (introduction of
the pwrseq subsystem, should have been RFC v4)https://lore.kernel.org/lkml/[email protected]/T/
v5: Two different ways of handling QCA6390 and WCN7850:
https://lore.kernel.org/lkml/[email protected]/
Bartosz Golaszewski (16):
regulator: dt-bindings: describe the PMU module of the QCA6390 package
regulator: dt-bindings: describe the PMU module of the WCN7850 package
dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390
dt-bindings: net: wireless: qcom,ath11k: describe the ath11k onQCA6390dt-bindings: net: wireless: describe the ath12k PCI module
arm64: dts: qcom: sm8550-qrd: add the Wifi node
arm64: dts: qcom: sm8650-qrd: add the Wifi node
arm64: dts: qcom: qrb5165-rb5: add the Wifi node
PCI: hold the rescan mutex when scanning for the first time PCI/pwrctl: reuse the OF node for power controlled devices PCI/pwrctl: create platform devices for child OF nodes of the port
node
PCI/pwrctl: add PCI power control core code
power: sequencing: implement the pwrseq core
power: pwrseq: add a driver for the PMU module on the QCom WCN
chipsets
Bluetooth: qca: use the power sequencer for QCA6390 PCI/pwrctl: add a PCI power control driver for power sequenced devices.../net/bluetooth/qualcomm-bluetooth.yaml | 17 + .../net/wireless/qcom,ath11k-pci.yaml | 46 + .../bindings/net/wireless/qcom,ath12k.yaml | 100 ++ .../bindings/regulator/qcom,qca6390-pmu.yaml | 185 +++ MAINTAINERS | 8 + arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 103 +- arch/arm64/boot/dts/qcom/sm8250.dtsi | 10 + arch/arm64/boot/dts/qcom/sm8550-qrd.dts | 97 ++ arch/arm64/boot/dts/qcom/sm8550.dtsi | 10 + arch/arm64/boot/dts/qcom/sm8650-qrd.dts | 89 ++ arch/arm64/boot/dts/qcom/sm8650.dtsi | 10 + drivers/bluetooth/hci_qca.c | 74 +- drivers/pci/Kconfig | 1 + drivers/pci/Makefile | 1 + drivers/pci/bus.c | 9 +- drivers/pci/of.c | 14 +- drivers/pci/probe.c | 2 + drivers/pci/pwrctl/Kconfig | 17 + drivers/pci/pwrctl/Makefile | 6 + drivers/pci/pwrctl/core.c | 136 +++ drivers/pci/pwrctl/pci-pwrctl-pwrseq.c | 89 ++ drivers/pci/remove.c | 2 + drivers/power/Kconfig | 1 + drivers/power/Makefile | 1 + drivers/power/sequencing/Kconfig | 28 + drivers/power/sequencing/Makefile | 6 + drivers/power/sequencing/core.c | 1065 +++++++++++++++++ drivers/power/sequencing/pwrseq-qcom-wcn.c | 336 ++++++ include/linux/pci-pwrctl.h | 51 + include/linux/pwrseq/consumer.h | 56 + include/linux/pwrseq/provider.h | 75 ++ 31 files changed, 2614 insertions(+), 31 deletions(-)
Quoted 13 lines
create mode 100644
Documentation/devicetree/bindings/net/wireless/qcom,ath12k.yamlcreate mode 100644Documentation/devicetree/bindings/regulator/qcom,qca6390-pmu.yamlcreate mode 100644drivers/pci/pwrctl/Kconfig
create mode 100644drivers/pci/pwrctl/Makefile
create mode 100644drivers/pci/pwrctl/core.c
create mode 100644drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
create mode 100644drivers/power/sequencing/Kconfig
create mode 100644drivers/power/sequencing/Makefile
create mode 100644drivers/power/sequencing/core.c
create mode 100644drivers/power/sequencing/pwrseq-qcom-wcn.c
create mode 100644include/linux/pci-pwrctl.h
create mode 100644include/linux/pwrseq/consumer.h
create mode 100644include/linux/pwrseq/provider.h
I tested the patchset on SM8550 and it does give me working WiFi. However I seethe following warnings during boot.
[ 5.973011] mhi mhi0: Requested to power ON [ 6.597591] mhi mhi0: Power on setup success [ 6.597631] sysfs: cannot create duplicate filename '/devices/platform/soc@0/1c00000.pcie/pci0000:00/0000:00:00.0/resource0' [ 6.597634] CPU: 7 PID: 154 Comm: kworker/u32:5 Tainted: G S 6.9.0-rc1-next-20240328-g955237c9980c #1 [ 6.597635] Hardware name: AYN Odin 2 (DT) [ 6.597637] Workqueue: async async_run_entry_fn [ 6.597645] Call trace: [ 6.597646] dump_backtrace+0xa0/0x128 [ 6.597649] show_stack+0x20/0x38 [ 6.597650] dump_stack_lvl+0x74/0x90 [ 6.597653] dump_stack+0x18/0x28 [ 6.597654] sysfs_warn_dup+0x6c/0x90 [ 6.597658] sysfs_add_bin_file_mode_ns+0xdc/0x100 [ 6.597660] sysfs_create_bin_file+0x7c/0xb8 [ 6.597662] pci_create_attr+0xb4/0x1a8 [ 6.597665] pci_create_resource_files+0x64/0xd0 [ 6.597667] pci_create_sysfs_dev_files+0x24/0x40 [ 6.597669] pci_bus_add_device+0x54/0x138 [ 6.597670] pci_bus_add_devices+0x40/0x98 [ 6.597672] pci_host_probe+0x70/0xf0 [ 6.597673] dw_pcie_host_init+0x248/0x658 [ 6.597676] qcom_pcie_probe+0x234/0x330 [ 6.597677] platform_probe+0x70/0xd8 [ 6.597680] really_probe+0xc8/0x3a0 [ 6.597681] __driver_probe_device+0x84/0x170 [ 6.597682] driver_probe_device+0x44/0x120 [ 6.597683] __device_attach_driver+0xc4/0x168 [ 6.597684] bus_for_each_drv+0x8c/0xf0 [ 6.597686] __device_attach_async_helper+0xb4/0x118 [ 6.597687] async_run_entry_fn+0x40/0x178 [ 6.597689] process_one_work+0x16c/0x410 [ 6.597691] worker_thread+0x284/0x3a0 [ 6.597693] kthread+0x118/0x128 [ 6.597693] ret_from_fork+0x10/0x20 [ 6.597698] ------------[ cut here ]------------ [ 6.597698] proc_dir_entry '0000:00/00.0' already registered [ 6.597710] WARNING: CPU: 7 PID: 154 at fs/proc/generic.c:375 proc_register+0x138/0x1d0 [ 6.597713] Modules linked in: [ 6.597714] CPU: 7 PID: 154 Comm: kworker/u32:5 Tainted: G S 6.9.0-rc1-next-20240328-g955237c9980c #1 [ 6.597715] Hardware name: AYN Odin 2 (DT) [ 6.597716] Workqueue: async async_run_entry_fn [ 6.597718] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 6.597719] pc : proc_register+0x138/0x1d0 [ 6.597721] lr : proc_register+0x138/0x1d0 [ 6.597723] sp : ffff800081e3b9a0 [ 6.597723] x29: ffff800081e3b9a0 x28: 0000000000000000 x27: ffffddb2a28eabe0 [ 6.597725] x26: ffff3425c9ada5c0 x25: ffffddb2a2d4eef0 x24: ffff3425c9ada540 [ 6.597726] x23: 0000000000000004 x22: ffff3425c7b1822c x21: 0000000000000004 [ 6.597727] x20: ffff3425c7b18180 x19: ffff3425c9adaec8 x18: ffffffffffffffff [ 6.597729] x17: 3040636f732f6d72 x16: 6f6674616c702f73 x15: ffff800081e3b910 [ 6.597730] x14: 0000000000000000 x13: 0a64657265747369 x12: 6765722079646165 [ 6.597731] x11: fffffffffff00000 x10: ffffddb2a27c4fb0 x9 : ffffddb29f5d7528 [ 6.597733] x8 : 00000000ffff7fff x7 : ffffddb2a27c4fb0 x6 : 80000000ffff8000 [ 6.597734] x5 : 0000000000000358 x4 : 0000000000000000 x3 : 00000000ffffffff [ 6.597736] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff3425c5ce0000 [ 6.597737] Call trace: [ 6.597737] proc_register+0x138/0x1d0 [ 6.597739] proc_create_data+0x48/0x78 [ 6.597741] pci_proc_attach_device+0x84/0x118 [ 6.597743] pci_bus_add_device+0x5c/0x138 [ 6.597744] pci_bus_add_devices+0x40/0x98 [ 6.597745] pci_host_probe+0x70/0xf0 [ 6.597746] dw_pcie_host_init+0x248/0x658 [ 6.597748] qcom_pcie_probe+0x234/0x330 [ 6.597749] platform_probe+0x70/0xd8 [ 6.597750] really_probe+0xc8/0x3a0 [ 6.597751] __driver_probe_device+0x84/0x170 [ 6.597752] driver_probe_device+0x44/0x120 [ 6.597753] __device_attach_driver+0xc4/0x168 [ 6.597754] bus_for_each_drv+0x8c/0xf0 [ 6.597756] __device_attach_async_helper+0xb4/0x118 [ 6.597757] async_run_entry_fn+0x40/0x178 [ 6.597759] process_one_work+0x16c/0x410 [ 6.597760] worker_thread+0x284/0x3a0 [ 6.597761] kthread+0x118/0x128 [ 6.597762] ret_from_fork+0x10/0x20 [ 6.597763] ---[ end trace 0000000000000000 ]---
This probably only occurs when the relevant drivers on compiled as built-in. Similar behavior has been noticed before as well:
https://lore.kernel.org/lkml/[email protected]/T/#mdeeca9bc8e19458787d53738298abcfff443068a
Thanks,
Xilin
Quoted 82 lines · Xilin Wu
I tested the patchset on SM8550 and it does give me working WiFi. However I seethe following warnings during boot.
[ 5.973011] mhi mhi0: Requested to power ON [ 6.597591] mhi mhi0: Power on setup success [ 6.597631] sysfs: cannot create duplicate filename '/devices/platform/soc@0/1c00000.pcie/pci0000:00/0000:00:00.0/resource0' [ 6.597634] CPU: 7 PID: 154 Comm: kworker/u32:5 Tainted: G S 6.9.0-rc1-next-20240328-g955237c9980c #1 [ 6.597635] Hardware name: AYN Odin 2 (DT) [ 6.597637] Workqueue: async async_run_entry_fn [ 6.597645] Call trace: [ 6.597646] dump_backtrace+0xa0/0x128 [ 6.597649] show_stack+0x20/0x38 [ 6.597650] dump_stack_lvl+0x74/0x90 [ 6.597653] dump_stack+0x18/0x28 [ 6.597654] sysfs_warn_dup+0x6c/0x90 [ 6.597658] sysfs_add_bin_file_mode_ns+0xdc/0x100 [ 6.597660] sysfs_create_bin_file+0x7c/0xb8 [ 6.597662] pci_create_attr+0xb4/0x1a8 [ 6.597665] pci_create_resource_files+0x64/0xd0 [ 6.597667] pci_create_sysfs_dev_files+0x24/0x40 [ 6.597669] pci_bus_add_device+0x54/0x138 [ 6.597670] pci_bus_add_devices+0x40/0x98 [ 6.597672] pci_host_probe+0x70/0xf0 [ 6.597673] dw_pcie_host_init+0x248/0x658 [ 6.597676] qcom_pcie_probe+0x234/0x330 [ 6.597677] platform_probe+0x70/0xd8 [ 6.597680] really_probe+0xc8/0x3a0 [ 6.597681] __driver_probe_device+0x84/0x170 [ 6.597682] driver_probe_device+0x44/0x120 [ 6.597683] __device_attach_driver+0xc4/0x168 [ 6.597684] bus_for_each_drv+0x8c/0xf0 [ 6.597686] __device_attach_async_helper+0xb4/0x118 [ 6.597687] async_run_entry_fn+0x40/0x178 [ 6.597689] process_one_work+0x16c/0x410 [ 6.597691] worker_thread+0x284/0x3a0 [ 6.597693] kthread+0x118/0x128 [ 6.597693] ret_from_fork+0x10/0x20 [ 6.597698] ------------[ cut here ]------------ [ 6.597698] proc_dir_entry '0000:00/00.0' already registered [ 6.597710] WARNING: CPU: 7 PID: 154 at fs/proc/generic.c:375 proc_register+0x138/0x1d0 [ 6.597713] Modules linked in: [ 6.597714] CPU: 7 PID: 154 Comm: kworker/u32:5 Tainted: G S 6.9.0-rc1-next-20240328-g955237c9980c #1 [ 6.597715] Hardware name: AYN Odin 2 (DT) [ 6.597716] Workqueue: async async_run_entry_fn [ 6.597718] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 6.597719] pc : proc_register+0x138/0x1d0 [ 6.597721] lr : proc_register+0x138/0x1d0 [ 6.597723] sp : ffff800081e3b9a0 [ 6.597723] x29: ffff800081e3b9a0 x28: 0000000000000000 x27: ffffddb2a28eabe0 [ 6.597725] x26: ffff3425c9ada5c0 x25: ffffddb2a2d4eef0 x24: ffff3425c9ada540 [ 6.597726] x23: 0000000000000004 x22: ffff3425c7b1822c x21: 0000000000000004 [ 6.597727] x20: ffff3425c7b18180 x19: ffff3425c9adaec8 x18: ffffffffffffffff [ 6.597729] x17: 3040636f732f6d72 x16: 6f6674616c702f73 x15: ffff800081e3b910 [ 6.597730] x14: 0000000000000000 x13: 0a64657265747369 x12: 6765722079646165 [ 6.597731] x11: fffffffffff00000 x10: ffffddb2a27c4fb0 x9 : ffffddb29f5d7528 [ 6.597733] x8 : 00000000ffff7fff x7 : ffffddb2a27c4fb0 x6 : 80000000ffff8000 [ 6.597734] x5 : 0000000000000358 x4 : 0000000000000000 x3 : 00000000ffffffff [ 6.597736] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff3425c5ce0000 [ 6.597737] Call trace: [ 6.597737] proc_register+0x138/0x1d0 [ 6.597739] proc_create_data+0x48/0x78 [ 6.597741] pci_proc_attach_device+0x84/0x118 [ 6.597743] pci_bus_add_device+0x5c/0x138 [ 6.597744] pci_bus_add_devices+0x40/0x98 [ 6.597745] pci_host_probe+0x70/0xf0 [ 6.597746] dw_pcie_host_init+0x248/0x658 [ 6.597748] qcom_pcie_probe+0x234/0x330 [ 6.597749] platform_probe+0x70/0xd8 [ 6.597750] really_probe+0xc8/0x3a0 [ 6.597751] __driver_probe_device+0x84/0x170 [ 6.597752] driver_probe_device+0x44/0x120 [ 6.597753] __device_attach_driver+0xc4/0x168 [ 6.597754] bus_for_each_drv+0x8c/0xf0 [ 6.597756] __device_attach_async_helper+0xb4/0x118 [ 6.597757] async_run_entry_fn+0x40/0x178 [ 6.597759] process_one_work+0x16c/0x410 [ 6.597760] worker_thread+0x284/0x3a0 [ 6.597761] kthread+0x118/0x128 [ 6.597762] ret_from_fork+0x10/0x20 [ 6.597763] ---[ end trace 0000000000000000 ]---
Quoted 8 lines
This probably only occurs when the relevant drivers on compiled as built-in. Similar behavior has been noticed before as well:
https://lore.kernel.org/lkml/[email protected]/T/#mdeeca9bc8e19458787d53738298abcfff443068a
Thanks,
Xilin
Thanks for the report. The reason for this was populating the platform devices before the bridge device was fully added. In case of loadable modules this meant the pwrctl probe would be deferred long enough for that to complete so I didn't see it but with pwrctl built-in this would trigger the problem. I fixed it locally and will resend with that addressed.
Bart