From nobody Wed Jun 17 01:38:04 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 6C44D3BA220 for ; Tue, 21 Apr 2026 10:41:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776768074; cv=none; b=IJrHPxvAw0bKnFH6mBR8BLq/MsWMV4Xc6iAq99BdHYOpJow3ABgU6oH2JNTd8EKNRbhUtBC0BPH4eFOspGukKi8J4eMNMwneZ7CHQnnlMj/lzD/pRWAoniBTdmCF+bzr9nmTA0w9y6Xh/7stDtx0Wl4kvMb+snmaxBMHcAtyxVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776768074; c=relaxed/simple; bh=3T6+QI78/DD1AJxoS8WlDilNMixKlSD+OZgss0C6ukc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kEWNm/J+cuxrBIgdOVBkxagThMV1kmRlVM8yiX2QUiRORmJt5NOdsWa2X7WYewHaLhqw+X/p4KnvUudo32ELhm2cWmM70+7VQ4OMdS6NJYcZO4ISKYQwCWO/GK9F4p1i3zXk18Ac2btOzHg8LUrBQD9StoMkwIFY2ehan57TYVs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=jHMQysYi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RFjjlVLp; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jHMQysYi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RFjjlVLp" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63L9WlRN046030 for ; Tue, 21 Apr 2026 10:41:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=epLO+YivtnmARNN/OXhc4OMjCefXGyiYVQ3 B/j6RVzg=; b=jHMQysYifGiWQm2BMelg3xYXANfkEa6oY9PC0AgmclPGZinCMvx +ruZr0YGUuKpkej9AllSFlTUeg2iBG5Hyak+VA9RqZZYuGYlOs8UiXSFOdseVL+B sycBJqSFiwEc3cpCp8JCGA2grRLTow5pd0BegmaKIvJAUdIrWgtfzVmry/ag3Idb DtgwrRYYlWK0yj8XC4mRYeNMDByTBqVnaYUj4a5QMYpQfwJ8BBK5W2CTYaoz5FS5 Zc0FmZ6px08xvYeKfm7lJLEldb7mUz9IVimP5GwWJ+pRVt3GSu4oTiAbURUkXpuT NDhXAwnwbb7gOaGyR6fFB+BRq3MgJWj0u4g== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dp0y1sk5h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 21 Apr 2026 10:41:11 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b2497cc190so30760865ad.0 for ; Tue, 21 Apr 2026 03:41:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1776768071; x=1777372871; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=epLO+YivtnmARNN/OXhc4OMjCefXGyiYVQ3B/j6RVzg=; b=RFjjlVLp6t2ocRLitOpkO0PL1/+cd6506reI1sf/43klF+6yUsNuAGD9KXC3yBnXPb uA1gTmfR31eXtN9Guc9KvCV5nzqrugZzVxfSVzLwsxVhnLviyjiZ7HysRr+yPeoJ+cl2 4LwRud4jCOeM2zexyGzPC08yyT5w0ywuc5cR5m4TTTGtTbDdH8kQcJXFhPY94evFmb6H 8/3EjvW6oqHUsE3m6bX8enMDE+Q7REfEH3y2ldHwlXYG/ZbKQ+xwk1gJrNGA+nv4PPQj PNiuicSUkjm31uIzM7BMzkDTCxLwycOAhlQmE+y6aHdVLWSGv1KXyifnsAP72LI4JP7C 6goQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776768071; x=1777372871; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=epLO+YivtnmARNN/OXhc4OMjCefXGyiYVQ3B/j6RVzg=; b=Fi1pirM1EPd7wyMkd+60Y/GVnSliIIuB58e5JymMxbkIlYB2ZLWc9GiZ1qOirT/8TD jjiwDmLZ+31Mwl1CfFwIQasnQysUSgCXcIqpgcoX14UrZ2YL8OcaOZVDmOuR7qaEThWv aXwGaK7ND7EQlsM4GeylpSd/zr+6Mlmv0RHWTdo4lBb8swSmMTrB86Fs75cRnNkTF03W 6oZBdfDN6RuaUjhIfWUWpeOv6ulHiNTRLEImMoZhNselSyCyl8LMHiJm77aBoTJDN29N dh55tKzlxmCG/JZNHAnGB9tPJwT1LeN/NaQFSsKeITQrCV0dPPJfqdCX7lqivMl6Sr2x 4GVA== X-Forwarded-Encrypted: i=1; AFNElJ/7kUJrUnWqBayRwKiP4HUT10ty6LjgxoZmFNIn3DUry1loXV/Yw4kIeUEqDS0CWNTZpvUQbVYY//F2wz0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywkf09YsuOiWuLFOKqbY8qT1MTVEryWSb8ogCOCq8Aa5efjkmkL jrH4XDai9yL8Kl+6Segs2Rmq80i8VA+2Xp6kw7RFLknOAuidAwlUEVSKvAZtJyAofaBAZ+n7uYK YxkgfTrWamXTjJzf/j/Wa7KekXZmROVwW56ukw5KULxbNKVg4Kh8ulO8GkJdqN/1Yl/ac30viSH g= X-Gm-Gg: AeBDiesTMc2ZwMiOYyERYXzIVDjzg3RMSCOB3zE+wpVlu3I+eiSyffyyIjNzj4SK6Zf +0ybLOWmYNaNbtXhQDDbbrIv0a12mP6aB73JEnjAKrC0yfs3+J2jrNvbhdDs21aIIVENJScI7c1 ijHZl4coGyu4uHvNXBGMNGFZ1/cGdhmnx++ql+gJNKAlIpC93M0E6baQoYzxWOlisV1Ux0yadFO 81OEXaF4QoFBGC08MFsJC8rI5epzELM16XSWOT9yH8Sk5GxzeDnVzVbbv8h1zDx/O7fNoVxKsGN oZKB72L67ViOLYy/Sz7Gq5kgGMYPUZYlOjgtdAIiZzCD0wz2E4O2cFbFOcs8rP4mpt9SEOrZVyt dGhPB2FbNBFHQEbPeuaMRHMq+Bx8PBNCXruL3EKXFr5CKsFAVmA== X-Received: by 2002:a17:903:a4f:b0:2aa:e47d:e3b with SMTP id d9443c01a7336-2b5f9cb21dbmr106336075ad.0.1776768070550; Tue, 21 Apr 2026 03:41:10 -0700 (PDT) X-Received: by 2002:a17:903:a4f:b0:2aa:e47d:e3b with SMTP id d9443c01a7336-2b5f9cb21dbmr106335835ad.0.1776768069969; Tue, 21 Apr 2026 03:41:09 -0700 (PDT) Received: from work ([2401:4900:88dd:5c65:716c:532d:3c:8f17]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b5faa16e72sm130773195ad.19.2026.04.21.03.41.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 03:41:09 -0700 (PDT) From: Manivannan Sadhasivam To: brgl@kernel.org, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Krishna Chaitanya Chundru Subject: [PATCH] PCI/pwrctrl: Do not try to power on/off devices that don't need pwrctrl Date: Tue, 21 Apr 2026 16:11:01 +0530 Message-ID: <20260421104102.12322-1-manivannan.sadhasivam@oss.qualcomm.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=VNLtWdPX c=1 sm=1 tr=0 ts=69e75447 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=AWw1AI1ujJ3qdC1c:21 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=CVC7yXooD7wFAggVErgA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIxMDEwNSBTYWx0ZWRfX8XreYcb0bqlA XjdUjEVDpeu9gcbWfQYI73l81351tlknKmbZgIXxyN9jQv9SP+Ygohf5g4moKLDM+c214vge41E rC7UBqRwz24UAS7XU2JVtUjRJEwZjjzznVcUu9+UZ7F+osg9TbN7E8AI/rgbcizBdkE+k2XQmdy iU7NDyoWXVhRzoD5tXHg76154g83eFXnEKhx8Kd5llDhp8tIAUHoiykA+1ruUQ/yvQ3Dt6SSZEn TNetorf5OG2/1LOs0DeuOMX1UjYUYcqiaWPsP6peMWHRwNOQSw630P46tzhtUwC9FauTSNpGvmO t7jStZ26IRLvTlG+M3dIjyV9DIoG7hlWqDHIMOvsQ9mwhUqknIeUABNnPAJE5rM+QJ+2C+h6rAd lJo43Ulm3jP1nghCZa+leeUa6J4dkmfm0Dcq7N6//lybgAPi5NyqKQ6Smkztxa5fMH3iO0SAbMD m7ALXW8B5MarxYLaVEA== X-Proofpoint-ORIG-GUID: xkanWxuu11iSuIInzCvXItDmL2iEi1rG X-Proofpoint-GUID: xkanWxuu11iSuIInzCvXItDmL2iEi1rG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-21_02,2026-04-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 spamscore=0 phishscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 adultscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604210105 Content-Type: text/plain; charset="utf-8" pci_pwrctrl_is_required() is used to detect whether a device really needs the PCI pwrctrl support or not. It is currently used in pci_pwrctrl_create_device(), but not in pci_pwrctrl_power_{on/off}_device() APIs. This leads to pwrctrl core trying to power on/off the incompatible devices like USB hub downstream ports defined in DT. Hence, add this check to prevent pwrctrl core from poking at wrong devices. For this purpose, move the pci_pwrctrl_is_required() helper definition to the top. Fixes: b35cf3b6aa1e ("PCI/pwrctrl: Add APIs to power on/off pwrctrl devices= ") Reported-by: Krishna Chaitanya Chundru Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/pci/pwrctrl/core.c | 90 ++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/drivers/pci/pwrctrl/core.c b/drivers/pci/pwrctrl/core.c index 97cff5b8ca88..b5a0a14d316e 100644 --- a/drivers/pci/pwrctrl/core.c +++ b/drivers/pci/pwrctrl/core.c @@ -139,6 +139,48 @@ int devm_pci_pwrctrl_device_set_ready(struct device *d= ev, } EXPORT_SYMBOL_GPL(devm_pci_pwrctrl_device_set_ready); =20 +/* + * Check whether the pwrctrl device really needs to be created or not. The + * pwrctrl device will only be created if the node satisfies below require= ments: + * + * 1. Presence of compatible property with "pci" prefix to match against t= he + * pwrctrl driver (AND) + * 2. At least one of the power supplies defined in the devicetree node of= the + * device (OR) in the remote endpoint parent node to indicate pwrctrl + * requirement. + */ +static bool pci_pwrctrl_is_required(struct device_node *np) +{ + struct device_node *endpoint; + const char *compat; + int ret; + + ret =3D of_property_read_string(np, "compatible", &compat); + if (ret < 0) + return false; + + if (!strstarts(compat, "pci")) + return false; + + if (of_pci_supply_present(np)) + return true; + + if (of_graph_is_present(np)) { + for_each_endpoint_of_node(np, endpoint) { + struct device_node *remote __free(device_node) =3D + of_graph_get_remote_port_parent(endpoint); + if (remote) { + if (of_pci_supply_present(remote)) { + of_node_put(endpoint); + return true; + } + } + } + } + + return false; +} + static int __pci_pwrctrl_power_off_device(struct device *dev) { struct pci_pwrctrl *pwrctrl =3D dev_get_drvdata(dev); @@ -157,6 +199,9 @@ static void pci_pwrctrl_power_off_device(struct device_= node *np) for_each_available_child_of_node_scoped(np, child) pci_pwrctrl_power_off_device(child); =20 + if (!pci_pwrctrl_is_required(np)) + return; + pdev =3D of_find_device_by_node(np); if (!pdev) return; @@ -213,6 +258,9 @@ static int pci_pwrctrl_power_on_device(struct device_no= de *np) return ret; } =20 + if (!pci_pwrctrl_is_required(np)) + return 0; + pdev =3D of_find_device_by_node(np); if (!pdev) return 0; @@ -268,48 +316,6 @@ int pci_pwrctrl_power_on_devices(struct device *parent) } EXPORT_SYMBOL_GPL(pci_pwrctrl_power_on_devices); =20 -/* - * Check whether the pwrctrl device really needs to be created or not. The - * pwrctrl device will only be created if the node satisfies below require= ments: - * - * 1. Presence of compatible property with "pci" prefix to match against t= he - * pwrctrl driver (AND) - * 2. At least one of the power supplies defined in the devicetree node of= the - * device (OR) in the remote endpoint parent node to indicate pwrctrl - * requirement. - */ -static bool pci_pwrctrl_is_required(struct device_node *np) -{ - struct device_node *endpoint; - const char *compat; - int ret; - - ret =3D of_property_read_string(np, "compatible", &compat); - if (ret < 0) - return false; - - if (!strstarts(compat, "pci")) - return false; - - if (of_pci_supply_present(np)) - return true; - - if (of_graph_is_present(np)) { - for_each_endpoint_of_node(np, endpoint) { - struct device_node *remote __free(device_node) =3D - of_graph_get_remote_port_parent(endpoint); - if (remote) { - if (of_pci_supply_present(remote)) { - of_node_put(endpoint); - return true; - } - } - } - } - - return false; -} - static int pci_pwrctrl_create_device(struct device_node *np, struct device *parent) { --=20 2.51.0