power: sequencing: qcom-wcn: fix bluetooth-wifi copypasta for WCN6855Prevent a name conflict (which is surprisingly not caught by theframework).Fixes: bd4c8bafcf50 ("power: sequencing: qcom-wcn:
power: sequencing: qcom-wcn: fix bluetooth-wifi copypasta for WCN6855Prevent a name conflict (which is surprisingly not caught by theframework).Fixes: bd4c8bafcf50 ("power: sequencing: qcom-wcn: improve support for wcn6855")Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>Link: https://lore.kernel.org/r/20250625-topic-wcn6855_pwrseq-v1-1-cfb96d599ff8@oss.qualcomm.comSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
show more ...
power: sequencing: thead-gpu: use new defines for match() return valuesReplace the magic numbers with proper defines we now have in the header.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Li
power: sequencing: thead-gpu: use new defines for match() return valuesReplace the magic numbers with proper defines we now have in the header.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Link: https://lore.kernel.org/r/20250624-pwrseq-match-defines-v1-5-a59d90a951f1@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: qcom-wcn: use new defines for match() return valuesReplace the magic numbers with proper defines we now have in the header.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Lin
power: sequencing: qcom-wcn: use new defines for match() return valuesReplace the magic numbers with proper defines we now have in the header.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Link: https://lore.kernel.org/r/20250624-pwrseq-match-defines-v1-4-a59d90a951f1@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: add defines for return values of the match() callbackInstead of using 0 and 1 as magic numbers, let's add proper defineswhose names tell the reader what the meaning behind them
power: sequencing: add defines for return values of the match() callbackInstead of using 0 and 1 as magic numbers, let's add proper defineswhose names tell the reader what the meaning behind them is.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Link: https://lore.kernel.org/r/20250624-pwrseq-match-defines-v1-3-a59d90a951f1@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: extend build coverage with COMPILE_TEST=yEnable building the pwrseq drivers with COMPILE_TEST enabled. This makesit easier to build-test them.Reviewed-by: Ulf Hansson <ulf.han
power: sequencing: extend build coverage with COMPILE_TEST=yEnable building the pwrseq drivers with COMPILE_TEST enabled. This makesit easier to build-test them.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Link: https://lore.kernel.org/r/20250624-pwrseq-match-defines-v1-2-a59d90a951f1@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: thead-gpu: add missing headerWhen using kcalloc(), kfree() etc., we need to include linux/slab.h.While on some architectures it may work fine because the header ispulled in imp
power: sequencing: thead-gpu: add missing headerWhen using kcalloc(), kfree() etc., we need to include linux/slab.h.While on some architectures it may work fine because the header ispulled in implicitly, on others it triggers the following errors:drivers/power/sequencing/pwrseq-thead-gpu.c: In function ‘pwrseq_thead_gpu_match’:drivers/power/sequencing/pwrseq-thead-gpu.c:147:21: error: implicit declaration of function ‘kcalloc’ [-Wimplicit-function-declaration] 147 | ctx->clks = kcalloc(ctx->num_clks, sizeof(*ctx->clks), GFP_KERNEL);Fixes: d4c2d9b5b7ce ("power: sequencing: Add T-HEAD TH1520 GPU power sequencer driver")Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Link: https://lore.kernel.org/r/20250624-pwrseq-match-defines-v1-1-a59d90a951f1@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: Add T-HEAD TH1520 GPU power sequencer driverIntroduce the pwrseq-thead-gpu driver, a power sequencer provider forthe Imagination BXM-4-64 GPU on the T-HEAD TH1520 SoC. This driv
power: sequencing: Add T-HEAD TH1520 GPU power sequencer driverIntroduce the pwrseq-thead-gpu driver, a power sequencer provider forthe Imagination BXM-4-64 GPU on the T-HEAD TH1520 SoC. This drivercontrols an auxiliary device instantiated by the AON power domain.The TH1520 GPU requires a specific sequence to correctly initialize andpower down its resources: - Enable GPU clocks (core and sys). - De-assert the GPU clock generator reset (clkgen_reset). - Introduce a short hardware-required delay. - De-assert the GPU core reset. The power-down sequence performs these steps in reverse.Implement this sequence via the pwrseq_power_on and pwrseq_power_offcallbacks.Crucially, the driver's match function is called when a consumer (theImagination GPU driver) requests the "gpu-power" target. During thismatch, the sequencer uses clk_bulk_get() andreset_control_get_exclusive() on the consumer's device to obtain handlesto the GPU's "core" and "sys" clocks, and the GPU core reset. These,along with clkgen_reset obtained from parent aon node, allow it toperform the complete sequence.Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>Link: https://lore.kernel.org/r/20250623-apr_14_for_sending-v6-1-6583ce0f6c25@samsung.com[Bartosz: use a ternary operator instead of implicitly casting theresult of a boolean expression to int]Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: qcom-wcn: explain why we need the WLAN_EN GPIO hackWith the recent rework of the PCI power control code, the workaround forthe wlan-enable GPIO - where we don't set a default (l
power: sequencing: qcom-wcn: explain why we need the WLAN_EN GPIO hackWith the recent rework of the PCI power control code, the workaround forthe wlan-enable GPIO - where we don't set a default (low) state in thepower sequencing driver, but instead request the pin as-is - should nolonger be needed but some platforms still fail to probe the WLANcontroller. This is caused by the Qcom PCIe controller and needs aworkaround in the controller driver so add a FIXME to eventually removethe hack from this driver once this is done.Link: https://lore.kernel.org/r/20250102121530.26993-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: qcom-wcn: add support for the WCN6750 PMUEnable support for controlling the power-up sequence of the PMU insidethe WCN6750 model.Signed-off-by: Janaki Ramaiah Thota <quic_jana
power: sequencing: qcom-wcn: add support for the WCN6750 PMUEnable support for controlling the power-up sequence of the PMU insidethe WCN6750 model.Signed-off-by: Janaki Ramaiah Thota <quic_janathot@quicinc.com>Link: https://lore.kernel.org/r/20241209103455.9675-5-quic_janathot@quicinc.comSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: qcom-wcn: improve support for wcn6855WCN6855 (also known as QCA6490) is similar to the already supportedQCA6390 but takes in two more supplies so add a new vregs list for it.O
power: sequencing: qcom-wcn: improve support for wcn6855WCN6855 (also known as QCA6490) is similar to the already supportedQCA6390 but takes in two more supplies so add a new vregs list for it.On sm8450-hdk it also requires a short assert of the xo-clk pin so addhandling for it in a dedicated unit.As we now have a separate set of targets for this variant, store thepointer to the targets struct associated with a model in the devicematch data.Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>Link: https://lore.kernel.org/r/20241018-sc8280xp-pwrseq-v6-2-8da8310d9564@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: make the QCom PMU pwrseq driver depend on CONFIG_OFThis driver uses various OF-specific functions and depends on phandleparsing. There's no reason to make it available to non-OF
power: sequencing: make the QCom PMU pwrseq driver depend on CONFIG_OFThis driver uses various OF-specific functions and depends on phandleparsing. There's no reason to make it available to non-OF systems so adda relevant dependency switch to its Kconfig entry.Fixes: 2f1630f437df ("power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets")Link: https://lore.kernel.org/r/20241004130449.51725-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Merge tag 'pwrseq-updates-for-v6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linuxPull power sequencing updates from Bartosz Golaszewski: "There's one change adding support for a
Merge tag 'pwrseq-updates-for-v6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linuxPull power sequencing updates from Bartosz Golaszewski: "There's one change adding support for a new PMU model and another adding documentation for the subsystem which probably should have been part of the initial commit but better late than never: - add support for the new PMU variant inside the WCN6855 chipset - add documentation for the subsystem"* tag 'pwrseq-updates-for-v6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: Documentation: add a driver API doc for the power sequencing subsystem power: sequencing: qcom-wcn: add support for the WCN6855 PMU
power: sequencing: qcom-wcn: set the wlan-enable GPIO to outputCommit a9aaf1ff88a8 ("power: sequencing: request the WLAN enable GPIOas-is") broke WLAN on boards on which the wlan-enable GPIO enabl
power: sequencing: qcom-wcn: set the wlan-enable GPIO to outputCommit a9aaf1ff88a8 ("power: sequencing: request the WLAN enable GPIOas-is") broke WLAN on boards on which the wlan-enable GPIO enabling thewifi module isn't in output mode by default. We need to set direction tooutput while retaining the value that was already set to keep the athmodule on if it's already started.Fixes: a9aaf1ff88a8 ("power: sequencing: request the WLAN enable GPIO as-is")Link: https://lore.kernel.org/r/20240823115500.37280-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: qcom-wcn: add support for the WCN6855 PMUEnable support for controlling the power-up sequence of the PMU insidethe WCN6855 model.Signed-off-by: Konrad Dybcio <konradybcio@kern
power: sequencing: qcom-wcn: add support for the WCN6855 PMUEnable support for controlling the power-up sequence of the PMU insidethe WCN6855 model.Signed-off-by: Konrad Dybcio <konradybcio@kernel.org>[Bartosz: split Konrad's bigger patch, write the commit message]Co-developed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>Link: https://lore.kernel.org/r/20240813190841.155067-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: request the WLAN enable GPIO as-isIf the WCN module is powered up before linux boots and the ath11k driverprobes at the same time as the power sequencing driver, we may end upd
power: sequencing: request the WLAN enable GPIO as-isIf the WCN module is powered up before linux boots and the ath11k driverprobes at the same time as the power sequencing driver, we may end updriving the wlan-enable GPIO low in the latter, breaking the start-up ofthe WLAN module. Request the wlan-enable GPIO as-is so that if the WLANmodule is already starting/started, we leave it alone.Fixes: 2f1630f437df ("power: pwrseq: add a driver for the PMU module on the QCom WCN chipsets")Reported-by: Stephan Gerhold <stephan.gerhold@linaro.org>Link: https://lore.kernel.org/r/20240813190751.155035-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: fix an invalid pointer dereference in error pathWe may end up calling pwrseq_target_free() on a partially initializedtarget object whose unit is either NULL or an ERR_PTR(). Avo
power: sequencing: fix an invalid pointer dereference in error pathWe may end up calling pwrseq_target_free() on a partially initializedtarget object whose unit is either NULL or an ERR_PTR(). Avoiddereferencing invalid memory by adding an appropriate check topwrseq_target_free().Fixes: 249ebf3f65f8 ("power: sequencing: implement the pwrseq core")Reported-by: Dan Carpenter <dan.carpenter@linaro.org>Closes: https://lore.kernel.org/linux-pm/62a3531e-9927-40f8-b587-254a2dfa47ef@stanley.mountain/Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>Link: https://lore.kernel.org/r/20240712194004.241939-1-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: simplify returning pointer without cleanupUse 'return_ptr' helper for returning a pointer without cleanup forshorter code.Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlows
power: sequencing: simplify returning pointer without cleanupUse 'return_ptr' helper for returning a pointer without cleanup forshorter code.Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>Link: https://lore.kernel.org/r/20240703083038.95777-1-krzysztof.kozlowski@linaro.orgSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: pwrseq: add a driver for the PMU module on the QCom WCN chipsetsThis adds the power sequencing driver for the PMU modules present on theQualcomm WCN Bluetooth and Wifi chipsets. It uses the
power: pwrseq: add a driver for the PMU module on the QCom WCN chipsetsThis adds the power sequencing driver for the PMU modules present on theQualcomm WCN Bluetooth and Wifi chipsets. It uses the pwrseq subsystemand knows how to match the sequencer to the consumer device by verifyingthe relevant properties and DT layout. Using this driver will allow theBT and WLAN drivers to respect the required delays between enabling thetwo modules.Tested-by: Amit Pundir <amit.pundir@linaro.org>Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD, SM8650-QRD & SM8650-HDKTested-by: Caleb Connolly <caleb.connolly@linaro.org> # OnePlus 8TReviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>Link: https://lore.kernel.org/r/20240605123850.24857-3-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
power: sequencing: implement the pwrseq coreImplement the power sequencing subsystem allowing devices to sharecomplex powering-up and down procedures. It's split into the consumerand provider par
power: sequencing: implement the pwrseq coreImplement the power sequencing subsystem allowing devices to sharecomplex powering-up and down procedures. It's split into the consumerand provider parts but does not implement any new DT bindings so thatthe actual power sequencing is never revealed in the DT representation.Tested-by: Amit Pundir <amit.pundir@linaro.org>Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD, SM8650-QRD & SM8650-HDKTested-by: Caleb Connolly <caleb.connolly@linaro.org> # OnePlus 8TAcked-by: Krzysztof Kozlowski <krzk@kernel.org>Link: https://lore.kernel.org/r/20240605123850.24857-2-brgl@bgdev.plSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>