From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5F30327BE7; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; cv=none; b=rNkaGIczbmvECwHFBnGlOzJPDj5Lc0oNx1vK2Q0xD88f2yGn6Q4zycSACy9SZmhs37vjRea9vpB9AScAymsA609fRjWdjIGMfl3QI7MoE71BDlCAEqPncYwvOkIVuGGqIbnOf3HwmddUawyMmQmxli4wGWdeX+KSCg7zlzph7zU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; c=relaxed/simple; bh=3nA72EkIdmKC4EC0a7ioMlai7D1RlpRo3JaSNfWCI+8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ISe3qbA5o4GaaUjsKFbzRbC+uQOXOUyrneK7uRx/91MyEgj112fDTEXVdKXsUY0EELtQwvcgz4c8HWSZN3TQJ2QHGKM/zg3cTBBAIZU9ZhqGmxa2fZwqkLj1VVQVwYf0csXeE6fzZ1009Fkq8cJuRv3A/BXHW47cZayZc3aFaCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=coxmmZnX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="coxmmZnX" Received: by smtp.kernel.org (Postfix) with ESMTPS id 6AD2CC116D0; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=3nA72EkIdmKC4EC0a7ioMlai7D1RlpRo3JaSNfWCI+8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=coxmmZnX/Ufzl6IrgZFQfUJlsE/LgSL3ez+FMHzMV9yBLYFxIxUiBbG2tYRuUdpxX /kHmFNGs1Oolm0Bh1NdVoZaBEv/xpudQBQlRsGuDe4S3JR3JE4OieZuHmEpbf8vpxC ywM7OnWF2PlB4kytQRuZDp2zU4g1WbKK5q3bBIP76Fe3uq0w1jeWio61ewEe6MWHTB 28rgm1WNqGfv/L3YOd1ErlL98lfwGM7UZaBZtvOV7Gf20kY3aClqHVwkGK8epIavSK 7OBw2XZSq/l3qZim1CwJMZ+nV9tQ54M3NKjWkhSVSLxXlo8wShZU2KPnRSS6D7idgj r0kPFnKtdjZAQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56DF4D3CCB8; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:53 +0530 Subject: [PATCH v5 01/15] PCI/pwrctrl: pwrseq: Rename private struct and pointers for consistency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-1-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3529; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=jpzQnoVwEdcn0ySCaLexwQnNRM8TDWqV0v+/dcDxcw4=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdByf+xDF+rD4QxhDJvBJM/UiPjdQLykBm8t VjC+ErqS9CJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9UrPB/9loC6Qt69PW7yqKbaGOnFNC6qSQUxzzSF9zCvCMbCLVADduO5EnZOJ02KdqPefthtD8uX +nXOmsZ+AH/Z47dgQY2nUy34ETJpulIaP7kB5zvxnW8H2Fr+DOzHAZRc930H4aV/sY6Wi7LjCQz tSnZMbB8uCnL2K82/dBUxfQnJysUUzw6fglcRyJOK9Df3X6zjV0Ny+TUaUDhp38/B1QInE0RaFU 16Xrl3okhmBLQ6PYHq12KVxOpMolY5fIhSWTMOh/cvRXmPFrC7m3a1WW7Q7G9F4q4DnccmIVDAw GTPcjkB50vxtPOBQ+8ZWU92UaP+BpJx09yg4KRG/WBBWTrvH X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Bjorn Helgaas Previously the pwrseq, tc9563, and slot pwrctrl drivers used different naming conventions for their private data structs and pointers to them, which makes patches hard to read: Previous names New names ------------------------------------ ---------------------------------- struct pci_pwrctrl_pwrseq_data { struct pci_pwrctrl_pwrseq { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_pwrseq_data *data struct pci_pwrctrl_pwrseq *pwrseq struct tc9563_pwrctrl_ctx { struct pci_pwrctrl_tc9563 { struct tc9563_pwrctrl_ctx *ctx struct pci_pwrctrl_tc9563 *tc9563 struct pci_pwrctrl_slot_data { struct pci_pwrctrl_slot { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_slot_data *slot struct pci_pwrctrl_slot *slot Rename "struct pci_pwrctrl_pwrseq_data" to "pci_pwrctrl_pwrseq". Rename the "struct pci_pwrctrl ctx" member to "struct pci_pwrctrl pwrctrl". Rename pointers from "struct pci_pwrctrl_pwrseq_data *data" to "struct pci_pwrctrl_pwrseq *pwrseq". No functional change intended. Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c b/drivers/pci/pwrctrl= /pci-pwrctrl-pwrseq.c index 4e664e7b8dd2..c0d22dc3a856 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c @@ -13,8 +13,8 @@ #include #include =20 -struct pci_pwrctrl_pwrseq_data { - struct pci_pwrctrl ctx; +struct pci_pwrctrl_pwrseq { + struct pci_pwrctrl pwrctrl; struct pwrseq_desc *pwrseq; }; =20 @@ -62,7 +62,7 @@ static void devm_pci_pwrctrl_pwrseq_power_off(void *data) static int pci_pwrctrl_pwrseq_probe(struct platform_device *pdev) { const struct pci_pwrctrl_pwrseq_pdata *pdata; - struct pci_pwrctrl_pwrseq_data *data; + struct pci_pwrctrl_pwrseq *pwrseq; struct device *dev =3D &pdev->dev; int ret; =20 @@ -76,28 +76,28 @@ static int pci_pwrctrl_pwrseq_probe(struct platform_dev= ice *pdev) return ret; } =20 - data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); - if (!data) + pwrseq =3D devm_kzalloc(dev, sizeof(*pwrseq), GFP_KERNEL); + if (!pwrseq) return -ENOMEM; =20 - data->pwrseq =3D devm_pwrseq_get(dev, pdata->target); - if (IS_ERR(data->pwrseq)) - return dev_err_probe(dev, PTR_ERR(data->pwrseq), + pwrseq->pwrseq =3D devm_pwrseq_get(dev, pdata->target); + if (IS_ERR(pwrseq->pwrseq)) + return dev_err_probe(dev, PTR_ERR(pwrseq->pwrseq), "Failed to get the power sequencer\n"); =20 - ret =3D pwrseq_power_on(data->pwrseq); + ret =3D pwrseq_power_on(pwrseq->pwrseq); if (ret) return dev_err_probe(dev, ret, "Failed to power-on the device\n"); =20 ret =3D devm_add_action_or_reset(dev, devm_pci_pwrctrl_pwrseq_power_off, - data->pwrseq); + pwrseq->pwrseq); if (ret) return ret; =20 - pci_pwrctrl_init(&data->ctx, dev); + pci_pwrctrl_init(&pwrseq->pwrctrl, dev); =20 - ret =3D devm_pci_pwrctrl_device_set_ready(dev, &data->ctx); + ret =3D devm_pci_pwrctrl_device_set_ready(dev, &pwrseq->pwrctrl); if (ret) return dev_err_probe(dev, ret, "Failed to register the pwrctrl wrapper\n"); --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CEAE8327C0C; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; cv=none; b=OE6zDWaUs7F4Q4Juqdrc4fkNL/NHY1PIHGODA4bpzwxTGmPKA7YuxmP5einE2Nemu2M0ZyiiK2t/ZHJ3ITtYyE2SrzJ0wV5YWC3nWetST6CI+4T4pEJodVLYjrW0mU5GEJEoVK+fL7IB7AhlKXBoU/VUurbWIjmWLsDPLJ1TMRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; c=relaxed/simple; bh=MgclwFgqGDcrh+VR4Ax+lEszi4KoIefWcrVpxysOj1A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QjnELQw4CzKHOci3eYVvHVrnLXk3j+L8XcVqaVAXD4jzDgSR31prBktlaP3RW/cxtHWdl8VmJNLBSNrH+gzWvPvGLa5LPxjyn+ovlk2eIm5mpJLLTNJgRRxoYrvEt/HEGyS9F9gYAzqTuOC+x0tJqpZ8ptHKU6Gwu03pxOLILZg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rXiTE/RL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rXiTE/RL" Received: by smtp.kernel.org (Postfix) with ESMTPS id 7865AC19423; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=MgclwFgqGDcrh+VR4Ax+lEszi4KoIefWcrVpxysOj1A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=rXiTE/RL/nEccYL26vxCOYryvIrH1vZYHbhrX91W4VQywKnpzi9jZIDvnvwC7Tnq/ vYIWuwwVazIvhDprmFXtfxFsIoTld6SoKgyscV2RbbphClZeNgNyrBK9xBvn+h6ZsE Th3NwO4SQoTDMXLLF+lwREGoDHfBryAaztjJ7QZuVOTONew8FwfIxM06HMToOSUhNQ 5kzT+1/sSTxcZuJVK1rO9MREGCVauZlh4iDERIh50eGlPhjf0Z38oWYGsfABAFnAu2 JnYk7+SVQns8JnjXqwIGU7jW8aqhCdZe+1ILUgtRTyEvftBPqGK6eQIjEBL2P+deFK axS/5O0vsbujg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64AFCD3CCB9; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:54 +0530 Subject: [PATCH v5 02/15] PCI/pwrctrl: slot: Rename private struct and pointers for consistency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-2-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2784; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=44NVPWUXPuZjfLmJawVYZKHEmFFDsDqRXpz45pIkiiE=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdBuIQNE5ifaCycNCiMPUkxX8+/GtEeFUCk1 l5byjks6keJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9ZR/B/46p6o8wAxDjXi2SM97q9/E2HUBtSnn7zcX4kUMv/K8lHL4AcAN9IqScIvsv3FH0coTVpX YST09swQHNq9GRC+U48qNKlXB8AWPU4GBNjXMDM9CuqQGnthgu5CLdvq7bjQJYLvH5G+rGbZtyt Pyrr6+cYYVlORSUZQrdlTiEat4r5NeyHJXQi7GZ88mrcVQzXKtJGRqYgqX42iUQo5rUptIERpg6 1pKuJ62+cx5ylqg+xQaxFf1O+mNFiItwYYw+h7ae/aiNPyj+hffz5qur2mDMBYwl6bvlc3+MH+P amHiXxjdYqdMWBC/XwWIqTRnABJpzgc18A58ftXPcHIFzpY/ X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Bjorn Helgaas Previously the pwrseq, tc9563, and slot pwrctrl drivers used different naming conventions for their private data structs and pointers to them, which makes patches hard to read: Previous names New names ------------------------------------ ---------------------------------- struct pci_pwrctrl_pwrseq_data { struct pci_pwrctrl_pwrseq { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_pwrseq_data *data struct pci_pwrctrl_pwrseq *pwrseq struct tc9563_pwrctrl_ctx { struct pci_pwrctrl_tc9563 { struct tc9563_pwrctrl_ctx *ctx struct pci_pwrctrl_tc9563 *tc9563 struct pci_pwrctrl_slot_data { struct pci_pwrctrl_slot { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_slot_data *slot struct pci_pwrctrl_slot *slot Rename "struct pci_pwrctrl_slot_data" to "struct pci_pwrctrl_slot". Rename the "struct pci_pwrctrl ctx" member to "struct pci_pwrctrl pwrctrl". No functional change intended. Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/slot.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pwrctrl/slot.c b/drivers/pci/pwrctrl/slot.c index 3320494b62d8..5ddae4ae3431 100644 --- a/drivers/pci/pwrctrl/slot.c +++ b/drivers/pci/pwrctrl/slot.c @@ -13,15 +13,15 @@ #include #include =20 -struct pci_pwrctrl_slot_data { - struct pci_pwrctrl ctx; +struct pci_pwrctrl_slot { + struct pci_pwrctrl pwrctrl; struct regulator_bulk_data *supplies; int num_supplies; }; =20 static void devm_pci_pwrctrl_slot_power_off(void *data) { - struct pci_pwrctrl_slot_data *slot =3D data; + struct pci_pwrctrl_slot *slot =3D data; =20 regulator_bulk_disable(slot->num_supplies, slot->supplies); regulator_bulk_free(slot->num_supplies, slot->supplies); @@ -29,7 +29,7 @@ static void devm_pci_pwrctrl_slot_power_off(void *data) =20 static int pci_pwrctrl_slot_probe(struct platform_device *pdev) { - struct pci_pwrctrl_slot_data *slot; + struct pci_pwrctrl_slot *slot; struct device *dev =3D &pdev->dev; struct clk *clk; int ret; @@ -64,9 +64,9 @@ static int pci_pwrctrl_slot_probe(struct platform_device = *pdev) "Failed to enable slot clock\n"); } =20 - pci_pwrctrl_init(&slot->ctx, dev); + pci_pwrctrl_init(&slot->pwrctrl, dev); =20 - ret =3D devm_pci_pwrctrl_device_set_ready(dev, &slot->ctx); + ret =3D devm_pci_pwrctrl_device_set_ready(dev, &slot->pwrctrl); if (ret) return dev_err_probe(dev, ret, "Failed to register pwrctrl driver\n"); =20 --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C56C83271E0; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; cv=none; b=VZdLeA6TtFpqICNM5akiRvdsnWNJxDHOJpwr5r1cgb0rAXFP24JdwNcPtVKDaEapUSEswpb3AsYkXgsQ4ycT+BXaAVZTnMy7ISgeQVWRK+BANT860QiDzeT7+3zwLld0T3/95REDV5iGlsvLhM4ygYPjeJZG32m/moMSBwnwhcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462151; c=relaxed/simple; bh=w8kKfcICrrRimzqM8aAp2OtMgT2/yXrkaYvrlp46AME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kKqSkppNPvys8YFKlA/1Hukz/SzgkbGMbgory2xsmPbocOjRKFDngyg5Q5ml+3a1mlMkxSKyu520UQJiXbxG9hskV2WDIbcri1azQC5yYB/LRoT1Uf/Ul8XzozrDaZzW8XZEtiLE3uU+QqXkRXLneIRDhCpzOv0PxQU9AI3rPfA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XMS1DprT; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XMS1DprT" Received: by smtp.kernel.org (Postfix) with ESMTPS id 7E6C5C4AF09; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=w8kKfcICrrRimzqM8aAp2OtMgT2/yXrkaYvrlp46AME=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=XMS1DprT8VeJG40IQqpYfTCwtrgM2i+6TOZUoLVsSbVkyepdi28ISI2BCRNNYSbpA bHUwYFgaDUQmYs3JSLQokVUzbgfKQCrkXvRRp1X34DreytQRTGGEx+2a4ujw9mhQHa Z2jfCa5h+SQoBlgnXp1x0ehYB65bK6Ix5f7rsDufTwDeD9I42jgfalsfwHGF+9lAM2 ZO0HKcb2VTtxkyKbWquB5FvBbP5VE1vfbn81rO8BPNWPwDmMkrzWYKd5NI6S7uyQaz ZFNOMYrotYpzXVNDOAMJrq8iokRYZpKEOohP2AjfBFLq0DJOoC1pUtIhYrTGqOnIF7 9S1McOjjQ/JBA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 717EFD3CCBB; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:55 +0530 Subject: [PATCH v5 03/15] PCI/pwrctrl: tc9563: Use put_device() instead of i2c_put_adapter() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-3-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1750; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=IWMozgMnaMljrI9/K1oAYaHIcX8Y2LJhp+Wln908Neo=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdBUla5R2xNUdzHYiNI94k/Alk5+0fVu8MGa f5sFEDQe1+JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9c78B/9XenCvfN2XksYLtpgIozlIyaqCL8y6C52h0KO0i4kzreoDbtR7GzTMcayoDNzPEoiZOGX /x4TaPdM11PRmmbNfS8AJ1/Td62PEPDtIn9MhXpZXhOw9VExbNmsFsyj4y+P3pfh1ufbUYIcjBv z3rQ0bFpBbtzCpVAAfJcyzXJYLvdwfBakIQyiqNc8t3+QuTL7k/oCFyZsIMCvZ+yC2VqEp0au+O PSuiQ7lm22Vm/ecxyoctwmfMWNox6CIwA0Fx0SpiEnCNEo3jhatmcb9kQWrBDnBBRaAGpRNlRRN V9XZ1r5794h0oEJfikO4Iq5XzVRYBIO13llHqMawJooHpYKB X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam The API comment for of_find_i2c_adapter_by_node() recommends using put_device() to drop the reference count of I2C adapter instead of using i2c_put_adapter(). So replace i2c_put_adapter() with put_device(). Fixes: 4c9c7be47310 ("PCI: pwrctrl: Add power control driver for TC9563") Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index ec423432ac65..0a63add84d09 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -533,7 +533,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) ctx->client =3D i2c_new_dummy_device(ctx->adapter, addr); if (IS_ERR(ctx->client)) { dev_err(dev, "Failed to create I2C client\n"); - i2c_put_adapter(ctx->adapter); + put_device(&ctx->adapter->dev); return PTR_ERR(ctx->client); } =20 @@ -613,7 +613,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) tc9563_pwrctrl_power_off(ctx); remove_i2c: i2c_unregister_device(ctx->client); - i2c_put_adapter(ctx->adapter); + put_device(&ctx->adapter->dev); return ret; } =20 @@ -623,7 +623,7 @@ static void tc9563_pwrctrl_remove(struct platform_devic= e *pdev) =20 tc9563_pwrctrl_power_off(ctx); i2c_unregister_device(ctx->client); - i2c_put_adapter(ctx->adapter); + put_device(&ctx->adapter->dev); } =20 static const struct of_device_id tc9563_pwrctrl_of_match[] =3D { --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13E23328B52; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=LeKHOl9toeUh7g1Nii0X+ZNKYG5yk3yLhowPeCIQwoBZos1mnxlF1qqUjFLJh2qSu/D3SGOlgOhmQB1ohuqb9x89i8swzR+MuRtVi+lH1Xmt2bwZ6k/wL6Dp2zVcGoOo+ZmSP8EUIgdlD2gCJgYKF+OKqz2wr3QFMtzN8vIB34o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=3JYZjw/ZAh5w5G62kYD3nnn5B9uNp78oxSenKqU5H3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Coa+0DWyJnnJrEz6tzURJ7WwMQSyZ2lwuq9HjD3tInYdl7w/zmDWuQPTco7iDw6hElEP+jDDbgDhqhbu8zfnbWTSTzRKmjmxYCUiKwXbPnZnCyX6rZMik3On+0MyQcoXwMt0YyXBWPRp8R5A0Zymtdc+QeQUM6xs3svdOoolQ4E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CwXN/CzP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CwXN/CzP" Received: by smtp.kernel.org (Postfix) with ESMTPS id 8BC74C2BCB0; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=3JYZjw/ZAh5w5G62kYD3nnn5B9uNp78oxSenKqU5H3s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=CwXN/CzPtoOqKfdjXeL9dyAawTSfjKkKFeeivbn//swpQgx3cQfggWZa0Ut470ICl szvSTq40FL4lImKPzf2ixEufuRIO80aqQLB+i2cW69II0mPXvikuAm+Z6SoziSq98q MqurhPPGMd9cCXO30favP4xKWkcb14P6grjvGWLY8nrkV3r0n7iBaMEgL+/6RzCXWN zS33msBP+8E3LR4QHoSP5ZpBIctM9ixrp49Xy6QTHc0MXk3otZRoyzjyS8oe2SgJzy xetMnEn0lmiIF/PM1mvINyHxQFytoMv7to2xRRih+Opyg8QfnVn8gAtzWeheQOph+s 273xZrTDwIWSA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F764D3CCB3; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:56 +0530 Subject: [PATCH v5 04/15] PCI/pwrctrl: tc9563: Clean up whitespace Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-4-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7141; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=MpBEhzsl31WZThO8tK8CunXFQlrjrY0SrObfkwJWMJ0=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdBJrWfAQB5XD1rr6eeGXI/27AgzGoXlVfDc fAAri5Xz/SJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9UeAB/9oVWRB8kRxN0JLBf9vkp++KwdxOsg7Qd+zhaSPVksTRnIQ0/jzfL0RrwRIvHbydj38lxd Nr+WHzh7YtyjRGU/bTdQkKry3KNIwmY7AR6zVZ67rP+YRRoxGXx+m+drIPlE9Lc/exAzecRm9HE n6/7s4gf9ykryqkCjG04l0esBqBYcvj9k2ZyUT5wWdRiR2k4XE+ZSIEDDqa91xGBrFiYWJMFrFC atZ/SfwoVGQ8VUqrIUN7gnED1Pybzppfrke0FNXqeLjJ5uGLfPWzMPQ1aMb/RhBRzybPxUrscAg bwOIhMqWIcJt6RuMIOO7mebfLszuOSFrGUyzo/AXZqNDFFaq X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Bjorn Helgaas Most of pci-pwrctrl-tc9563.c fits in 80 columns. Wrap lines that are gratuitously longer. Whitespace changes only. Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 65 +++++++++++++++++++++-------= ---- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index 0a63add84d09..efc4d2054bfd 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -59,7 +59,7 @@ #define TC9563_POWER_CONTROL_OVREN 0x82b2c8 =20 #define TC9563_GPIO_MASK 0xfffffff3 -#define TC9563_GPIO_DEASSERT_BITS 0xc /* Bits to clear for GPIO deassert = */ +#define TC9563_GPIO_DEASSERT_BITS 0xc /* Clear to deassert GPIO */ =20 #define TC9563_TX_MARGIN_MIN_UA 400000 =20 @@ -69,7 +69,7 @@ */ #define TC9563_OSC_STAB_DELAY_US (10 * USEC_PER_MSEC) =20 -#define TC9563_L0S_L1_DELAY_UNIT_NS 256 /* Each unit represents 256 nanos= econds */ +#define TC9563_L0S_L1_DELAY_UNIT_NS 256 /* Each unit represents 256 ns */ =20 struct tc9563_pwrctrl_reg_setting { unsigned int offset; @@ -217,7 +217,8 @@ static int tc9563_pwrctrl_i2c_read(struct i2c_client *c= lient, } =20 static int tc9563_pwrctrl_i2c_bulk_write(struct i2c_client *client, - const struct tc9563_pwrctrl_reg_setting *seq, int len) + const struct tc9563_pwrctrl_reg_setting *seq, + int len) { int ret, i; =20 @@ -252,12 +253,13 @@ static int tc9563_pwrctrl_disable_port(struct tc9563_= pwrctrl_ctx *ctx, if (ret) return ret; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, - common_pwroff_seq, ARRAY_SIZE(common_pwroff_seq)); + return tc9563_pwrctrl_i2c_bulk_write(ctx->client, common_pwroff_seq, + ARRAY_SIZE(common_pwroff_seq)); } =20 static int tc9563_pwrctrl_set_l0s_l1_entry_delay(struct tc9563_pwrctrl_ctx= *ctx, - enum tc9563_pwrctrl_ports port, bool is_l1, u32 ns) + enum tc9563_pwrctrl_ports port, + bool is_l1, u32 ns) { u32 rd_val, units; int ret; @@ -269,24 +271,32 @@ static int tc9563_pwrctrl_set_l0s_l1_entry_delay(stru= ct tc9563_pwrctrl_ctx *ctx, units =3D ns / TC9563_L0S_L1_DELAY_UNIT_NS; =20 if (port =3D=3D TC9563_ETHERNET) { - ret =3D tc9563_pwrctrl_i2c_read(ctx->client, TC9563_EMBEDDED_ETH_DELAY, = &rd_val); + ret =3D tc9563_pwrctrl_i2c_read(ctx->client, + TC9563_EMBEDDED_ETH_DELAY, + &rd_val); if (ret) return ret; =20 if (is_l1) - rd_val =3D u32_replace_bits(rd_val, units, TC9563_ETH_L1_DELAY_MASK); + rd_val =3D u32_replace_bits(rd_val, units, + TC9563_ETH_L1_DELAY_MASK); else - rd_val =3D u32_replace_bits(rd_val, units, TC9563_ETH_L0S_DELAY_MASK); + rd_val =3D u32_replace_bits(rd_val, units, + TC9563_ETH_L0S_DELAY_MASK); =20 - return tc9563_pwrctrl_i2c_write(ctx->client, TC9563_EMBEDDED_ETH_DELAY, = rd_val); + return tc9563_pwrctrl_i2c_write(ctx->client, + TC9563_EMBEDDED_ETH_DELAY, + rd_val); } =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, BIT(por= t)); + ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, + BIT(port)); if (ret) return ret; =20 return tc9563_pwrctrl_i2c_write(ctx->client, - is_l1 ? TC9563_PORT_L1_DELAY : TC9563_PORT_L0S_DELAY, units); + is_l1 ? TC9563_PORT_L1_DELAY : TC9563_PORT_L0S_DELAY, + units); } =20 static int tc9563_pwrctrl_set_tx_amplitude(struct tc9563_pwrctrl_ctx *ctx, @@ -321,7 +331,8 @@ static int tc9563_pwrctrl_set_tx_amplitude(struct tc956= 3_pwrctrl_ctx *ctx, {TC9563_TX_MARGIN, amp}, }; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, tx_amp_seq, ARRAY_SIZE(= tx_amp_seq)); + return tc9563_pwrctrl_i2c_bulk_write(ctx->client, tx_amp_seq, + ARRAY_SIZE(tx_amp_seq)); } =20 static int tc9563_pwrctrl_disable_dfe(struct tc9563_pwrctrl_ctx *ctx, @@ -364,8 +375,8 @@ static int tc9563_pwrctrl_disable_dfe(struct tc9563_pwr= ctrl_ctx *ctx, {TC9563_PHY_RATE_CHANGE_OVERRIDE, 0x0}, }; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, - disable_dfe_seq, ARRAY_SIZE(disable_dfe_seq)); + return tc9563_pwrctrl_i2c_bulk_write(ctx->client, disable_dfe_seq, + ARRAY_SIZE(disable_dfe_seq)); } =20 static int tc9563_pwrctrl_set_nfts(struct tc9563_pwrctrl_ctx *ctx, @@ -381,18 +392,22 @@ static int tc9563_pwrctrl_set_nfts(struct tc9563_pwrc= trl_ctx *ctx, if (!nfts[0]) return 0; =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, BIT(po= rt)); + ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, + BIT(port)); if (ret) return ret; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, nfts_seq, ARRAY_SIZE(nf= ts_seq)); + return tc9563_pwrctrl_i2c_bulk_write(ctx->client, nfts_seq, + ARRAY_SIZE(nfts_seq)); } =20 -static int tc9563_pwrctrl_assert_deassert_reset(struct tc9563_pwrctrl_ctx = *ctx, bool deassert) +static int tc9563_pwrctrl_assert_deassert_reset(struct tc9563_pwrctrl_ctx = *ctx, + bool deassert) { int ret, val; =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_GPIO_CONFIG, TC9563_= GPIO_MASK); + ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_GPIO_CONFIG, + TC9563_GPIO_MASK); if (ret) return ret; =20 @@ -401,7 +416,8 @@ static int tc9563_pwrctrl_assert_deassert_reset(struct = tc9563_pwrctrl_ctx *ctx, return tc9563_pwrctrl_i2c_write(ctx->client, TC9563_RESET_GPIO, val); } =20 -static int tc9563_pwrctrl_parse_device_dt(struct tc9563_pwrctrl_ctx *ctx, = struct device_node *node, +static int tc9563_pwrctrl_parse_device_dt(struct tc9563_pwrctrl_ctx *ctx, + struct device_node *node, enum tc9563_pwrctrl_ports port) { struct tc9563_pwrctrl_cfg *cfg =3D &ctx->cfg[port]; @@ -540,7 +556,8 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) for (int i =3D 0; i < ARRAY_SIZE(tc9563_supply_names); i++) ctx->supplies[i].supply =3D tc9563_supply_names[i]; =20 - ret =3D devm_regulator_bulk_get(dev, TC9563_PWRCTL_MAX_SUPPLY, ctx->suppl= ies); + ret =3D devm_regulator_bulk_get(dev, TC9563_PWRCTL_MAX_SUPPLY, + ctx->supplies); if (ret) { dev_err_probe(dev, ret, "failed to get supply regulator\n"); goto remove_i2c; @@ -563,7 +580,8 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) =20 /* * Downstream ports are always children of the upstream port. - * The first node represents DSP1, the second node represents DSP2, and s= o on. + * The first node represents DSP1, the second node represents DSP2, + * and so on. */ for_each_child_of_node_scoped(pdev->dev.of_node, child) { port++; @@ -574,7 +592,8 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) if (port =3D=3D TC9563_DSP3) { for_each_child_of_node_scoped(child, child1) { port++; - ret =3D tc9563_pwrctrl_parse_device_dt(ctx, child1, port); + ret =3D tc9563_pwrctrl_parse_device_dt(ctx, + child1, port); if (ret) break; } --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13EE7328B63; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=kG7g0NjkgHRzaOvpzXixbm9nf5p96hE3Oms7nRoA4QNr7e8/j1e0ubTMY/IMdmFvH7+MTmJ4e0dLtdyEcopU5VYqIwXho+b649XLKNMXBBULTpXivvoua6pzvB16o+OqzH07XDvn4iRDHeHEx1XPzjzY71YSzJuXuFubcNhsnFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=p4sUg8EF8ZsKr22SYHzPeOH1mUOOZ4BQ4g2aYw6+X8M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nmMu/uNepPCeEvLdI/DvBRRs+QXXpQrudF8jEo55jBjI4tlRGxt7KVS7vCH+9zGCr84jDcmhP4B3Jm/sAGRFbHqzXFw7Zl3jSO1ujpVp77yYyM3yhAQbGeEKZJlpoZyKCXcxc+RLdxVf+ABpgYY42Jydp0zf4ZSmDCw4rfggcio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fQhcgLeq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fQhcgLeq" Received: by smtp.kernel.org (Postfix) with ESMTPS id 97660C2BCB7; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=p4sUg8EF8ZsKr22SYHzPeOH1mUOOZ4BQ4g2aYw6+X8M=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=fQhcgLeq+y0srpiY/wbtarXT2qXqhJAavUHhBlZKPJhD1xIVwOh/DUVD6WKlNfWiM 7XjAf9QAw/G7ArC7vm+f76xYTxkqubkIZUh+MEzXug4DuszBcWBzqTV2yi/XrwPoxN NO/7hdVTEsaQ9JD6detsExhEYX3hfpzYrucv+NTYaBBt2aRkZ9+CdAfpe1XvWv/Qn3 PsbUA/Vo9ymJfBq85vaDNoOSvD8m4aVX57usZPk4dT1bjPCVyJ0iwnMZxwvo6940mB F6uQzGEOZFB/AtjKpBqSagY+Ck5zjePJIAAYpIA8WCH93p7qmJcs2bxXRE3fTED8cV wCt1+rPlEnTIA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B6DBD3CCB8; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:57 +0530 Subject: [PATCH v5 05/15] PCI/pwrctrl: tc9563: Add local variables to reduce repetition Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-5-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4095; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=eYaEHFlmQ+woaivP3WfGUoZ4cZZwo/rZUMqDu6RaHLk=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdB82yOoj/O6aiEDK4yK0T98sYlbKcj9lMmP sZG4UqZ/lSJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9WMZCACrA9g4kMXDkDVfTDfy2iinN4q+exISmFNT898VAOb307ybVwY0EtisyMSQxF6uDKjF/Zb ZVkTNRrmvjMz38PI5UFc9Qac7xYMca3iHjXRYAN4uBqrzcD9msShuzKk3jzFRxsITQ9islorbR7 VLhLwn5h6Kk2tKPN8SJjQjGxmzjl+NUI2dX2jkxKaCNMibnquHVEeGlTzHxWrDLj2bqnDGJ/S7h 1kGMeyp8PTra/7p4g/fIo8doGuR94vmsXHy05GyhUOd9enOcPULA+9L5AK8kZ6msU5OoVzsxRw5 FWFvybnLWANcyLFfH/Rykodcv1HZg/JX9sqKYWc3EeC41bqK X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Bjorn Helgaas Add local struct device * and struct device_node * variables to reduce repetitive pointer chasing. No functional changes intended. Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index efc4d2054bfd..90480e35e968 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -459,12 +459,13 @@ static void tc9563_pwrctrl_power_off(struct tc9563_pw= rctrl_ctx *ctx) =20 static int tc9563_pwrctrl_bring_up(struct tc9563_pwrctrl_ctx *ctx) { + struct device *dev =3D ctx->pwrctrl.dev; struct tc9563_pwrctrl_cfg *cfg; int ret, i; =20 ret =3D regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); if (ret < 0) - return dev_err_probe(ctx->pwrctrl.dev, ret, "cannot enable regulators\n"= ); + return dev_err_probe(dev, ret, "cannot enable regulators\n"); =20 gpiod_set_value(ctx->reset_gpio, 0); =20 @@ -478,37 +479,37 @@ static int tc9563_pwrctrl_bring_up(struct tc9563_pwrc= trl_ctx *ctx) cfg =3D &ctx->cfg[i]; ret =3D tc9563_pwrctrl_disable_port(ctx, i); if (ret) { - dev_err(ctx->pwrctrl.dev, "Disabling port failed\n"); + dev_err(dev, "Disabling port failed\n"); goto power_off; } =20 ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(ctx, i, false, cfg->l0s_de= lay); if (ret) { - dev_err(ctx->pwrctrl.dev, "Setting L0s entry delay failed\n"); + dev_err(dev, "Setting L0s entry delay failed\n"); goto power_off; } =20 ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(ctx, i, true, cfg->l1_dela= y); if (ret) { - dev_err(ctx->pwrctrl.dev, "Setting L1 entry delay failed\n"); + dev_err(dev, "Setting L1 entry delay failed\n"); goto power_off; } =20 ret =3D tc9563_pwrctrl_set_tx_amplitude(ctx, i); if (ret) { - dev_err(ctx->pwrctrl.dev, "Setting Tx amplitude failed\n"); + dev_err(dev, "Setting Tx amplitude failed\n"); goto power_off; } =20 ret =3D tc9563_pwrctrl_set_nfts(ctx, i); if (ret) { - dev_err(ctx->pwrctrl.dev, "Setting N_FTS failed\n"); + dev_err(dev, "Setting N_FTS failed\n"); goto power_off; } =20 ret =3D tc9563_pwrctrl_disable_dfe(ctx, i); if (ret) { - dev_err(ctx->pwrctrl.dev, "Disabling DFE failed\n"); + dev_err(dev, "Disabling DFE failed\n"); goto power_off; } } @@ -525,6 +526,7 @@ static int tc9563_pwrctrl_bring_up(struct tc9563_pwrctr= l_ctx *ctx) static int tc9563_pwrctrl_probe(struct platform_device *pdev) { struct pci_host_bridge *bridge =3D to_pci_host_bridge(pdev->dev.parent); + struct device_node *node =3D pdev->dev.of_node; struct pci_bus *bus =3D bridge->bus; struct device *dev =3D &pdev->dev; enum tc9563_pwrctrl_ports port; @@ -536,7 +538,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) if (!ctx) return -ENOMEM; =20 - ret =3D of_property_read_u32_index(pdev->dev.of_node, "i2c-parent", 1, &a= ddr); + ret =3D of_property_read_u32_index(node, "i2c-parent", 1, &addr); if (ret) return dev_err_probe(dev, ret, "Failed to read i2c-parent property\n"); =20 @@ -572,7 +574,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) pci_pwrctrl_init(&ctx->pwrctrl, dev); =20 port =3D TC9563_USP; - ret =3D tc9563_pwrctrl_parse_device_dt(ctx, pdev->dev.of_node, port); + ret =3D tc9563_pwrctrl_parse_device_dt(ctx, node, port); if (ret) { dev_err(dev, "failed to parse device tree properties: %d\n", ret); goto remove_i2c; @@ -583,7 +585,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) * The first node represents DSP1, the second node represents DSP2, * and so on. */ - for_each_child_of_node_scoped(pdev->dev.of_node, child) { + for_each_child_of_node_scoped(node, child) { port++; ret =3D tc9563_pwrctrl_parse_device_dt(ctx, child, port); if (ret) --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CC13329C40; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=RgaTHFR5Jsog+jjLkQ1X3qHr4j7az5KcUiGFKh7MhAcpu5DskkoW4JDRIQyCXxQFlHkbuariGnqtZnW3uc8T1O29lC+ZBAhraQJwh+sjmXRbXEKMe25n0f8u3DcP4kOCCPR5OAV6imr1PqcZDbPJxLfqyWXhbzfTfyec2AkguO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=vxnLR+SkY1H4WOO/IJ+Ue4TlngmNzbRBt0/de2MBvzI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CBEFza4uAHzACxKkPH05XlZpQ1SfvWXC7unlC+xrlRAxchP2rPel2hK9YYikHNn9bbW/lgJVNF6mBHjzKG6MwLBw1zrAi1yRldFXgKfv72yoqHN6L895gA1asM4s02nve6ejZvo4OCYTcILTTqlIyFzBGxECpncHBvWh/8D8jRI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=T2EkOAP4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="T2EkOAP4" Received: by smtp.kernel.org (Postfix) with ESMTPS id A524CC2BCF6; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=vxnLR+SkY1H4WOO/IJ+Ue4TlngmNzbRBt0/de2MBvzI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=T2EkOAP4C7R0qXb5nIPPxo5rYq6gEcq8RIQoy73FG4QOkSMfUzosyEPUjM6yDMhq6 CaQE//M41wwRItrcnXF+otX5doDrQPTGpgpE09O32CAC6qMq2RbsU8HOXwTt34Xn2N UzpW7f1RdHzh7KAoiand0y0CAl4ylVMef4PAnODXG6qr+J+upJPUG/UgVfdqeYuLWP Ee32PAZLX6QygYyRZYNZ9Fg78aCpTpINmT2dd1eATr+n6sZ9bKlJ+w1CwZfcUTZiPJ Pv1gK/2jWVBbd2KueftWo4Opzfi/0OQ5zENRs4K9pQNcc9D8rHHeTI59kYhDpVkDaD mGUlEow+61d0w== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98570D3CCBD; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:58 +0530 Subject: [PATCH v5 06/15] PCI/pwrctrl: tc9563: Rename private struct and pointers for consistency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-6-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=15284; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=h+7FkkIQQuPbmNWHJA9UVX6QbxZYeXC89Z0sh7Nk1kI=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdB89FXR9V2sL32AeWSoPkD3oL/V36f4fj5G JLem3otJ6GJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9THzCACEbHAcqcwHnQ2xHj3AehWP6ifRhX946B45DSocuvo7NrNcbILQjbOPgT7TlGoNOQouwoF 771jCdYdmvzUN8D9NVH95nRq4WAsBqJL8ib/sSRtPoKsfWau5Ae4b0+Ylb/oubCwOzKKQ3L3G3U Ia0CsUKROS55+2YVOKN4vtbMJFBWudUmcws69WPwL3wSxJrPxolizosk9002o5R8jLDeRWa01mc OPf24IiHv3OAUQviwqx0bvfLQcdv79LOKyKUsOTXR3qAJBsdww6coLvbHQ9qPIWq/uVxMm88M9i wVv6Fdz4mI0JZBs3bKAV/jp9wMBXq5ZDtue0m6klsAr8UlGv X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Bjorn Helgaas Previously the pwrseq, tc9563, and slot pwrctrl drivers used different naming conventions for their private data structs and pointers to them, which makes patches hard to read: Previous names New names ------------------------------------ ---------------------------------- struct pci_pwrctrl_pwrseq_data { struct pci_pwrctrl_pwrseq { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_pwrseq_data *data struct pci_pwrctrl_pwrseq *pwrseq struct tc9563_pwrctrl_ctx { struct pci_pwrctrl_tc9563 { struct tc9563_pwrctrl_ctx *ctx struct pci_pwrctrl_tc9563 *tc9563 struct pci_pwrctrl_slot_data { struct pci_pwrctrl_slot { struct pci_pwrctrl ctx; struct pci_pwrctrl pwrctrl; struct pci_pwrctrl_slot_data *slot struct pci_pwrctrl_slot *slot Rename "struct tc9563_pwrctrl_ctx" to "pci_pwrctrl_tc9563". Move the struct pci_pwrctrl member to be the first element in struct pci_pwrctrl_tc9563, as it is in the other drivers. Rename pointers from "struct tc9563_pwrctrl_ctx *ctx" to "struct pci_pwrctrl_tc9563 *tc9563". No functional change intended. Signed-off-by: Bjorn Helgaas Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 143 ++++++++++++++++-----------= ---- 1 file changed, 72 insertions(+), 71 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index 90480e35e968..8ae27abdf362 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -105,13 +105,13 @@ static const char *const tc9563_supply_names[TC9563_P= WRCTL_MAX_SUPPLY] =3D { "vddio18", }; =20 -struct tc9563_pwrctrl_ctx { +struct pci_pwrctrl_tc9563 { + struct pci_pwrctrl pwrctrl; struct regulator_bulk_data supplies[TC9563_PWRCTL_MAX_SUPPLY]; struct tc9563_pwrctrl_cfg cfg[TC9563_MAX]; struct gpio_desc *reset_gpio; struct i2c_adapter *adapter; struct i2c_client *client; - struct pci_pwrctrl pwrctrl; }; =20 /* @@ -231,10 +231,10 @@ static int tc9563_pwrctrl_i2c_bulk_write(struct i2c_c= lient *client, return 0; } =20 -static int tc9563_pwrctrl_disable_port(struct tc9563_pwrctrl_ctx *ctx, +static int tc9563_pwrctrl_disable_port(struct pci_pwrctrl_tc9563 *tc9563, enum tc9563_pwrctrl_ports port) { - struct tc9563_pwrctrl_cfg *cfg =3D &ctx->cfg[port]; + struct tc9563_pwrctrl_cfg *cfg =3D &tc9563->cfg[port]; const struct tc9563_pwrctrl_reg_setting *seq; int ret, len; =20 @@ -249,15 +249,15 @@ static int tc9563_pwrctrl_disable_port(struct tc9563_= pwrctrl_ctx *ctx, len =3D ARRAY_SIZE(dsp2_pwroff_seq); } =20 - ret =3D tc9563_pwrctrl_i2c_bulk_write(ctx->client, seq, len); + ret =3D tc9563_pwrctrl_i2c_bulk_write(tc9563->client, seq, len); if (ret) return ret; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, common_pwroff_seq, + return tc9563_pwrctrl_i2c_bulk_write(tc9563->client, common_pwroff_seq, ARRAY_SIZE(common_pwroff_seq)); } =20 -static int tc9563_pwrctrl_set_l0s_l1_entry_delay(struct tc9563_pwrctrl_ctx= *ctx, +static int tc9563_pwrctrl_set_l0s_l1_entry_delay(struct pci_pwrctrl_tc9563= *tc9563, enum tc9563_pwrctrl_ports port, bool is_l1, u32 ns) { @@ -271,7 +271,7 @@ static int tc9563_pwrctrl_set_l0s_l1_entry_delay(struct= tc9563_pwrctrl_ctx *ctx, units =3D ns / TC9563_L0S_L1_DELAY_UNIT_NS; =20 if (port =3D=3D TC9563_ETHERNET) { - ret =3D tc9563_pwrctrl_i2c_read(ctx->client, + ret =3D tc9563_pwrctrl_i2c_read(tc9563->client, TC9563_EMBEDDED_ETH_DELAY, &rd_val); if (ret) @@ -284,25 +284,25 @@ static int tc9563_pwrctrl_set_l0s_l1_entry_delay(stru= ct tc9563_pwrctrl_ctx *ctx, rd_val =3D u32_replace_bits(rd_val, units, TC9563_ETH_L0S_DELAY_MASK); =20 - return tc9563_pwrctrl_i2c_write(ctx->client, + return tc9563_pwrctrl_i2c_write(tc9563->client, TC9563_EMBEDDED_ETH_DELAY, rd_val); } =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, + ret =3D tc9563_pwrctrl_i2c_write(tc9563->client, TC9563_PORT_SELECT, BIT(port)); if (ret) return ret; =20 - return tc9563_pwrctrl_i2c_write(ctx->client, + return tc9563_pwrctrl_i2c_write(tc9563->client, is_l1 ? TC9563_PORT_L1_DELAY : TC9563_PORT_L0S_DELAY, units); } =20 -static int tc9563_pwrctrl_set_tx_amplitude(struct tc9563_pwrctrl_ctx *ctx, +static int tc9563_pwrctrl_set_tx_amplitude(struct pci_pwrctrl_tc9563 *tc95= 63, enum tc9563_pwrctrl_ports port) { - u32 amp =3D ctx->cfg[port].tx_amp; + u32 amp =3D tc9563->cfg[port].tx_amp; int port_access; =20 if (amp < TC9563_TX_MARGIN_MIN_UA) @@ -331,14 +331,14 @@ static int tc9563_pwrctrl_set_tx_amplitude(struct tc9= 563_pwrctrl_ctx *ctx, {TC9563_TX_MARGIN, amp}, }; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, tx_amp_seq, + return tc9563_pwrctrl_i2c_bulk_write(tc9563->client, tx_amp_seq, ARRAY_SIZE(tx_amp_seq)); } =20 -static int tc9563_pwrctrl_disable_dfe(struct tc9563_pwrctrl_ctx *ctx, +static int tc9563_pwrctrl_disable_dfe(struct pci_pwrctrl_tc9563 *tc9563, enum tc9563_pwrctrl_ports port) { - struct tc9563_pwrctrl_cfg *cfg =3D &ctx->cfg[port]; + struct tc9563_pwrctrl_cfg *cfg =3D &tc9563->cfg[port]; int port_access, lane_access =3D 0x3; u32 phy_rate =3D 0x21; =20 @@ -375,14 +375,14 @@ static int tc9563_pwrctrl_disable_dfe(struct tc9563_p= wrctrl_ctx *ctx, {TC9563_PHY_RATE_CHANGE_OVERRIDE, 0x0}, }; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, disable_dfe_seq, + return tc9563_pwrctrl_i2c_bulk_write(tc9563->client, disable_dfe_seq, ARRAY_SIZE(disable_dfe_seq)); } =20 -static int tc9563_pwrctrl_set_nfts(struct tc9563_pwrctrl_ctx *ctx, +static int tc9563_pwrctrl_set_nfts(struct pci_pwrctrl_tc9563 *tc9563, enum tc9563_pwrctrl_ports port) { - u8 *nfts =3D ctx->cfg[port].nfts; + u8 *nfts =3D tc9563->cfg[port].nfts; struct tc9563_pwrctrl_reg_setting nfts_seq[] =3D { {TC9563_NFTS_2_5_GT, nfts[0]}, {TC9563_NFTS_5_GT, nfts[1]}, @@ -392,35 +392,35 @@ static int tc9563_pwrctrl_set_nfts(struct tc9563_pwrc= trl_ctx *ctx, if (!nfts[0]) return 0; =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_PORT_SELECT, + ret =3D tc9563_pwrctrl_i2c_write(tc9563->client, TC9563_PORT_SELECT, BIT(port)); if (ret) return ret; =20 - return tc9563_pwrctrl_i2c_bulk_write(ctx->client, nfts_seq, + return tc9563_pwrctrl_i2c_bulk_write(tc9563->client, nfts_seq, ARRAY_SIZE(nfts_seq)); } =20 -static int tc9563_pwrctrl_assert_deassert_reset(struct tc9563_pwrctrl_ctx = *ctx, +static int tc9563_pwrctrl_assert_deassert_reset(struct pci_pwrctrl_tc9563 = *tc9563, bool deassert) { int ret, val; =20 - ret =3D tc9563_pwrctrl_i2c_write(ctx->client, TC9563_GPIO_CONFIG, + ret =3D tc9563_pwrctrl_i2c_write(tc9563->client, TC9563_GPIO_CONFIG, TC9563_GPIO_MASK); if (ret) return ret; =20 val =3D deassert ? TC9563_GPIO_DEASSERT_BITS : 0; =20 - return tc9563_pwrctrl_i2c_write(ctx->client, TC9563_RESET_GPIO, val); + return tc9563_pwrctrl_i2c_write(tc9563->client, TC9563_RESET_GPIO, val); } =20 -static int tc9563_pwrctrl_parse_device_dt(struct tc9563_pwrctrl_ctx *ctx, +static int tc9563_pwrctrl_parse_device_dt(struct pci_pwrctrl_tc9563 *tc956= 3, struct device_node *node, enum tc9563_pwrctrl_ports port) { - struct tc9563_pwrctrl_cfg *cfg =3D &ctx->cfg[port]; + struct tc9563_pwrctrl_cfg *cfg =3D &tc9563->cfg[port]; int ret; =20 /* Disable port if the status of the port is disabled. */ @@ -450,76 +450,77 @@ static int tc9563_pwrctrl_parse_device_dt(struct tc95= 63_pwrctrl_ctx *ctx, return 0; } =20 -static void tc9563_pwrctrl_power_off(struct tc9563_pwrctrl_ctx *ctx) +static void tc9563_pwrctrl_power_off(struct pci_pwrctrl_tc9563 *tc9563) { - gpiod_set_value(ctx->reset_gpio, 1); + gpiod_set_value(tc9563->reset_gpio, 1); =20 - regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + regulator_bulk_disable(ARRAY_SIZE(tc9563->supplies), tc9563->supplies); } =20 -static int tc9563_pwrctrl_bring_up(struct tc9563_pwrctrl_ctx *ctx) +static int tc9563_pwrctrl_bring_up(struct pci_pwrctrl_tc9563 *tc9563) { - struct device *dev =3D ctx->pwrctrl.dev; + struct device *dev =3D tc9563->pwrctrl.dev; struct tc9563_pwrctrl_cfg *cfg; int ret, i; =20 - ret =3D regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + ret =3D regulator_bulk_enable(ARRAY_SIZE(tc9563->supplies), + tc9563->supplies); if (ret < 0) return dev_err_probe(dev, ret, "cannot enable regulators\n"); =20 - gpiod_set_value(ctx->reset_gpio, 0); + gpiod_set_value(tc9563->reset_gpio, 0); =20 fsleep(TC9563_OSC_STAB_DELAY_US); =20 - ret =3D tc9563_pwrctrl_assert_deassert_reset(ctx, false); + ret =3D tc9563_pwrctrl_assert_deassert_reset(tc9563, false); if (ret) goto power_off; =20 for (i =3D 0; i < TC9563_MAX; i++) { - cfg =3D &ctx->cfg[i]; - ret =3D tc9563_pwrctrl_disable_port(ctx, i); + cfg =3D &tc9563->cfg[i]; + ret =3D tc9563_pwrctrl_disable_port(tc9563, i); if (ret) { dev_err(dev, "Disabling port failed\n"); goto power_off; } =20 - ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(ctx, i, false, cfg->l0s_de= lay); + ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(tc9563, i, false, cfg->l0s= _delay); if (ret) { dev_err(dev, "Setting L0s entry delay failed\n"); goto power_off; } =20 - ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(ctx, i, true, cfg->l1_dela= y); + ret =3D tc9563_pwrctrl_set_l0s_l1_entry_delay(tc9563, i, true, cfg->l1_d= elay); if (ret) { dev_err(dev, "Setting L1 entry delay failed\n"); goto power_off; } =20 - ret =3D tc9563_pwrctrl_set_tx_amplitude(ctx, i); + ret =3D tc9563_pwrctrl_set_tx_amplitude(tc9563, i); if (ret) { dev_err(dev, "Setting Tx amplitude failed\n"); goto power_off; } =20 - ret =3D tc9563_pwrctrl_set_nfts(ctx, i); + ret =3D tc9563_pwrctrl_set_nfts(tc9563, i); if (ret) { dev_err(dev, "Setting N_FTS failed\n"); goto power_off; } =20 - ret =3D tc9563_pwrctrl_disable_dfe(ctx, i); + ret =3D tc9563_pwrctrl_disable_dfe(tc9563, i); if (ret) { dev_err(dev, "Disabling DFE failed\n"); goto power_off; } } =20 - ret =3D tc9563_pwrctrl_assert_deassert_reset(ctx, true); + ret =3D tc9563_pwrctrl_assert_deassert_reset(tc9563, true); if (!ret) return 0; =20 power_off: - tc9563_pwrctrl_power_off(ctx); + tc9563_pwrctrl_power_off(tc9563); return ret; } =20 @@ -530,12 +531,12 @@ static int tc9563_pwrctrl_probe(struct platform_devic= e *pdev) struct pci_bus *bus =3D bridge->bus; struct device *dev =3D &pdev->dev; enum tc9563_pwrctrl_ports port; - struct tc9563_pwrctrl_ctx *ctx; + struct pci_pwrctrl_tc9563 *tc9563; struct device_node *i2c_node; int ret, addr; =20 - ctx =3D devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); - if (!ctx) + tc9563 =3D devm_kzalloc(dev, sizeof(*tc9563), GFP_KERNEL); + if (!tc9563) return -ENOMEM; =20 ret =3D of_property_read_u32_index(node, "i2c-parent", 1, &addr); @@ -543,38 +544,38 @@ static int tc9563_pwrctrl_probe(struct platform_devic= e *pdev) return dev_err_probe(dev, ret, "Failed to read i2c-parent property\n"); =20 i2c_node =3D of_parse_phandle(dev->of_node, "i2c-parent", 0); - ctx->adapter =3D of_find_i2c_adapter_by_node(i2c_node); + tc9563->adapter =3D of_find_i2c_adapter_by_node(i2c_node); of_node_put(i2c_node); - if (!ctx->adapter) + if (!tc9563->adapter) return dev_err_probe(dev, -EPROBE_DEFER, "Failed to find I2C adapter\n"); =20 - ctx->client =3D i2c_new_dummy_device(ctx->adapter, addr); - if (IS_ERR(ctx->client)) { + tc9563->client =3D i2c_new_dummy_device(tc9563->adapter, addr); + if (IS_ERR(tc9563->client)) { dev_err(dev, "Failed to create I2C client\n"); - put_device(&ctx->adapter->dev); - return PTR_ERR(ctx->client); + put_device(&tc9563->adapter->dev); + return PTR_ERR(tc9563->client); } =20 for (int i =3D 0; i < ARRAY_SIZE(tc9563_supply_names); i++) - ctx->supplies[i].supply =3D tc9563_supply_names[i]; + tc9563->supplies[i].supply =3D tc9563_supply_names[i]; =20 ret =3D devm_regulator_bulk_get(dev, TC9563_PWRCTL_MAX_SUPPLY, - ctx->supplies); + tc9563->supplies); if (ret) { dev_err_probe(dev, ret, "failed to get supply regulator\n"); goto remove_i2c; } =20 - ctx->reset_gpio =3D devm_gpiod_get(dev, "resx", GPIOD_OUT_HIGH); - if (IS_ERR(ctx->reset_gpio)) { - ret =3D dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), "failed to get resx= GPIO\n"); + tc9563->reset_gpio =3D devm_gpiod_get(dev, "resx", GPIOD_OUT_HIGH); + if (IS_ERR(tc9563->reset_gpio)) { + ret =3D dev_err_probe(dev, PTR_ERR(tc9563->reset_gpio), "failed to get r= esx GPIO\n"); goto remove_i2c; } =20 - pci_pwrctrl_init(&ctx->pwrctrl, dev); + pci_pwrctrl_init(&tc9563->pwrctrl, dev); =20 port =3D TC9563_USP; - ret =3D tc9563_pwrctrl_parse_device_dt(ctx, node, port); + ret =3D tc9563_pwrctrl_parse_device_dt(tc9563, node, port); if (ret) { dev_err(dev, "failed to parse device tree properties: %d\n", ret); goto remove_i2c; @@ -587,14 +588,14 @@ static int tc9563_pwrctrl_probe(struct platform_devic= e *pdev) */ for_each_child_of_node_scoped(node, child) { port++; - ret =3D tc9563_pwrctrl_parse_device_dt(ctx, child, port); + ret =3D tc9563_pwrctrl_parse_device_dt(tc9563, child, port); if (ret) break; /* Embedded ethernet device are under DSP3 */ if (port =3D=3D TC9563_DSP3) { for_each_child_of_node_scoped(child, child1) { port++; - ret =3D tc9563_pwrctrl_parse_device_dt(ctx, + ret =3D tc9563_pwrctrl_parse_device_dt(tc9563, child1, port); if (ret) break; @@ -612,7 +613,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) goto remove_i2c; } =20 - ret =3D tc9563_pwrctrl_bring_up(ctx); + ret =3D tc9563_pwrctrl_bring_up(tc9563); if (ret) goto remove_i2c; =20 @@ -622,29 +623,29 @@ static int tc9563_pwrctrl_probe(struct platform_devic= e *pdev) goto power_off; } =20 - ret =3D devm_pci_pwrctrl_device_set_ready(dev, &ctx->pwrctrl); + ret =3D devm_pci_pwrctrl_device_set_ready(dev, &tc9563->pwrctrl); if (ret) goto power_off; =20 - platform_set_drvdata(pdev, ctx); + platform_set_drvdata(pdev, tc9563); =20 return 0; =20 power_off: - tc9563_pwrctrl_power_off(ctx); + tc9563_pwrctrl_power_off(tc9563); remove_i2c: - i2c_unregister_device(ctx->client); - put_device(&ctx->adapter->dev); + i2c_unregister_device(tc9563->client); + put_device(&tc9563->adapter->dev); return ret; } =20 static void tc9563_pwrctrl_remove(struct platform_device *pdev) { - struct tc9563_pwrctrl_ctx *ctx =3D platform_get_drvdata(pdev); + struct pci_pwrctrl_tc9563 *tc9563 =3D platform_get_drvdata(pdev); =20 - tc9563_pwrctrl_power_off(ctx); - i2c_unregister_device(ctx->client); - put_device(&ctx->adapter->dev); + tc9563_pwrctrl_power_off(tc9563); + i2c_unregister_device(tc9563->client); + put_device(&tc9563->adapter->dev); } =20 static const struct of_device_id tc9563_pwrctrl_of_match[] =3D { --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 25729329C7E; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=loY0fozE+9spgtcVFwmo/1iKZs8GXKdAWGiK7mOBZQl4f3txzbqLgvuGcDnAP2CGmOoMhFLWmmkJ/reKt8bB1EmO694THyuxMKUpW6eY2B4yxybL30BlTn093YB3I8eQ7VKURz+ozkOeGHg71N8hW/VlKPPS4ZbxZ/gQKjuxqDI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=uCZyGA2rj51LYEQkiiY324zDGBhUBjiiDmOIm8qk0+k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ssDQ2hznrGodbAp+6RkzUZ1me2bkyWOGS668Uz3OtluqQguviL4FC3KVKfIrirJKrh5m8UgXIGyrq2+a4X9BcapxUQ1BHqD28YGWQwpxWf2s6yoHyqgv+zwmneh1PbLfP+PnctGzgc2N8naYkG/m1gTxqthGZnEEr1nXbtYkFCs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ibrOAMTI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ibrOAMTI" Received: by smtp.kernel.org (Postfix) with ESMTPS id AFACCC2BCAF; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=uCZyGA2rj51LYEQkiiY324zDGBhUBjiiDmOIm8qk0+k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ibrOAMTIk1GNu4YnTMg0P/MI5Dhqr8LoKF+kV2E8LvWduQ8Gj+wojkruumjAVp+RC 7jVh+V+/Ckm0j5hw7ZGED4LxU6eMn8Cb1eFPTmYfk907zmG2vf3IigaZTUS/aMoJN9 EW/9YP9ORqN9c1224NcJ+FRy8Y8qfTTO3tOOscqo2GPcdfW0v9lWZ4dHcfIZxX55mD YtQWPaTr8gGt1NCbR1CJ1pZTicLjZiheGSryUyz4Tc+mQgV2Xhi6f5AJZf0fwaLpvc 5ihAe5g0U4pB9RPaN8GteMdmioea+tZBN/UI8s8PU2tIWzaXg3kwTprSOO6pSJqUkq Ye2MfPfwpkSIg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7C35D3CCBE; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:58:59 +0530 Subject: [PATCH v5 07/15] PCI/pwrctrl: slot: Factor out power on/off code to helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-7-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2990; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=07P0XaSjsiTGjrvp6TvDoXT8i9vHCPaPhJUm8tU3mqw=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdBfKkjKhqbNYu+PfvSiPL+Tf7KgumdswJHu afvm0WDU9+JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQQAKCRBVnxHm/pHO 9VezB/0dkWi9FcYkQhbWq9qAYA64hxZsy6mDqFh7ROFgS04OVk5s4WYR3jGxqDjwtR9XO1brYym yK83n+EV7t62tZC/ojYWggCrz2uqRgGPwQVC3xPJiw970kVvZJbGAICJx32vqKbAcjJRK2rA130 PPmHn1Aw5w/ky/hjBYKnNj19fDRZZVvwRiu9UJqCAbI6z3lrlzwYOx92/OeEBNpbV3y41LmrT53 uyNi3BPmPqS85UcEHGApNcIVUiFtRm5B9Pvi1BLNWxf9B729O/HfNXcpEzcik+9aGdBKZe3cMrR 39JhKzaeGciYGgcyQDfr8SfztQQFh3H/wcP9fKpZygtCIqYD X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam In order to allow the pwrctrl core to control the power on/off logic of the pwrctrl slot driver, move the power on/off code to pci_pwrctrl_slot_power_{off/on} helper functions. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/slot.c | 49 +++++++++++++++++++++++++++++++++---------= ---- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/drivers/pci/pwrctrl/slot.c b/drivers/pci/pwrctrl/slot.c index 5ddae4ae3431..5d0ec880c0ec 100644 --- a/drivers/pci/pwrctrl/slot.c +++ b/drivers/pci/pwrctrl/slot.c @@ -17,13 +17,40 @@ struct pci_pwrctrl_slot { struct pci_pwrctrl pwrctrl; struct regulator_bulk_data *supplies; int num_supplies; + struct clk *clk; }; =20 -static void devm_pci_pwrctrl_slot_power_off(void *data) +static int pci_pwrctrl_slot_power_on(struct pci_pwrctrl *pwrctrl) { - struct pci_pwrctrl_slot *slot =3D data; + struct pci_pwrctrl_slot *slot =3D container_of(pwrctrl, + struct pci_pwrctrl_slot, pwrctrl); + int ret; + + ret =3D regulator_bulk_enable(slot->num_supplies, slot->supplies); + if (ret < 0) { + dev_err(slot->pwrctrl.dev, "Failed to enable slot regulators\n"); + return ret; + } + + return clk_prepare_enable(slot->clk); +} + +static int pci_pwrctrl_slot_power_off(struct pci_pwrctrl *pwrctrl) +{ + struct pci_pwrctrl_slot *slot =3D container_of(pwrctrl, + struct pci_pwrctrl_slot, pwrctrl); =20 regulator_bulk_disable(slot->num_supplies, slot->supplies); + clk_disable_unprepare(slot->clk); + + return 0; +} + +static void devm_pci_pwrctrl_slot_release(void *data) +{ + struct pci_pwrctrl_slot *slot =3D data; + + pci_pwrctrl_slot_power_off(&slot->pwrctrl); regulator_bulk_free(slot->num_supplies, slot->supplies); } =20 @@ -31,7 +58,6 @@ static int pci_pwrctrl_slot_probe(struct platform_device = *pdev) { struct pci_pwrctrl_slot *slot; struct device *dev =3D &pdev->dev; - struct clk *clk; int ret; =20 slot =3D devm_kzalloc(dev, sizeof(*slot), GFP_KERNEL); @@ -46,23 +72,18 @@ static int pci_pwrctrl_slot_probe(struct platform_devic= e *pdev) } =20 slot->num_supplies =3D ret; - ret =3D regulator_bulk_enable(slot->num_supplies, slot->supplies); - if (ret < 0) { - dev_err_probe(dev, ret, "Failed to enable slot regulators\n"); - regulator_bulk_free(slot->num_supplies, slot->supplies); - return ret; - } =20 - ret =3D devm_add_action_or_reset(dev, devm_pci_pwrctrl_slot_power_off, + ret =3D devm_add_action_or_reset(dev, devm_pci_pwrctrl_slot_release, slot); if (ret) return ret; =20 - clk =3D devm_clk_get_optional_enabled(dev, NULL); - if (IS_ERR(clk)) { - return dev_err_probe(dev, PTR_ERR(clk), + slot->clk =3D devm_clk_get_optional(dev, NULL); + if (IS_ERR(slot->clk)) + return dev_err_probe(dev, PTR_ERR(slot->clk), "Failed to enable slot clock\n"); - } + + pci_pwrctrl_slot_power_on(&slot->pwrctrl); =20 pci_pwrctrl_init(&slot->pwrctrl, dev); =20 --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3977532A3EC; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=IgaHmImPFy8h5YqM3Pqy8T13MD5BTjASBHAyPP6q0hT01kbWBuAlQKWmLRneqGRBa9mGO2XSpwgYTmARvTNy9tbe4w2cDn1J028hKXgPfA9U7CwPR5Ug4K7/bXgYnifmdrVf3zZugTaZcJ86EgrxlNN79sY6Uw2vp1h9XgZ6wUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=SE57ZO376JEaiHrQbVaxGZM+k0OKXQjv5b4dTULQ9PA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lmQZO5ULIWveP9SDw2h3Ohitryzp22B7BtoekqHi7l5Xis++Ify4A/rrt5ooXAxCZ4op7ZdP3Znl9oR3Isoyf12gNTyNXbCc3hJAWqaIk5lfuwMPob0X3DAAdCfXH95KgY+K9d39EP9QXB/+PDkOZTDmTm3BLA8kGJMNtKnNj/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=byAYKz7d; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="byAYKz7d" Received: by smtp.kernel.org (Postfix) with ESMTPS id BCDADC2BD04; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=SE57ZO376JEaiHrQbVaxGZM+k0OKXQjv5b4dTULQ9PA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=byAYKz7dFJ8jm/eAt5hmeDDm2qrfLq/5WnNL2iAr33n9SKmY5EFQQ5INPo5OPxdmx z4DIjeZRrwatxBeClQmlp1qut4I/jcwD5G9Lt3l/CFrHeqd4JYq8ijDQmRSGq39b3+ hfilmccRByBfrVDIxjVLV0ANdcrS2ufhblXCvdpbzBpL18YHodNdG314p4ST76U3lW GJBLrq6lZ2FZqv5r/2NVdSvTMg1XxuN5hKHg59A2TUEnk4lhELnso8yZsU9hpI3Q7U wTZZbQsbOp5+Du6wyjh/xb77oLRpR7MNrKO8GO8A0wcZ50Jsvf4JEnd7mNJBa6WUjF 1tkde2LFpOD3w== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5D58D3CCB8; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:00 +0530 Subject: [PATCH v5 08/15] PCI/pwrctrl: pwrseq: Factor out power on/off code to helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-8-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2150; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=JHrbYm0MBMvXv/ITz+NZpdT3DemZUsxJlhMJ+bLoqgI=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdCLg0hv0wiCQQY+RrdABbaInR/UH4Tr6q28 Rz0i3rRUlGJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9WZqCACp7B8c29oI68xxUbwuzdig4zsUerAKiA8nHS4Sss8isxZkq1Zwa3ciXn7YroEnovDGY+/ WsVPO0oyACmZi8mM5BsU3ieMxX9aG2clktFWzaQxMDHRTxs4L7rlGOAErWta1LPlOdJ49XuJJ96 5+E5iEnSjSX1l1axWfZPNDq+a9uRy6LeLc/rj7qeGAoMcb6CCyHfm0pb7Gqdyh33RzK6jtllZ59 4IG+6HU/gVCk9ggO2LfDX6k8y5a26+bqxQXYOGWeFuzcMakn7rjDQ9T1C0otSNo1SmL0HjtfP12 tiDPPOQxtL0iyof5EGTy5MpQygd0EUUL1S+3Wa2VEizBZG8D X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam In order to allow the pwrctrl core to control the power on/off logic of the pwrctrl pwrseq driver, move the power on/off code to pci_pwrctrl_pwrseq_power_{off/on} helper functions. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c b/drivers/pci/pwrctrl= /pci-pwrctrl-pwrseq.c index c0d22dc3a856..d2c261b09030 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c @@ -52,11 +52,27 @@ static const struct pci_pwrctrl_pwrseq_pdata pci_pwrctr= l_pwrseq_qcom_wcn_pdata =3D .validate_device =3D pci_pwrctrl_pwrseq_qcm_wcn_validate_device, }; =20 +static int pci_pwrctrl_pwrseq_power_on(struct pci_pwrctrl *pwrctrl) +{ + struct pci_pwrctrl_pwrseq *pwrseq =3D container_of(pwrctrl, + struct pci_pwrctrl_pwrseq, pwrctrl); + + return pwrseq_power_on(pwrseq->pwrseq); +} + +static int pci_pwrctrl_pwrseq_power_off(struct pci_pwrctrl *pwrctrl) +{ + struct pci_pwrctrl_pwrseq *pwrseq =3D container_of(pwrctrl, + struct pci_pwrctrl_pwrseq, pwrctrl); + + return pwrseq_power_off(pwrseq->pwrseq); +} + static void devm_pci_pwrctrl_pwrseq_power_off(void *data) { - struct pwrseq_desc *pwrseq =3D data; + struct pci_pwrctrl_pwrseq *pwrseq =3D data; =20 - pwrseq_power_off(pwrseq); + pci_pwrctrl_pwrseq_power_off(&pwrseq->pwrctrl); } =20 static int pci_pwrctrl_pwrseq_probe(struct platform_device *pdev) @@ -85,13 +101,13 @@ static int pci_pwrctrl_pwrseq_probe(struct platform_de= vice *pdev) return dev_err_probe(dev, PTR_ERR(pwrseq->pwrseq), "Failed to get the power sequencer\n"); =20 - ret =3D pwrseq_power_on(pwrseq->pwrseq); + ret =3D pci_pwrctrl_pwrseq_power_on(&pwrseq->pwrctrl); if (ret) return dev_err_probe(dev, ret, "Failed to power-on the device\n"); =20 ret =3D devm_add_action_or_reset(dev, devm_pci_pwrctrl_pwrseq_power_off, - pwrseq->pwrseq); + pwrseq); if (ret) return ret; =20 --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4873432AAD8; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=drJK/MYMPlTppWpgxQwxSKWHxBqxr3BE0RbxI7UFJC2ImJVjYSD60oXY3ESDBNSOgdeVGqKIhhRZCK9GHCbn/XdXAccBUJz/q1L3NirmB25vi9JdRCk3EAZk1ceORjDRQwa5Ltb2C7my5lJQvrcrHYQbU+n9EvQG2eARyefFIH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=01E+i9Us2E9ILdSDTiieQTUBKQo53xWamkscB0dm/mY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rvxRgrWT0SU1Wxzi0gLEihroBAu+qHTnYThl3LEmuJUzQnFmJvrfa+JD4qPmA2YzEvfLsoeG0N0g/l/Y0y0VjSyP5VJPWtYbuzAoQpwsGoyCjkwUKHI9gOJdgrZAiD3R0k1wO4ViM8o93dx/yBPEkJyNGtah6+hdbl9i/PmHo+s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZEit5xpn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZEit5xpn" Received: by smtp.kernel.org (Postfix) with ESMTPS id CE0C1C4AF61; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=01E+i9Us2E9ILdSDTiieQTUBKQo53xWamkscB0dm/mY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ZEit5xpnbF96f94QlNDsMwkqjmdOd6Mf0hz4RXyb4TG0YxLYb96j3j+WUL0N8aAJ4 mehRv0XJdmi8uvhSYNH8SZTXTFhQ3KL+Mepi9+iQQWWjbrnMcs2s6JkddV9TzCFQ2D /n7IbutPMS3ZA/pwU0Xzc2HAQE7NC7pqbHTe0xsn3+1r3sNeGy/JbhR3aobOFQaMWk vtiKKT0E1q7BpQomIPdI4kFm9KdY7MiXfF2Qlixdyp2U5DSeg5YkUb8YEgttel38xH h6PvF/WZ82plfAugHRoA9Tq7Aj49AVu3FFu7jycAWsoV+C9/oMkW/22Oq0Df+0aLwR vAPmWIgEzO0kQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3B9CD3CCB3; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:01 +0530 Subject: [PATCH v5 09/15] PCI/pwrctrl: Add 'struct pci_pwrctrl::power_{on/off}' callbacks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-9-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam , Chen-Yu Tsai X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5551; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=cgHzIAEsgNpOwxTB3hHxgFQ6227n1CTcovLsMGKsXc0=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdCbwbZM/FEGqymRB6MoAXpaH0pdHnNTUxeQ Uif4gdfT3KJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9bnJB/wLlc37LesynXGPEY5Ry+XMkojfF3H/PaxNUzuvl94aOx28ZpDzr129LG5bN5iAcAmHnlY y4f/PEgIih9L+ueK4E236iIOB7Y9Bew5LtOWTidP4YQ8YNXD4PsvDDygmDtnTfQdQPm2hRRApoM mHu9F/ZgVdhsdUIZNl2fGe92783XW9EFogjBbWSd7bXaAHoCm5ZrIib4drXQoE/nm/lizaIVN0N cNHSquxsyxJFhzv9gkTk7AYI+nWAS2cAH88Klc1fl+I6gyble1QrLajqM/mD9N90r6ReoNix3RY lwTnEb3jF3HNYxGN6G4S5rg9cRaJUMfrXirN7bQFJ7IJJGQ0 X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam To allow the pwrctrl core to control the power on/off sequences of the pwrctrl drivers, add the 'struct pci_pwrctrl::power_{on/off}' callbacks and populate them in the respective pwrctrl drivers. The pwrctrl drivers still power on the resources on their own now. So there is no functional change. Co-developed-by: Krishna Chaitanya Chundru Signed-off-by: Krishna Chaitanya Chundru Signed-off-by: Manivannan Sadhasivam Signed-off-by: Bjorn Helgaas Tested-by: Chen-Yu Tsai Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 3 +++ drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 22 ++++++++++++++++------ drivers/pci/pwrctrl/slot.c | 3 +++ include/linux/pci-pwrctrl.h | 4 ++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c b/drivers/pci/pwrctrl= /pci-pwrctrl-pwrseq.c index d2c261b09030..2ee02edd55a3 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c @@ -111,6 +111,9 @@ static int pci_pwrctrl_pwrseq_probe(struct platform_dev= ice *pdev) if (ret) return ret; =20 + pwrseq->pwrctrl.power_on =3D pci_pwrctrl_pwrseq_power_on; + pwrseq->pwrctrl.power_off =3D pci_pwrctrl_pwrseq_power_off; + pci_pwrctrl_init(&pwrseq->pwrctrl, dev); =20 ret =3D devm_pci_pwrctrl_device_set_ready(dev, &pwrseq->pwrctrl); diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index 8ae27abdf362..a71d7ef2d4b8 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -450,15 +450,22 @@ static int tc9563_pwrctrl_parse_device_dt(struct pci_= pwrctrl_tc9563 *tc9563, return 0; } =20 -static void tc9563_pwrctrl_power_off(struct pci_pwrctrl_tc9563 *tc9563) +static int tc9563_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl) { + struct pci_pwrctrl_tc9563 *tc9563 =3D container_of(pwrctrl, + struct pci_pwrctrl_tc9563, pwrctrl); + gpiod_set_value(tc9563->reset_gpio, 1); =20 regulator_bulk_disable(ARRAY_SIZE(tc9563->supplies), tc9563->supplies); + + return 0; } =20 -static int tc9563_pwrctrl_bring_up(struct pci_pwrctrl_tc9563 *tc9563) +static int tc9563_pwrctrl_power_on(struct pci_pwrctrl *pwrctrl) { + struct pci_pwrctrl_tc9563 *tc9563 =3D container_of(pwrctrl, + struct pci_pwrctrl_tc9563, pwrctrl); struct device *dev =3D tc9563->pwrctrl.dev; struct tc9563_pwrctrl_cfg *cfg; int ret, i; @@ -520,7 +527,7 @@ static int tc9563_pwrctrl_bring_up(struct pci_pwrctrl_t= c9563 *tc9563) return 0; =20 power_off: - tc9563_pwrctrl_power_off(tc9563); + tc9563_pwrctrl_power_off(&tc9563->pwrctrl); return ret; } =20 @@ -613,7 +620,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) goto remove_i2c; } =20 - ret =3D tc9563_pwrctrl_bring_up(tc9563); + ret =3D tc9563_pwrctrl_power_on(&tc9563->pwrctrl); if (ret) goto remove_i2c; =20 @@ -623,6 +630,9 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) goto power_off; } =20 + tc9563->pwrctrl.power_on =3D tc9563_pwrctrl_power_on; + tc9563->pwrctrl.power_off =3D tc9563_pwrctrl_power_off; + ret =3D devm_pci_pwrctrl_device_set_ready(dev, &tc9563->pwrctrl); if (ret) goto power_off; @@ -632,7 +642,7 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) return 0; =20 power_off: - tc9563_pwrctrl_power_off(tc9563); + tc9563_pwrctrl_power_off(&tc9563->pwrctrl); remove_i2c: i2c_unregister_device(tc9563->client); put_device(&tc9563->adapter->dev); @@ -643,7 +653,7 @@ static void tc9563_pwrctrl_remove(struct platform_devic= e *pdev) { struct pci_pwrctrl_tc9563 *tc9563 =3D platform_get_drvdata(pdev); =20 - tc9563_pwrctrl_power_off(tc9563); + tc9563_pwrctrl_power_off(&tc9563->pwrctrl); i2c_unregister_device(tc9563->client); put_device(&tc9563->adapter->dev); } diff --git a/drivers/pci/pwrctrl/slot.c b/drivers/pci/pwrctrl/slot.c index 5d0ec880c0ec..55828aec2486 100644 --- a/drivers/pci/pwrctrl/slot.c +++ b/drivers/pci/pwrctrl/slot.c @@ -85,6 +85,9 @@ static int pci_pwrctrl_slot_probe(struct platform_device = *pdev) =20 pci_pwrctrl_slot_power_on(&slot->pwrctrl); =20 + slot->pwrctrl.power_on =3D pci_pwrctrl_slot_power_on; + slot->pwrctrl.power_off =3D pci_pwrctrl_slot_power_off; + pci_pwrctrl_init(&slot->pwrctrl, dev); =20 ret =3D devm_pci_pwrctrl_device_set_ready(dev, &slot->pwrctrl); diff --git a/include/linux/pci-pwrctrl.h b/include/linux/pci-pwrctrl.h index 4aefc7901cd1..435b822c841e 100644 --- a/include/linux/pci-pwrctrl.h +++ b/include/linux/pci-pwrctrl.h @@ -31,6 +31,8 @@ struct device_link; /** * struct pci_pwrctrl - PCI device power control context. * @dev: Address of the power controlling device. + * @power_on: Callback to power on the power controlling device. + * @power_off: Callback to power off the power controlling device. * * An object of this type must be allocated by the PCI power control devic= e and * passed to the pwrctrl subsystem to trigger a bus rescan and setup a dev= ice @@ -38,6 +40,8 @@ struct device_link; */ struct pci_pwrctrl { struct device *dev; + int (*power_on)(struct pci_pwrctrl *pwrctrl); + int (*power_off)(struct pci_pwrctrl *pwrctrl); =20 /* private: internal use only */ struct notifier_block nb; --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FF2E32AADB; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=ijbQByOetZeX6ELHGRDLStQOHosbYZf24Vj5AVyZy1qofP2TUjmNRJ/N81zFrf82RDDEKeT0r8nSewTFa9gNkSTiAwePWW/qGUEzkcmyF53WkZPCjoGvDX9KcJbBpbZA543IN/kzdrTY4gDF5WJfHfVv+CaiY2470vMQj5NL8mg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=mOJnKgtNcAObnpi6601dL+oH8Pj+/qmWfKgQlqUjZt0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KTUC77+Mw0gbti8xnwjBCvuLMykFCJyzLhdOR6vSQhuQPJuHseqUP14OKPPisu0FN7G+ZwEEAky9h4+OZ/5H8yhCMP8iyfBQeb5ndnAeMSG2g9Mz6LY24s1yY8eU6qy3j1jOF1wne6UeM7jbFhw83hdmvAzU5TYOwHPQGTXY6fA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Dmu+H+gI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Dmu+H+gI" Received: by smtp.kernel.org (Postfix) with ESMTPS id D9417C19424; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462151; bh=mOJnKgtNcAObnpi6601dL+oH8Pj+/qmWfKgQlqUjZt0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Dmu+H+gISxb1jkW5rgONHkLEebGLTHRml2iX0Y2aoFR/KYivx9s2C6TYBJE+aqoCO N0yyNFO+IGHgYVoPwtOibzSO+9FoDtDFNQM9OWwj6+Dp3grpK6vecbvh4ACJsqRfhX ZJ8ktiJV66a5Qk5oDl9zJVfFKp7Y+uDzKwmijG0H5xAK7fyTQAJf8PrqjKH/Pxn1FZ R1hYVsVAWKFVftxQse/XP/9HnQqyFoFBwC8Du2x03amfHAj6gG7Sm/V01hbC7N7Knj 1AKGdQVFtDNxosWgb136slBee4tPHYUQ1EDKLQmNnEqB5HxMaZCZcpOf3OReVWWOE+ NNKSpZ34jxcMQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D22F9D3CCB9; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:02 +0530 Subject: [PATCH v5 10/15] PCI/pwrctrl: Add APIs to create, destroy pwrctrl devices Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-10-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam , Chen-Yu Tsai X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7430; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=ivayJzSZMxVd5tA6A14uF0UbVYPc8Eq8PFKm9u9xxik=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdCzEjM8x6qk7TQhEP6PdeQ6HpzVgtunr5ua 30jubwvfS+JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9UfoB/9eUvp1niqiLVXZ3tOhM6jT3Zt23VD67O/A2g9/Auk/1aUI/OYvEiTDqZ7f2HToDL2DHlM N4EXEmQfttbUI2+P8BYxllo1hBAbXguS9Vi6QrjJJZ24qweVw5eW4BKrBL4AeRFb4/lx4MTq14W GyQpD3dJWVRClfFkIxxKziFu7z+avZ66DdpPNSZo7oUvMAMtHaSOh942CABfxn1i2xpZrp7NqG/ zj7WzejqHIvGGyxWVdO2F4JDzM9NMssrXJT+Dnj+gX/FEML0r2qieRaFMzr3zqDh3NByyf2U8MU QgQ/xmi7qSptRQ9pnR8spi/RrjWbslZYfcVm+Z4FkoB1E0iJ X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Krishna Chaitanya Chundru Previously, the PCI core created pwrctrl devices during pci_scan_device() on its own and then skipped enumeration of those devices, hoping the pwrctrl driver would power them on and trigger a bus rescan. This approach works for endpoint devices directly connected to Root Ports, but it fails for PCIe switches acting as bus extenders. When the switch requires pwrctrl support and the pwrctrl driver is not available during the pwrctrl device creation, its enumeration will be skipped during the initial PCI bus scan. This premature scan leads the PCI core to allocate resources (bridge windows, bus numbers) for the upstream bridge based on available downstream buses at scan time. For non-hotplug capable bridges, PCI core typically allocates resources based on the number of buses available during the initial bus scan, which happens to be just one if the switch is not powered on and enumerated at that time. When the switch gets enumerated later on, it will fail due to the lack of upstream resources. As a result, a PCIe switch powered on by the pwrctrl driver cannot be reliably enumerated currently. Either the switch has to be enabled in the bootloader or the switch pwrctrl driver has to be loaded during the pwrctrl device creation time to work around these issues. Introduce new APIs to explicitly create and destroy pwrctrl devices from controller drivers by recursively scanning the PCI child nodes of the controller. These APIs allow creating pwrctrl devices based on the original criteria and are intended to be called during controller probe and removal. These APIs, together with the upcoming APIs for power on/off will allow the controller drivers to power on all the devices before starting the initial bus scan, thereby solving the resource allocation issue. Signed-off-by: Krishna Chaitanya Chundru [mani: splitted the patch, cleaned up the code, and rewrote description] Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam Signed-off-by: Bjorn Helgaas Tested-by: Chen-Yu Tsai --- drivers/pci/of.c | 1 + drivers/pci/pwrctrl/core.c | 114 ++++++++++++++++++++++++++++++++++++++++= ++++ include/linux/pci-pwrctrl.h | 8 +++- 3 files changed, 122 insertions(+), 1 deletion(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 3579265f1198..9bb5f258759b 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -867,6 +867,7 @@ bool of_pci_supply_present(struct device_node *np) =20 return false; } +EXPORT_SYMBOL_GPL(of_pci_supply_present); =20 #endif /* CONFIG_PCI */ =20 diff --git a/drivers/pci/pwrctrl/core.c b/drivers/pci/pwrctrl/core.c index 6bdbfed584d6..b423768cc477 100644 --- a/drivers/pci/pwrctrl/core.c +++ b/drivers/pci/pwrctrl/core.c @@ -3,14 +3,21 @@ * Copyright (C) 2024 Linaro Ltd. */ =20 +#define dev_fmt(fmt) "pwrctrl: " fmt + #include #include #include +#include +#include #include #include +#include #include #include =20 +#include "../pci.h" + static int pci_pwrctrl_notify(struct notifier_block *nb, unsigned long act= ion, void *data) { @@ -145,6 +152,113 @@ int devm_pci_pwrctrl_device_set_ready(struct device *= dev, } EXPORT_SYMBOL_GPL(devm_pci_pwrctrl_device_set_ready); =20 +static int pci_pwrctrl_create_device(struct device_node *np, + struct device *parent) +{ + struct platform_device *pdev; + int ret; + + for_each_available_child_of_node_scoped(np, child) { + ret =3D pci_pwrctrl_create_device(child, parent); + if (ret) + return ret; + } + + /* Bail out if the platform device is already available for the node */ + pdev =3D of_find_device_by_node(np); + if (pdev) { + platform_device_put(pdev); + return 0; + } + + /* + * Sanity check to make sure that the node has the compatible property + * to allow driver binding. + */ + if (!of_property_present(np, "compatible")) + return 0; + + /* + * Check whether the pwrctrl device really needs to be created or not. + * This is decided based on at least one of the power supplies being + * defined in the devicetree node of the device. + */ + if (!of_pci_supply_present(np)) { + dev_dbg(parent, "Skipping OF node: %s\n", np->name); + return 0; + } + + /* Now create the pwrctrl device */ + pdev =3D of_platform_device_create(np, NULL, parent); + if (!pdev) { + dev_err(parent, "Failed to create pwrctrl device for node: %s\n", np->na= me); + return -EINVAL; + } + + return 0; +} + +/** + * pci_pwrctrl_create_devices - Create pwrctrl devices + * + * @parent: PCI host controller device + * + * Recursively create pwrctrl devices for the devicetree hierarchy below + * the specified PCI host controller in a depth first manner. On error, all + * created devices will be destroyed. + * + * Return: 0 on success, negative error number on error. + */ +int pci_pwrctrl_create_devices(struct device *parent) +{ + int ret; + + for_each_available_child_of_node_scoped(parent->of_node, child) { + ret =3D pci_pwrctrl_create_device(child, parent); + if (ret) { + pci_pwrctrl_destroy_devices(parent); + return ret; + } + } + + return 0; +} +EXPORT_SYMBOL_GPL(pci_pwrctrl_create_devices); + +static void pci_pwrctrl_destroy_device(struct device_node *np) +{ + struct platform_device *pdev; + + for_each_available_child_of_node_scoped(np, child) + pci_pwrctrl_destroy_device(child); + + pdev =3D of_find_device_by_node(np); + if (!pdev) + return; + + of_device_unregister(pdev); + platform_device_put(pdev); + + of_node_clear_flag(np, OF_POPULATED); +} + +/** + * pci_pwrctrl_destroy_devices - Destroy pwrctrl devices + * + * @parent: PCI host controller device + * + * Recursively destroy pwrctrl devices for the devicetree hierarchy below + * the specified PCI host controller in a depth first manner. + */ +void pci_pwrctrl_destroy_devices(struct device *parent) +{ + struct device_node *np =3D parent->of_node; + + for_each_available_child_of_node_scoped(np, child) + pci_pwrctrl_destroy_device(child); +} +EXPORT_SYMBOL_GPL(pci_pwrctrl_destroy_devices); + MODULE_AUTHOR("Bartosz Golaszewski "); MODULE_DESCRIPTION("PCI Device Power Control core driver"); MODULE_LICENSE("GPL"); diff --git a/include/linux/pci-pwrctrl.h b/include/linux/pci-pwrctrl.h index 435b822c841e..44f66872d090 100644 --- a/include/linux/pci-pwrctrl.h +++ b/include/linux/pci-pwrctrl.h @@ -54,5 +54,11 @@ int pci_pwrctrl_device_set_ready(struct pci_pwrctrl *pwr= ctrl); void pci_pwrctrl_device_unset_ready(struct pci_pwrctrl *pwrctrl); int devm_pci_pwrctrl_device_set_ready(struct device *dev, struct pci_pwrctrl *pwrctrl); - +#if IS_ENABLED(CONFIG_PCI_PWRCTRL) +int pci_pwrctrl_create_devices(struct device *parent); +void pci_pwrctrl_destroy_devices(struct device *parent); +#else +static inline int pci_pwrctrl_create_devices(struct device *parent) { retu= rn 0; } +static void pci_pwrctrl_destroy_devices(struct device *parent) { } +#endif #endif /* __PCI_PWRCTRL_H__ */ --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5757632ABCA; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=iop2IhXW7NWX3jXJzuv9aL3rjXGWw3yAo1LAlkDRrsYzB6jbPY56DDjCx1da1sxI2RFV4LmVzsmPE9pFsgKJKAwYqEyka2lUo43nH6aS8xW7gAq7+aow3vEMro9rr/h+RwylOcKpxa8zuSdZwepvnVr2lAfCOrPn5dKSZxy3xTA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=1J+JGwor0OpfhIeIG6sQY1IstZStAANGlk6jSMi2Smk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aa4hZenmAp+TZXv+3w8bJr8mBFlIIc7Z30uOvjAvOYy3g4HfMFPPFzuq8yozg/OKZTs5YnkNJpowbCDrMIw5j/VsqmDWptL5XQ3bKJWNo1a9bflTO1t1L+rqqZnCkWwT72CUMz+wpEtLt8rToI/GUQuvwvkeF5knZ+PYb4P2/yw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WkTx22L1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="WkTx22L1" Received: by smtp.kernel.org (Postfix) with ESMTPS id E4D27C19425; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462152; bh=1J+JGwor0OpfhIeIG6sQY1IstZStAANGlk6jSMi2Smk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=WkTx22L1lvdemXtJzyBcoP2MkVitoi19DrWXt9rx390NPnifZ2F1zjFtez8Km3IyO YjZz2s95rX+QJ1CSdZHQ7vXw6OAHJnUtg/lzwuK9cfPEY5wS+tfpqT/0VOG2lHoNOt gsHdpTGuVhihzIPJe6B4c/96xMlZ4RpzgA1l+TypKGxIdyrl2VxjNIe98eS4hwsVWs rrtDyEBqrZT/r1YJeCeYzBXnoWD8/VmzhzqtVbamnsPqGc31o2KdBEWhC+ZF66KGYs BYgADNpEfh2pmCtCCDRjYLaKgX+KLMvNhS6zR9U9Sj1wHTHrpKY7p9Vi5KmBssrudc hVnL2aRFLHzLQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF9BCD3CCBD; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:03 +0530 Subject: [PATCH v5 11/15] PCI/pwrctrl: Add APIs to power on/off pwrctrl devices Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-11-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam , Chen-Yu Tsai , Bartosz Golaszewski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6536; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=iUHY/BG9RFPUYk6k/gBm6wb7TkrbPDRIaVInGnjCGao=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdCOLzhDWjQprO8YEH+i0fHqG047B2d1mtHG qPE4unrBxGJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9fG/B/sFrE1fjVZG5B1e9eu2iXh4So3R57nzWdYB3UcQ2KnfrX9vfl4pXOgMnW6spaZ5VtTLdmU 9KmQsDVJIjU6OTdnif403hL7NS12juZFCZjUWOVMO9yNhXeZUpRPI4qgkUeglZFse5CAZGVXOYA mbeam85jrozTHMUZ5ICOM9k/cXXX9reAyEn0DeZf6RKj4JfTuYfjvBJUbB9V3T3SMnMkm72Vpfc 1HFhn8NVs5BI39KFp8NwsYYrScsM7PyZl0UM5ZeTR+GvqYlEm9/gvaBV5ZEc/HdWiW1kYuYplLc KSVke+0PP9GucWIKIpDJGqjcYukoc2NBpP8FRjq5Hlhy5e4w X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam To fix bridge resource allocation issues when powering PCI bridges with the pwrctrl driver, introduce APIs to explicitly power on and off all related devices simultaneously. Previously, the individual pwrctrl drivers powered on/off the PCI devices autonomously, without any control from the controller drivers. But to enforce ordering with respect to powering on the devices, these APIs will power on/off all the devices at the same time. The pci_pwrctrl_power_on_devices() API recursively scans the PCI child nodes, makes sure that pwrctrl drivers are bound to devices, and calls their power_on() callbacks. If any pwrctrl driver is not bound, it will return -EPROBE_DEFER. Similarly, pci_pwrctrl_power_off_devices() API powers off devices recursively via their power_off() callbacks. These APIs are expected to be called during the controller probe and suspend/resume time to power on/off the devices. But before calling these APIs, the pwrctrl devices should be created using the pci_pwrctrl_{create/destroy}_devices() APIs. Co-developed-by: Krishna Chaitanya Chundru Signed-off-by: Krishna Chaitanya Chundru Signed-off-by: Manivannan Sadhasivam [bhelgaas: return early when !pdev and unindent, move ctx.power_on/off here] Signed-off-by: Bjorn Helgaas Tested-by: Chen-Yu Tsai Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/core.c | 130 ++++++++++++++++++++++++++++++++++++++++= ++++ include/linux/pci-pwrctrl.h | 4 ++ 2 files changed, 134 insertions(+) diff --git a/drivers/pci/pwrctrl/core.c b/drivers/pci/pwrctrl/core.c index b423768cc477..fef5243d9445 100644 --- a/drivers/pci/pwrctrl/core.c +++ b/drivers/pci/pwrctrl/core.c @@ -65,6 +65,7 @@ void pci_pwrctrl_init(struct pci_pwrctrl *pwrctrl, struct= device *dev) { pwrctrl->dev =3D dev; INIT_WORK(&pwrctrl->work, rescan_work_func); + dev_set_drvdata(dev, pwrctrl); } EXPORT_SYMBOL_GPL(pci_pwrctrl_init); =20 @@ -152,6 +153,135 @@ int devm_pci_pwrctrl_device_set_ready(struct device *= dev, } EXPORT_SYMBOL_GPL(devm_pci_pwrctrl_device_set_ready); =20 +static int __pci_pwrctrl_power_off_device(struct device *dev) +{ + struct pci_pwrctrl *pwrctrl =3D dev_get_drvdata(dev); + + if (!pwrctrl) + return 0; + + return pwrctrl->power_off(pwrctrl); +} + +static void pci_pwrctrl_power_off_device(struct device_node *np) +{ + struct platform_device *pdev; + int ret; + + for_each_available_child_of_node_scoped(np, child) + pci_pwrctrl_power_off_device(child); + + pdev =3D of_find_device_by_node(np); + if (!pdev) + return; + + if (device_is_bound(&pdev->dev)) { + ret =3D __pci_pwrctrl_power_off_device(&pdev->dev); + if (ret) + dev_err(&pdev->dev, "Failed to power off device: %d", ret); + } + + platform_device_put(pdev); +} + +/** + * pci_pwrctrl_power_off_devices - Power off pwrctrl devices + * + * @parent: PCI host controller device + * + * Recursively traverse all pwrctrl devices for the devicetree hierarchy + * below the specified PCI host controller and power them off in a depth + * first manner. + */ +void pci_pwrctrl_power_off_devices(struct device *parent) +{ + struct device_node *np =3D parent->of_node; + + for_each_available_child_of_node_scoped(np, child) + pci_pwrctrl_power_off_device(child); +} +EXPORT_SYMBOL_GPL(pci_pwrctrl_power_off_devices); + +static int __pci_pwrctrl_power_on_device(struct device *dev) +{ + struct pci_pwrctrl *pwrctrl =3D dev_get_drvdata(dev); + + if (!pwrctrl) + return 0; + + return pwrctrl->power_on(pwrctrl); +} + +/* + * Power on the devices in a depth first manner. Before powering on the de= vice, + * make sure its driver is bound. + */ +static int pci_pwrctrl_power_on_device(struct device_node *np) +{ + struct platform_device *pdev; + int ret; + + for_each_available_child_of_node_scoped(np, child) { + ret =3D pci_pwrctrl_power_on_device(child); + if (ret) + return ret; + } + + pdev =3D of_find_device_by_node(np); + if (!pdev) + return 0; + + if (device_is_bound(&pdev->dev)) { + ret =3D __pci_pwrctrl_power_on_device(&pdev->dev); + } else { + /* FIXME: Use blocking wait instead of probe deferral */ + dev_dbg(&pdev->dev, "driver is not bound\n"); + ret =3D -EPROBE_DEFER; + } + + platform_device_put(pdev); + + return ret; +} + +/** + * pci_pwrctrl_power_on_devices - Power on pwrctrl devices + * + * @parent: PCI host controller device + * + * Recursively traverse all pwrctrl devices for the devicetree hierarchy + * below the specified PCI host controller and power them on in a depth + * first manner. On error, all powered on devices will be powered off. + * + * Return: 0 on success, -EPROBE_DEFER if any pwrctrl driver is not bound,= an + * appropriate error code otherwise. + */ +int pci_pwrctrl_power_on_devices(struct device *parent) +{ + struct device_node *np =3D parent->of_node; + struct device_node *child =3D NULL; + int ret; + + for_each_available_child_of_node(np, child) { + ret =3D pci_pwrctrl_power_on_device(child); + if (ret) + goto err_power_off; + } + + return 0; + +err_power_off: + for_each_available_child_of_node_scoped(np, tmp) { + if (tmp =3D=3D child) + break; + pci_pwrctrl_power_off_device(tmp); + } + of_node_put(child); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_pwrctrl_power_on_devices); + static int pci_pwrctrl_create_device(struct device_node *np, struct device *parent) { diff --git a/include/linux/pci-pwrctrl.h b/include/linux/pci-pwrctrl.h index 44f66872d090..1192a2527521 100644 --- a/include/linux/pci-pwrctrl.h +++ b/include/linux/pci-pwrctrl.h @@ -57,8 +57,12 @@ int devm_pci_pwrctrl_device_set_ready(struct device *dev, #if IS_ENABLED(CONFIG_PCI_PWRCTRL) int pci_pwrctrl_create_devices(struct device *parent); void pci_pwrctrl_destroy_devices(struct device *parent); +int pci_pwrctrl_power_on_devices(struct device *parent); +void pci_pwrctrl_power_off_devices(struct device *parent); #else static inline int pci_pwrctrl_create_devices(struct device *parent) { retu= rn 0; } static void pci_pwrctrl_destroy_devices(struct device *parent) { } +static inline int pci_pwrctrl_power_on_devices(struct device *parent) { re= turn 0; } +static void pci_pwrctrl_power_off_devices(struct device *parent) { } #endif #endif /* __PCI_PWRCTRL_H__ */ --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 667F732ABFD; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=iwXWYnpjjAvl0cNU+nVeNVmxo4UaZp/kqmUVHLi7PUe9y6je8jFu6n6+gc9+2Op2P6eDhwCLS34/BdDmKsCEY0uvnTfB7MKhHwxPUkboA5zRc+MCWJ6w6mgjklXfCZp2CImTVdkvLSjtPhEnMIdBSxi5+Lbbuh7OCffaIL/5kbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=xpv4TT1tGO//ZKvetO1F+ECh4/9TaRWFkSjHPk94aBs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EU/2UaOw1ncECwxK5glih/yuu9grjDijO1kOYKLUrXLXjH4Z/e+IPHYS3O5vgUr82uPmlFXUYeD7f2D49wMFflfIXbx9bQztMsQvrUsae/X9syzvmTPqmWS+wZ8fWV1+ttm1nj69v2yisJfqa5WhpIa74CRQh8uwdj8dOKXJ9YU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QfC49AxW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QfC49AxW" Received: by smtp.kernel.org (Postfix) with ESMTPS id 01A9FC19423; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462152; bh=xpv4TT1tGO//ZKvetO1F+ECh4/9TaRWFkSjHPk94aBs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=QfC49AxWhSTZ02zb++XZOndyttUlOoXs2e3QkGFf7mUGeNdaksj33s35z0ejm2k+n G2D1dd6dwLKUSAMvL2WEwW6R0Rn7kpyfLx2mzT3za6Xah63nj/InlGhRhYpyQrBPbr VSNwccYV9+HfbWvoWbwljhm24zG2n+qqn4+r37rhMYHbm8hyswAfV105FB7qklXvEm NZM0Ty3glBkJ5kcVpWAzJhtuZiHB3w2fZdP1JX739pVJZCXep5BAvVn9xRo84lny4l iz2+GmaVsoQZLt8V1Su9ANWT8+MMIFtPUyPHmjOAb8sVgIPNhtF+d0Cq4H1OB20NrN OOlIX+J09XMuw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE6F7D3CCBB; Thu, 15 Jan 2026 07:29:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:04 +0530 Subject: [PATCH v5 12/15] PCI/pwrctrl: Switch to pwrctrl create, power on/off, destroy APIs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-12-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam , Chen-Yu Tsai X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12890; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=oRG+qd+uiz4zbP0UfX+/pmdCGtBAYhsTub4b6+6BBL4=; b=kA0DAAoBVZ8R5v6RzvUByyZiAGlol0KiFLFIcEvu2T4dAul7nOZn+chMtgKl+nDhJ9zQUHFVF YkBMwQAAQoAHRYhBGelQyqBSMvYpFgnl1WfEeb+kc71BQJpaJdCAAoJEFWfEeb+kc71jagIAJ+C GY12d+DrY8fNCWCWevNFV3sVSz03CIRcds4ufFa8AkD54dg10M64IXGGkzTkNRxHcjoloOdNJpf otyzOq0Diwkra5DoOToGhm6onZjIMxzv+P5e4VsCYUeo69+as1x5+ZothJsRiUn9hUbAS3iSIF8 ju9kVZDQ58fK13RR/ks5N/UX+pw80TwGCs8ncraWMYGupTI3EQotMSQz23TisCZP4TZy/xpmTYV /sfH/R1Casjqhsddzirrqn3rk4CVJ0rwzjhY5MIxtsBn3eagBOCCpE5TWscMeV2uNuzRc9JvQXG R4iKUGXIjlWJBVFt+4ua+3rFL/qEPrTdEMzVFEg= X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Adopt pwrctrl APIs to create, power on/off, and destroy pwrctrl devices. In qcom_pcie_host_init(), call pci_pwrctrl_create_devices() to create devices, then pci_pwrctrl_power_on_devices() to power them on, both after controller resource initialization. Once successful, deassert PERST# for all devices. In qcom_pcie_host_deinit(), call pci_pwrctrl_power_off_devices() after asserting PERST#. Note that pci_pwrctrl_destroy_devices() is not called here, as deinit is only invoked during system suspend where device destruction is unnecessary. If the driver becomes removable in future, pci_pwrctrl_destroy_devices() should be called in the remove() handler. Remove the old pwrctrl framework code from the PCI core (including devlinks) as the new APIs are now the sole consumer of pwrctrl functionality. And also do not power on the pwrctrl drivers during probe() as this is now handled by the APIs. Co-developed-by: Krishna Chaitanya Chundru Signed-off-by: Krishna Chaitanya Chundru Signed-off-by: Manivannan Sadhasivam Signed-off-by: Bjorn Helgaas Tested-by: Chen-Yu Tsai Reviewed-by: Bartosz Golaszewski --- drivers/pci/bus.c | 19 ---------- drivers/pci/controller/dwc/pcie-qcom.c | 24 +++++++++++-- drivers/pci/probe.c | 59 ----------------------------= ---- drivers/pci/pwrctrl/core.c | 15 -------- drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c | 5 --- drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 24 ++----------- drivers/pci/pwrctrl/slot.c | 2 -- drivers/pci/remove.c | 20 ----------- 8 files changed, 25 insertions(+), 143 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 4383a36fd6ca..d60d5f108212 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -344,7 +344,6 @@ void __weak pcibios_bus_add_device(struct pci_dev *pdev= ) { } void pci_bus_add_device(struct pci_dev *dev) { struct device_node *dn =3D dev->dev.of_node; - struct platform_device *pdev; =20 /* * Can not put in pci_device_add yet because resources @@ -361,24 +360,6 @@ void pci_bus_add_device(struct pci_dev *dev) /* Save config space for error recoverability */ pci_save_state(dev); =20 - /* - * If the PCI device is associated with a pwrctrl device with a - * power supply, create a device link between the PCI device and - * pwrctrl device. This ensures that pwrctrl drivers are probed - * before PCI client drivers. - */ - pdev =3D of_find_device_by_node(dn); - if (pdev) { - if (of_pci_supply_present(dn)) { - if (!device_link_add(&dev->dev, &pdev->dev, - DL_FLAG_AUTOREMOVE_CONSUMER)) { - pci_err(dev, "failed to add device link to power control device %s\n", - pdev->name); - } - } - put_device(&pdev->dev); - } - if (!dn || of_device_is_available(dn)) pci_dev_allow_binding(dev); =20 diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 7b92e7a1c0d9..20b7593b8397 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -1310,10 +1311,18 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *p= p) if (ret) goto err_deinit; =20 + ret =3D pci_pwrctrl_create_devices(pci->dev); + if (ret) + goto err_disable_phy; + + ret =3D pci_pwrctrl_power_on_devices(pci->dev); + if (ret) + goto err_pwrctrl_destroy; + if (pcie->cfg->ops->post_init) { ret =3D pcie->cfg->ops->post_init(pcie); if (ret) - goto err_disable_phy; + goto err_pwrctrl_power_off; } =20 qcom_ep_reset_deassert(pcie); @@ -1328,6 +1337,11 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) =20 err_assert_reset: qcom_ep_reset_assert(pcie); +err_pwrctrl_power_off: + pci_pwrctrl_power_off_devices(pci->dev); +err_pwrctrl_destroy: + if (ret !=3D -EPROBE_DEFER) + pci_pwrctrl_destroy_devices(pci->dev); err_disable_phy: qcom_pcie_phy_power_off(pcie); err_deinit: @@ -1342,6 +1356,12 @@ static void qcom_pcie_host_deinit(struct dw_pcie_rp = *pp) struct qcom_pcie *pcie =3D to_qcom_pcie(pci); =20 qcom_ep_reset_assert(pcie); + + /* + * No need to destroy pwrctrl devices as this function only gets called + * during system suspend as of now. + */ + pci_pwrctrl_power_off_devices(pci->dev); qcom_pcie_phy_power_off(pcie); pcie->cfg->ops->deinit(pcie); } @@ -1961,7 +1981,7 @@ static int qcom_pcie_probe(struct platform_device *pd= ev) =20 ret =3D dw_pcie_host_init(pp); if (ret) { - dev_err(dev, "cannot initialize host\n"); + dev_err_probe(dev, ret, "cannot initialize host\n"); goto err_phy_exit; } =20 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 41183aed8f5d..6e7252404b58 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2563,56 +2563,6 @@ bool pci_bus_read_dev_vendor_id(struct pci_bus *bus,= int devfn, u32 *l, } EXPORT_SYMBOL(pci_bus_read_dev_vendor_id); =20 -#if IS_ENABLED(CONFIG_PCI_PWRCTRL) -static struct platform_device *pci_pwrctrl_create_device(struct pci_bus *b= us, int devfn) -{ - struct pci_host_bridge *host =3D pci_find_host_bridge(bus); - struct platform_device *pdev; - struct device_node *np; - - np =3D of_pci_find_child_device(dev_of_node(&bus->dev), devfn); - if (!np) - return NULL; - - pdev =3D of_find_device_by_node(np); - if (pdev) { - put_device(&pdev->dev); - goto err_put_of_node; - } - - /* - * First check whether the pwrctrl device really needs to be created or - * not. This is decided based on at least one of the power supplies - * being defined in the devicetree node of the device. - */ - if (!of_pci_supply_present(np)) { - pr_debug("PCI/pwrctrl: Skipping OF node: %s\n", np->name); - goto err_put_of_node; - } - - /* Now create the pwrctrl device */ - pdev =3D of_platform_device_create(np, NULL, &host->dev); - if (!pdev) { - pr_err("PCI/pwrctrl: Failed to create pwrctrl device for node: %s\n", np= ->name); - goto err_put_of_node; - } - - of_node_put(np); - - return pdev; - -err_put_of_node: - of_node_put(np); - - return NULL; -} -#else -static struct platform_device *pci_pwrctrl_create_device(struct pci_bus *b= us, int devfn) -{ - return NULL; -} -#endif - /* * Read the config data for a PCI device, sanity-check it, * and fill in the dev structure. @@ -2622,15 +2572,6 @@ static struct pci_dev *pci_scan_device(struct pci_bu= s *bus, int devfn) struct pci_dev *dev; u32 l; =20 - /* - * Create pwrctrl device (if required) for the PCI device to handle the - * power state. If the pwrctrl device is created, then skip scanning - * further as the pwrctrl core will rescan the bus after powering on - * the device. - */ - if (pci_pwrctrl_create_device(bus, devfn)) - return NULL; - if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000)) return NULL; =20 diff --git a/drivers/pci/pwrctrl/core.c b/drivers/pci/pwrctrl/core.c index fef5243d9445..1b91375738a0 100644 --- a/drivers/pci/pwrctrl/core.c +++ b/drivers/pci/pwrctrl/core.c @@ -45,16 +45,6 @@ static int pci_pwrctrl_notify(struct notifier_block *nb,= unsigned long action, return NOTIFY_DONE; } =20 -static void rescan_work_func(struct work_struct *work) -{ - struct pci_pwrctrl *pwrctrl =3D container_of(work, - struct pci_pwrctrl, work); - - pci_lock_rescan_remove(); - pci_rescan_bus(to_pci_host_bridge(pwrctrl->dev->parent)->bus); - pci_unlock_rescan_remove(); -} - /** * pci_pwrctrl_init() - Initialize the PCI power control context struct * @@ -64,7 +54,6 @@ static void rescan_work_func(struct work_struct *work) void pci_pwrctrl_init(struct pci_pwrctrl *pwrctrl, struct device *dev) { pwrctrl->dev =3D dev; - INIT_WORK(&pwrctrl->work, rescan_work_func); dev_set_drvdata(dev, pwrctrl); } EXPORT_SYMBOL_GPL(pci_pwrctrl_init); @@ -95,8 +84,6 @@ int pci_pwrctrl_device_set_ready(struct pci_pwrctrl *pwrc= trl) if (ret) return ret; =20 - schedule_work(&pwrctrl->work); - return 0; } EXPORT_SYMBOL_GPL(pci_pwrctrl_device_set_ready); @@ -109,8 +96,6 @@ EXPORT_SYMBOL_GPL(pci_pwrctrl_device_set_ready); */ void pci_pwrctrl_device_unset_ready(struct pci_pwrctrl *pwrctrl) { - cancel_work_sync(&pwrctrl->work); - /* * We don't have to delete the link here. Typically, this function * is only called when the power control device is being detached. If diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c b/drivers/pci/pwrctrl= /pci-pwrctrl-pwrseq.c index 2ee02edd55a3..1df0cd73b416 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-pwrseq.c @@ -101,11 +101,6 @@ static int pci_pwrctrl_pwrseq_probe(struct platform_de= vice *pdev) return dev_err_probe(dev, PTR_ERR(pwrseq->pwrseq), "Failed to get the power sequencer\n"); =20 - ret =3D pci_pwrctrl_pwrseq_power_on(&pwrseq->pwrctrl); - if (ret) - return dev_err_probe(dev, ret, - "Failed to power-on the device\n"); - ret =3D devm_add_action_or_reset(dev, devm_pci_pwrctrl_pwrseq_power_off, pwrseq); if (ret) diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl= /pci-pwrctrl-tc9563.c index a71d7ef2d4b8..38008d03903f 100644 --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c @@ -533,9 +533,7 @@ static int tc9563_pwrctrl_power_on(struct pci_pwrctrl *= pwrctrl) =20 static int tc9563_pwrctrl_probe(struct platform_device *pdev) { - struct pci_host_bridge *bridge =3D to_pci_host_bridge(pdev->dev.parent); struct device_node *node =3D pdev->dev.of_node; - struct pci_bus *bus =3D bridge->bus; struct device *dev =3D &pdev->dev; enum tc9563_pwrctrl_ports port; struct pci_pwrctrl_tc9563 *tc9563; @@ -614,22 +612,6 @@ static int tc9563_pwrctrl_probe(struct platform_device= *pdev) goto remove_i2c; } =20 - if (bridge->ops->assert_perst) { - ret =3D bridge->ops->assert_perst(bus, true); - if (ret) - goto remove_i2c; - } - - ret =3D tc9563_pwrctrl_power_on(&tc9563->pwrctrl); - if (ret) - goto remove_i2c; - - if (bridge->ops->assert_perst) { - ret =3D bridge->ops->assert_perst(bus, false); - if (ret) - goto power_off; - } - tc9563->pwrctrl.power_on =3D tc9563_pwrctrl_power_on; tc9563->pwrctrl.power_off =3D tc9563_pwrctrl_power_off; =20 @@ -637,8 +619,6 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) if (ret) goto power_off; =20 - platform_set_drvdata(pdev, tc9563); - return 0; =20 power_off: @@ -651,7 +631,9 @@ static int tc9563_pwrctrl_probe(struct platform_device = *pdev) =20 static void tc9563_pwrctrl_remove(struct platform_device *pdev) { - struct pci_pwrctrl_tc9563 *tc9563 =3D platform_get_drvdata(pdev); + struct pci_pwrctrl *pwrctrl =3D dev_get_drvdata(&pdev->dev); + struct pci_pwrctrl_tc9563 *tc9563 =3D container_of(pwrctrl, + struct pci_pwrctrl_tc9563, pwrctrl); =20 tc9563_pwrctrl_power_off(&tc9563->pwrctrl); i2c_unregister_device(tc9563->client); diff --git a/drivers/pci/pwrctrl/slot.c b/drivers/pci/pwrctrl/slot.c index 55828aec2486..a36e5dd42442 100644 --- a/drivers/pci/pwrctrl/slot.c +++ b/drivers/pci/pwrctrl/slot.c @@ -83,8 +83,6 @@ static int pci_pwrctrl_slot_probe(struct platform_device = *pdev) return dev_err_probe(dev, PTR_ERR(slot->clk), "Failed to enable slot clock\n"); =20 - pci_pwrctrl_slot_power_on(&slot->pwrctrl); - slot->pwrctrl.power_on =3D pci_pwrctrl_slot_power_on; slot->pwrctrl.power_off =3D pci_pwrctrl_slot_power_off; =20 diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c index 417a9ea59117..e9d519993853 100644 --- a/drivers/pci/remove.c +++ b/drivers/pci/remove.c @@ -17,25 +17,6 @@ static void pci_free_resources(struct pci_dev *dev) } } =20 -static void pci_pwrctrl_unregister(struct device *dev) -{ - struct device_node *np; - struct platform_device *pdev; - - np =3D dev_of_node(dev); - if (!np) - return; - - pdev =3D of_find_device_by_node(np); - if (!pdev) - return; - - of_device_unregister(pdev); - put_device(&pdev->dev); - - of_node_clear_flag(np, OF_POPULATED); -} - static void pci_stop_dev(struct pci_dev *dev) { pci_pme_active(dev, false); @@ -73,7 +54,6 @@ static void pci_destroy_dev(struct pci_dev *dev) pci_ide_destroy(dev); pcie_aspm_exit_link_state(dev); pci_bridge_d3_update(dev); - pci_pwrctrl_unregister(&dev->dev); pci_free_resources(dev); put_device(&dev->dev); } --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A36032B9A6; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=Wz5i8n2kknHGGbK41dvToO50hHgJflzj+yk7YkwlnZ6vnD3l+JTXXszECaISnLCzkqaVICDKokm1/dDKqRQDMgOCgoN6q0R0Q6M1O9KKDb5OT28+xqb4ZHJe4ehqO48fq3IXXjwXjfx4oAVPz02nfOBvMTCDmv4BEqN+B2SUAb4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=7mSdsYASfyGSrjZYSh8rCdb7w3bx4AprJ7qdCc5vQl0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jbBXcsqYs9tLzvoSqSkMI4/ksQ49TaWtNy5TAVbjWHUagokRhmr6hnhVUriGuYBd/pVw215kgoVQQSSdiDptUXp+z+8Akkh/yn2zw9aa5/zt9NLUQuNU8+ZtVnXwpBSljxMIO1RvpYG+riyhVDStSDb+r5A4/VoHDgaYzRUpDhA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dIHSac7F; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dIHSac7F" Received: by smtp.kernel.org (Postfix) with ESMTPS id 10E3CC4AF10; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462152; bh=7mSdsYASfyGSrjZYSh8rCdb7w3bx4AprJ7qdCc5vQl0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=dIHSac7F8YYaysQ/NtTzveLSEMSXHryWYZleq7Xs0r1hoOW43w+HgzVSJnkdNh/kA z9yPklqdTzncX1hkGrTLD965Dbn3lyDqY1apvFkuv7zx3TQ0AJVADum2uN7lQP1fGi nObsaNXS3vL+wRpDEadRA4j7OHg9kCioLIrjRlt88CSB+TbDum080eVFpq0RHznskX U1LSqTwdk1vRO523jxQKuC8CuwIYibEnkfTbkt+EKrOWMS3PmpbCk+BmV0SjNvq9At +URyGH7XQWNailu6wrs2xG9G28Wfn63HbFfDGqM+JffJf9fjZLETP5Sgut3FWVxIFh SUQcdt62bv+3w== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0900BD3CCB3; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:05 +0530 Subject: [PATCH v5 13/15] PCI: qcom: Drop the assert_perst() callbacks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-13-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3855; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=rogITdc7MmLCnkojcc5SXxBSLFA/7R+miSdzsbgMDBg=; b=owGbwMvMwMUYOl/w2b+J574ynlZLYsjMmO7U0sh5eVt9u4V3lN6U9SzJSm9sVjZOF6rhyLYRS vbjiEvuZDRmYWDkYpAVU2RJX+qs1ehx+saSCPXpMINYmUCmMHBxCsBEOi05GBbaOF1YKvlfxeHA 4bCV9mlu76QvFyX9OyTamcX9+RvLiltXN1S84K9J7J8nEfHBIieSPfz5nRZhnu91TawlOWoyVhO 6OHLun3xy1e2BfW4Pq3qccbDby/z9hrXbf7y9lm4V8veb0UsfqxR/0cwbq57muO6L3pet1DiJR3 5NkM0+sWkary6GfH1WxLBjxnub/O33XcLj14haK5Ss2sIr32+6Z9adKPPjU/n7+JZeKHi5Utkje tnWHymbFbi8lINVfOUPHVRbt8Rs3+JA03ccZ6O1ZXas5/HTvSsRvsE8SjV06f3YVXzHbZ2VuY/P 6G/dcoQtXlufxfpPSmxtW0LsGbNtygsT7my6euT6G8UsAA== X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Previously, the pcie-qcom driver probed first, deasserted PERST#, enabled link training and scanned the bus. By the time the pwrctrl driver probe got called, link training was already enabled by the controller driver. Thus the pwrctrl drivers had to call the .assert_perst() callback, to assert PERST#, power on the needed resources, and then call the .assert_perst() callback to deassert PERST#. Now since all pwrctrl drivers and this controller driver have been converted to the new pwrctrl design where the pwrctrl drivers will first power on the devices before this driver deasserts PERST# and scan the bus. So there is no longer a need for .assert_perst() callback in this driver and in DWC core driver. Hence, drop them. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/controller/dwc/pcie-designware-host.c | 9 --------- drivers/pci/controller/dwc/pcie-designware.h | 9 --------- drivers/pci/controller/dwc/pcie-qcom.c | 13 ------------- 3 files changed, 31 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pc= i/controller/dwc/pcie-designware-host.c index 372207c33a85..4862a3a059c7 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -857,19 +857,10 @@ static void __iomem *dw_pcie_ecam_conf_map_bus(struct= pci_bus *bus, unsigned int return pci->dbi_base + where; } =20 -static int dw_pcie_op_assert_perst(struct pci_bus *bus, bool assert) -{ - struct dw_pcie_rp *pp =3D bus->sysdata; - struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); - - return dw_pcie_assert_perst(pci, assert); -} - static struct pci_ops dw_pcie_ops =3D { .map_bus =3D dw_pcie_own_conf_map_bus, .read =3D pci_generic_config_read, .write =3D pci_generic_config_write, - .assert_perst =3D dw_pcie_op_assert_perst, }; =20 static struct pci_ops dw_pcie_ecam_ops =3D { diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 31685951a080..da32bb5f936c 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -493,7 +493,6 @@ struct dw_pcie_ops { enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie); int (*start_link)(struct dw_pcie *pcie); void (*stop_link)(struct dw_pcie *pcie); - int (*assert_perst)(struct dw_pcie *pcie, bool assert); }; =20 struct debugfs_info { @@ -798,14 +797,6 @@ static inline void dw_pcie_stop_link(struct dw_pcie *p= ci) pci->ops->stop_link(pci); } =20 -static inline int dw_pcie_assert_perst(struct dw_pcie *pci, bool assert) -{ - if (pci->ops && pci->ops->assert_perst) - return pci->ops->assert_perst(pci, assert); - - return 0; -} - static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci) { u32 val; diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 20b7593b8397..2a47f71d936a 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -642,18 +642,6 @@ static int qcom_pcie_post_init_1_0_0(struct qcom_pcie = *pcie) return 0; } =20 -static int qcom_pcie_assert_perst(struct dw_pcie *pci, bool assert) -{ - struct qcom_pcie *pcie =3D to_qcom_pcie(pci); - - if (assert) - qcom_ep_reset_assert(pcie); - else - qcom_ep_reset_deassert(pcie); - - return 0; -} - static void qcom_pcie_2_3_2_ltssm_enable(struct qcom_pcie *pcie) { u32 val; @@ -1514,7 +1502,6 @@ static const struct qcom_pcie_cfg cfg_fw_managed =3D { static const struct dw_pcie_ops dw_pcie_ops =3D { .link_up =3D qcom_pcie_link_up, .start_link =3D qcom_pcie_start_link, - .assert_perst =3D qcom_pcie_assert_perst, }; =20 static int qcom_pcie_icc_init(struct qcom_pcie *pcie) --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F22B32B9AE; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=scoHiy7bzTkIZD3keqhV92zFZriQmcA/K5r0cAjiwXGe0rms4zgMTUhop/y7WGfTiR/PIJOmlPAju73t0S0eyz3AKebEkiSfYEIO1SUnluAHzkibqTGtv1RPq9P3O8zmcIVAHipSiJP8g4B0ryx7EjmXmqLEr+irUUGFNr8+Zbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=EE/OPJ/wo3lj7QFm4jJOi5bK3Fluo0f9Sd+lo6xGEn0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CscUy4G3ZoFIvHyOVeDaxXCeDjDig79dinwJwV9snX3nd6UGwRZfxldJmd2G6G4dzPdCq71yu6OsCHIw/jqkiwOlA7Q9Ywld9T2mPZbscCmZ6+7gS3fP/6eB4Au7b5OnZ2Y19K9/XQXiFaVfTU89wFOhCw/6Jkq+kgVImbfHwOA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ADnpznMa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ADnpznMa" Received: by smtp.kernel.org (Postfix) with ESMTPS id 1F59DC2BCFF; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462152; bh=EE/OPJ/wo3lj7QFm4jJOi5bK3Fluo0f9Sd+lo6xGEn0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ADnpznMasR13LrFplbIwkzL7eVbkSXEHwiphpqZanD6qkdB4rzTBwa/pebJ2wIR3N eHE3YGccTEul9x7QbxlQ4In2v3keoTAM1aYoXnYOQaMUY0VWMJ7fvAO9d084CdbBgm TXwUvO8tQLLbQ4+Ne9s4AQcHQ93RNAZTkA85x29xzaxviANylCKDCveT/S+TluCG4F X7lVPGZYKUkOkk61//gPABR0sjVZhgWnbIofSU0qWDAKumxRG3Y+5nhhAEAM6uea2f jjZ2jHXAmjUp5M62lZko8ztIVt3Nko6vBWgyH+F7ZgkRyyiQgsFE/X0bok8LFflEdQ G3lY0wkTmFIVA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16178D3CCB8; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:06 +0530 Subject: [PATCH v5 14/15] PCI: Drop the assert_perst() callback Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-14-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=898; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=cfL35gxA0UiloYcpl6gZdQR72MeSRBnIzACUOVo0Zsk=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdC5y3osX6wTzwLGN+mHd/QX6p7wZXEYRQX9 dvOO3Y/4vCJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9bvZB/90gYFo02YchiatjpJMZoKMifnlzwemLO7JZ1lA4avkDCt0nl5vTMGXfVxBcfhE2f2K1Bd AjXpknYv2CSXx30J+14ujU7comNQR8wMsMyLniK8jzJ7syge+HmfnV6PooEy6nqw9YqhJ6MnzUv zrROiRylZZp7sBwU3a/13BGFGPJD7WtCr6Ilb3RZj4+swNWzs8ab9r1NfB0A+JAkdfFR/es64YO ZoP3ngX71Rz/DAEf2ZHseN+zoIzVZgDwj/h1Mt9DOUA/lnUXfSRnAVmBzx2NmnlKvYZ6uPqSyGV gg/x9A4IuOmZe/1vGaF9GIFiypl0ktEfjtcQAuxu7ROQzUrq X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Now since all .assert_callback() implementations have been removed from the controller drivers, drop the .assert_callback callback from pci.h. Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam --- include/linux/pci.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/linux/pci.h b/include/linux/pci.h index 864775651c6f..3eb8fd975ad9 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -854,7 +854,6 @@ struct pci_ops { void __iomem *(*map_bus)(struct pci_bus *bus, unsigned int devfn, int whe= re); int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size,= u32 *val); int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size= , u32 val); - int (*assert_perst)(struct pci_bus *bus, bool assert); }; =20 /* --=20 2.48.1 From nobody Sun Feb 8 16:11:29 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9299D32BF41; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; cv=none; b=hrqPXQFfhRuehHUYnW9EHbNFUy9arB1LdRJdFNYEiOuiTdKhvzowSmAp6Nrkb59ZBUGX6dVKg9IciKGPKr81oJQWY4xxSQaLgy+/1HwqLHOLKycmRAlCfJPbzPP/e+8LNHO1itwWrjzMyIFa7pqJ3rpADKkAx14Sd3h0hgGaSRY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768462152; c=relaxed/simple; bh=pGreCKbWaPlPVwmAXPkYouFI6RCKPNuKxNZUczycMJc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P6iDSKR3GkH1s7ReaM1yjoRpr+YMwK1xVcatAIhCCdGw4XNdGI2Bmj/nbneqvoGsiR8U1LfRFcbxor3D8ItvR1McSJAPQ2XrtJmaXxRjrhHYY9oXpyP46pWDHIEmAaV1UAhRHZ1D0kJks8F4yBVClhx6hrw+TZV0zTxGzmVkB6g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hBAsVHfA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hBAsVHfA" Received: by smtp.kernel.org (Postfix) with ESMTPS id 2DAD7C4AF14; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768462152; bh=pGreCKbWaPlPVwmAXPkYouFI6RCKPNuKxNZUczycMJc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=hBAsVHfAghT+O7vX0IlNGZv4FWE1AIJVYIZ/zqKzCNQszaptTYTLDg+9Enm+XvisY mBlJ3AsE93SsEKdNH4Hebers8phK4aGJf4Ck/3O+L0RLQBInLpAYLDSHC4FtxcObFu 5P8L+92pWwDlmgiBnx88ft/ikj4yfwp8U1h2N0mkrP6/T6ZAx2ajOL+1zXWPxrXvql 0F4rjdIDbh1Oj+vEnOKRGXXTIbxQbRSfU03UBx5CIFFx6bd39XjQ7L22kdyg1LKw9B vjKe6b71GPZKpU1XcjyYyZVRKBHegp+dn6i+ESRtL76rRd/b2i2XVNwgDKn0YJH6aD Gwv9b55mKSm9g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 238D3D3CCBB; Thu, 15 Jan 2026 07:29:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 15 Jan 2026 12:59:07 +0530 Subject: [PATCH v5 15/15] PCI: qcom: Rename PERST# assert/deassert helpers for uniformity Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-pci-pwrctrl-rework-v5-15-9d26da3ce903@oss.qualcomm.com> References: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> In-Reply-To: <20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@oss.qualcomm.com> To: Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Bartosz Golaszewski , Bartosz Golaszewski , Bjorn Andersson , Jingoo Han Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Brian Norris , Krishna Chaitanya Chundru , Niklas Cassel , Alex Elder , Bartosz Golaszewski , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2814; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=kQooLkyC5qifzywZ79U+6BAgUebWpp8I5aiLs13WZ/k=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpaJdCfKH9LP+YN4xn+brCDqYhun2rxPxNp9ob4 mhqW6Py/R+JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaWiXQgAKCRBVnxHm/pHO 9erVB/4v+/HFL5NEYPWBicvocPxzenVnGa73DJ9j9p14CQ4FY9lL5CII5/EiPConmZJdgUVuDxW U3K+LnLr8E4NLpi8g3ihRn9NzvxTS9yAsgSV55EBBpzOptQ0RfUwd3YpBRLJYLoF7f2BeeH3DXr AuRvn5WGUeDOVR2XcUYTNP8zJu6zfmyaAbgWeeLe+dhK0E2+V+lFdJZROBS6orau0BVZUGsnIME 26tn6PUf5aqop2ly82c8EpkKcLqi9C4ysmSAQTzK68j/EnI9Sz5j6PLjoat5QYtiTl8wcFUW+Zf RLMF3z5NT9vCmh0NDxqxaAZvg3dAV10Sn8xzUPZJ16yQc7+e X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Rename the PERST# assert/deassert helpers from qcom_ep_reset_{assert/deassert}() to qcom_pcie_perst_{assert/deassert}() to maintain uniformity. Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam --- drivers/pci/controller/dwc/pcie-qcom.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 2a47f71d936a..43fdf1d4a753 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -290,7 +290,7 @@ struct qcom_pcie { =20 #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) =20 -static void qcom_perst_assert(struct qcom_pcie *pcie, bool assert) +static void __qcom_pcie_perst_assert(struct qcom_pcie *pcie, bool assert) { struct qcom_pcie_port *port; int val =3D assert ? 1 : 0; @@ -301,16 +301,16 @@ static void qcom_perst_assert(struct qcom_pcie *pcie,= bool assert) usleep_range(PERST_DELAY_US, PERST_DELAY_US + 500); } =20 -static void qcom_ep_reset_assert(struct qcom_pcie *pcie) +static void qcom_pcie_perst_assert(struct qcom_pcie *pcie) { - qcom_perst_assert(pcie, true); + __qcom_pcie_perst_assert(pcie, true); } =20 -static void qcom_ep_reset_deassert(struct qcom_pcie *pcie) +static void qcom_pcie_perst_deassert(struct qcom_pcie *pcie) { /* Ensure that PERST has been asserted for at least 100 ms */ msleep(PCIE_T_PVPERL_MS); - qcom_perst_assert(pcie, false); + __qcom_pcie_perst_assert(pcie, false); } =20 static int qcom_pcie_start_link(struct dw_pcie *pci) @@ -1289,7 +1289,7 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) struct qcom_pcie *pcie =3D to_qcom_pcie(pci); int ret; =20 - qcom_ep_reset_assert(pcie); + qcom_pcie_perst_assert(pcie); =20 ret =3D pcie->cfg->ops->init(pcie); if (ret) @@ -1313,7 +1313,7 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) goto err_pwrctrl_power_off; } =20 - qcom_ep_reset_deassert(pcie); + qcom_pcie_perst_deassert(pcie); =20 if (pcie->cfg->ops->config_sid) { ret =3D pcie->cfg->ops->config_sid(pcie); @@ -1324,7 +1324,7 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) return 0; =20 err_assert_reset: - qcom_ep_reset_assert(pcie); + qcom_pcie_perst_assert(pcie); err_pwrctrl_power_off: pci_pwrctrl_power_off_devices(pci->dev); err_pwrctrl_destroy: @@ -1343,7 +1343,7 @@ static void qcom_pcie_host_deinit(struct dw_pcie_rp *= pp) struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); struct qcom_pcie *pcie =3D to_qcom_pcie(pci); =20 - qcom_ep_reset_assert(pcie); + qcom_pcie_perst_assert(pcie); =20 /* * No need to destroy pwrctrl devices as this function only gets called --=20 2.48.1