From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Marcel Holtmann <marcel@holtmann.org>,
Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Balakrishna Godavarthi <quic_bgodavar@quicinc.com>,
Rocky Liao <quic_rjliao@quicinc.com>,
Kalle Valo <kvalo@kernel.org>,
Jeff Johnson <jjohnson@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Bjorn Helgaas <bhelgaas@google.com>,
Srini Kandagatla <srinivas.kandagatla@linaro.org>,
Elliot Berman <quic_eberman@quicinc.com>,
Caleb Connolly <caleb.connolly@linaro.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Alex Elder <elder@kernel.org>
Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, linux-bluetooth@vger.kernel.org,
netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
ath11k@lists.infradead.org,
Jeff Johnson <quic_jjohnson@quicinc.com>,
ath12k@lists.infradead.org, linux-pm@vger.kernel.org,
linux-pci@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
kernel@quicinc.com, Amit Pundir <amit.pundir@linaro.org>
Subject: [PATCH v8 16/17] PCI/pwrctl: add a PCI power control driver for power sequenced devices
Date: Tue, 28 May 2024 21:03:24 +0200 [thread overview]
Message-ID: <20240528-pwrseq-v8-16-d354d52b763c@linaro.org> (raw)
In-Reply-To: <20240528-pwrseq-v8-0-d354d52b763c@linaro.org>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Add a PCI power control driver that's capable of correctly powering up
devices using the power sequencing subsystem. The first users of this
driver are the ath11k module on QCA6390 and ath12k on WCN7850.
Tested-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/pci/pwrctl/Kconfig | 9 ++++
drivers/pci/pwrctl/Makefile | 2 +
drivers/pci/pwrctl/pci-pwrctl-pwrseq.c | 89 ++++++++++++++++++++++++++++++++++
3 files changed, 100 insertions(+)
diff --git a/drivers/pci/pwrctl/Kconfig b/drivers/pci/pwrctl/Kconfig
index 96195395af69..f1b824955d4b 100644
--- a/drivers/pci/pwrctl/Kconfig
+++ b/drivers/pci/pwrctl/Kconfig
@@ -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 || ATH12K) && ARCH_QCOM)
+ help
+ Enable support for the PCI power control driver for device
+ drivers using the Power Sequencing subsystem.
+
endmenu
diff --git a/drivers/pci/pwrctl/Makefile b/drivers/pci/pwrctl/Makefile
index 52ae0640ef7b..d308aae4800c 100644
--- a/drivers/pci/pwrctl/Makefile
+++ b/drivers/pci/pwrctl/Makefile
@@ -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
diff --git a/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c b/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
new file mode 100644
index 000000000000..c7a113a76c0c
--- /dev/null
+++ b/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2024 Linaro Ltd.
+ */
+
+#include <linux/device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/pci-pwrctl.h>
+#include <linux/platform_device.h>
+#include <linux/pwrseq/consumer.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct pci_pwrctl_pwrseq_data {
+ struct pci_pwrctl ctx;
+ struct pwrseq_desc *pwrseq;
+};
+
+static void devm_pci_pwrctl_pwrseq_power_off(void *data)
+{
+ struct pwrseq_desc *pwrseq = data;
+
+ pwrseq_power_off(pwrseq);
+}
+
+static int pci_pwrctl_pwrseq_probe(struct platform_device *pdev)
+{
+ struct pci_pwrctl_pwrseq_data *data;
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ data->pwrseq = devm_pwrseq_get(dev, of_device_get_match_data(dev));
+ if (IS_ERR(data->pwrseq))
+ return dev_err_probe(dev, PTR_ERR(data->pwrseq),
+ "Failed to get the power sequencer\n");
+
+ ret = pwrseq_power_on(data->pwrseq);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "Failed to power-on the device\n");
+
+ ret = devm_add_action_or_reset(dev, devm_pci_pwrctl_pwrseq_power_off,
+ data->pwrseq);
+ if (ret)
+ return ret;
+
+ data->ctx.dev = dev;
+
+ ret = devm_pci_pwrctl_device_set_ready(dev, &data->ctx);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "Failed to register the pwrctl wrapper\n");
+
+ return 0;
+}
+
+static const struct of_device_id pci_pwrctl_pwrseq_of_match[] = {
+ {
+ /* ATH11K in QCA6390 package. */
+ .compatible = "pci17cb,1101",
+ .data = "wlan",
+ },
+ {
+ /* ATH12K in WCN7850 package. */
+ .compatible = "pci17cb,1107",
+ .data = "wlan",
+ },
+ { }
+};
+MODULE_DEVICE_TABLE(of, pci_pwrctl_pwrseq_of_match);
+
+static struct platform_driver pci_pwrctl_pwrseq_driver = {
+ .driver = {
+ .name = "pci-pwrctl-pwrseq",
+ .of_match_table = pci_pwrctl_pwrseq_of_match,
+ },
+ .probe = pci_pwrctl_pwrseq_probe,
+};
+module_platform_driver(pci_pwrctl_pwrseq_driver);
+
+MODULE_AUTHOR("Bartosz Golaszewski <bartosz.golaszewski@linaro.org>");
+MODULE_DESCRIPTION("Generic PCI Power Control module for power sequenced devices");
+MODULE_LICENSE("GPL");
--
2.43.0
next prev parent reply other threads:[~2024-05-28 19:04 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-28 19:03 [PATCH v8 00/17] power: sequencing: implement the subsystem and add first users Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 01/17] regulator: dt-bindings: describe the PMU module of the QCA6390 package Bartosz Golaszewski
2024-06-04 17:30 ` Bjorn Helgaas
2024-06-05 9:13 ` Bartosz Golaszewski
2024-06-05 11:12 ` Mark Brown
2024-05-28 19:03 ` [PATCH v8 02/17] regulator: dt-bindings: describe the PMU module of the WCN7850 package Bartosz Golaszewski
2024-06-04 17:31 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 03/17] dt-bindings: net: bluetooth: qualcomm: describe regulators for QCA6390 Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 04/17] dt-bindings: net: wireless: qcom,ath11k: describe the ath11k on QCA6390 Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 05/17] dt-bindings: net: wireless: describe the ath12k PCI module Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 06/17] arm64: dts: qcom: sm8550-qrd: add the Wifi node Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 07/17] arm64: dts: qcom: sm8650-qrd: " Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 08/17] arm64: dts: qcom: sm8650-hdk: " Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 09/17] arm64: dts: qcom: qrb5165-rb5: " Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 10/17] power: sequencing: implement the pwrseq core Bartosz Golaszewski
2024-06-04 17:43 ` Bjorn Helgaas
2024-06-04 18:27 ` Bartosz Golaszewski
2024-06-05 6:52 ` Ratheesh Kannoth
2024-06-05 7:43 ` Bartosz Golaszewski
2024-05-28 19:03 ` [PATCH v8 11/17] power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets Bartosz Golaszewski
2024-06-04 17:52 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 12/17] PCI: hold the rescan mutex when scanning for the first time Bartosz Golaszewski
2024-06-11 22:55 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 13/17] PCI/pwrctl: reuse the OF node for power controlled devices Bartosz Golaszewski
2024-06-11 22:56 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 14/17] PCI/pwrctl: create platform devices for child OF nodes of the port node Bartosz Golaszewski
2024-06-11 22:56 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 15/17] PCI/pwrctl: add PCI power control core code Bartosz Golaszewski
2024-06-05 17:57 ` Bjorn Helgaas
2024-06-05 18:05 ` Bartosz Golaszewski
2024-06-11 22:56 ` Bjorn Helgaas
2024-05-28 19:03 ` Bartosz Golaszewski [this message]
2024-06-04 23:23 ` [PATCH v8 16/17] PCI/pwrctl: add a PCI power control driver for power sequenced devices Bjorn Helgaas
2024-06-04 23:34 ` Dmitry Baryshkov
2024-06-05 2:13 ` Bjorn Helgaas
2024-06-05 8:47 ` Bartosz Golaszewski
2024-06-05 17:47 ` Bjorn Helgaas
2024-06-05 18:04 ` Bartosz Golaszewski
2024-06-11 22:56 ` Bjorn Helgaas
2024-05-28 19:03 ` [PATCH v8 17/17] Bluetooth: qca: use the power sequencer for QCA6390 Bartosz Golaszewski
2024-05-30 11:02 ` [PATCH v8 00/17] power: sequencing: implement the subsystem and add first users Neil Armstrong
2024-05-30 15:22 ` Caleb Connolly
2024-06-04 17:19 ` Bjorn Helgaas
2024-06-04 18:24 ` Bartosz Golaszewski
2024-06-05 17:56 ` Bjorn Helgaas
2024-06-11 22:54 ` Bjorn Helgaas
2024-06-12 7:10 ` Bartosz Golaszewski
2024-06-20 14:30 ` patchwork-bot+bluetooth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240528-pwrseq-v8-16-d354d52b763c@linaro.org \
--to=brgl@bgdev.pl \
--cc=amit.pundir@linaro.org \
--cc=andersson@kernel.org \
--cc=ath11k@lists.infradead.org \
--cc=ath12k@lists.infradead.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=bhelgaas@google.com \
--cc=broonie@kernel.org \
--cc=caleb.connolly@linaro.org \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=edumazet@google.com \
--cc=elder@kernel.org \
--cc=jjohnson@kernel.org \
--cc=kernel@quicinc.com \
--cc=konrad.dybcio@linaro.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=kvalo@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=marcel@holtmann.org \
--cc=neil.armstrong@linaro.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=quic_bgodavar@quicinc.com \
--cc=quic_eberman@quicinc.com \
--cc=quic_jjohnson@quicinc.com \
--cc=quic_rjliao@quicinc.com \
--cc=robh@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).