From nobody Mon Sep 28 23:55:26 2026 Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EA8A2192F9 for ; Sat, 15 Aug 2026 00:48:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754920; cv=none; b=McUFah8fyZF4tffRGrv4SCwqqnGEkDp3Na0iS0fOBHr3S8n+SaJC8O9lLB0R03xvo8Gp9a6V/g/iOn2ul1Oec/4re1xfBmvr2jg6XGuNEVyuc9IxHW1WEDLo+8xI1N8pFfzGLGdPFtZibAoGR+StamV7tsnNy/pjRbVK4Jt42B8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754920; c=relaxed/simple; bh=1tIKif3P5fdyg5CZ8dhfBg/gndunLfBUaB/WNclV6oE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OEmTQQy+5TGzWUObwI63F3LiQsoTZprCexHzDiOyiX/Bt2e9SppIHGxsOxzJLTN5h4VUxZcSpBhyfyy4NRbzh5UwA+E7pWfhuu1Qml2r8w5z/Pj8DIoe1r9+LK4XaAAZXFmJq7z5n9H9P7PQVXZI2aha0IMFtyJYUOE+P9TI3qg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VcIA+0S4; arc=none smtp.client-ip=209.85.210.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VcIA+0S4" Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-7e9ecb1e13cso1631539a34.3 for ; Fri, 14 Aug 2026 17:48:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786754917; x=1787359717; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RGeTM77wWZWsSK2KW0+uwZ5W8XboIGpTuNX+ISzK3/o=; b=VcIA+0S409nLOpbs+s3rsUeG/RKoilqxO0u7L8CL+hvZu4oTHVUkCvI/qnEQ2ufzIx GtuhUpVGbzRsQ4daaZcu0z+GlidHTX1OKnMH4uFSFJHwJFhFwvGgSyNC4fIbK1eyfwk6 Unzn7Hv/Hx12NXp1Ii7gn2JdeRZvY/7oUq1Lbw/O+r2gWYbAuaUdrKUZhS5AYnFT49Uf 0nVM/OV0u2WxXeh6HDuOGVb2JNKJ9+vfl+nQXnD1HOvRs81qC9h8Ko8de+GN3zGUtXkW W7ZFUyG5eQKWY+vz3EM3Ewx3A4CwS1clq1LNUTcY8vEbTzFVhrF5bQq/a7z9ybOMvP02 hPjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786754917; x=1787359717; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RGeTM77wWZWsSK2KW0+uwZ5W8XboIGpTuNX+ISzK3/o=; b=XM0MHDeyfOuOWfyM7RITpiOp06Yy3Wr0gIUIsOcbcGMQ/o5pbelz3oW0r7qEA41VX9 86PdyNPq867BbEq134zVRgaVEr5RDFfOxn+/WDY1SAMJq6h/3mkwtFPeWXhLIgb9ngSN a8FSq88Eq7MoUpjK2gTqUvRnpCMwP0zie/5J0f0gMXN/hoTHgFEar55DL5m3wIkZbUNv tqARDis8+1ZOFVayZmFUdjr6CyjAdRLI2HURD4ZSdZKz/DaUDsK3DJ0un7LWkeuIqrov lVct+0NlPn/FD8OSiOtSsz2WO9YHHcxj92mCAjJybe3pJIpFJonBorBayGl8fGJFBYho hJ0g== X-Forwarded-Encrypted: i=1; AHgh+Rr470MZmyrKiBqKG1aUOPyxKtKgJpHmu8XvIqgTVMKqik0BYo1R18/CLVkB9eJ5u8CABOEjXlYItgcg94g=@vger.kernel.org X-Gm-Message-State: AOJu0Yxx9qQtzMvwQ/DDC2ORgQFG+ItEXIHvs4NjPr1Dk1B1ZMznQMMU rfSO4+ILryCkYbRTpM1q6cUi1hoYsJwrj5OhbTn05/YzOIhCxIjHzWNdVPB64g== X-Gm-Gg: AR+sD11DlAE4QNy7OQCfKvu8Tyg05yWQhFqqAdbqUPdTU1I6zkDwQemB4YoNYueY1Mn 9q0+v6RVYGcL018asbuCrJmbL2Tt0JbW959Mjs3l+vKpJRCVLa5bwTLrj6RlXpAc0N3gjxgXflS TuEyanhzVHIxIlTYplqs3opPMxaVweXVJgJAPVufvz3kDpFsfwnOO7Q5KZ9yS4rPY286jhzeNp9 6CzKwRBczm8+o3jy6GARDMR4fXZDL0pDp1NYseixrfVgEXzm5AZ/ANtrkTrWt44+azhWdcDlWwG GkNNquXe0E2NWVsIOZ6gNUXG8tF1lG6D7ggg78q/OeeXQqzEP/LjtejRtcOeOfBZiVyk0ZSM8Jr N59/1bBiIvEb97sHb9d8DXOB3jw2N+Q4uClX8UcbjpT2kGeSvt94OH5gdSzKVb13SjDp2pGPkAU HpO8jKduReOWo6cAMS9pN2TBlqwxGi22+uYNy6V+vjG0QaNLvggoehqinilqGPoIag/I/vWNVM9 qMqanhHaBGdHF34UfoN5KwfUVgRlxmfsI/D+ff5jPnUJ3XaURLNe6mXLW1BeC99g9WhtQmlhS85 pwdxWPK0o+7ehPgkoqzExXczTExUqxQNPil0Q1kBvO3okww4kiovhc+T/tJWQm+BvQHmwDn7CqK bmjmcoRc3y+9uK/3T X-Received: by 2002:a05:6820:905:b0:6a3:f597:7552 with SMTP id 006d021491bc7-6b0d7408188mr8771074eaf.35.1786754917253; Fri, 14 Aug 2026 17:48:37 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6b0d9574d7csm3240730eaf.2.2026.08.14.17.48.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 17:48:36 -0700 (PDT) From: James Hilliard Date: Fri, 14 Aug 2026 18:46:15 -0600 Subject: [PATCH net-next 1/3] driver core: factor sync-state-only link cleanup 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: <20260814-submit-phy-package-fwdevlink-v1-v1-1-2319844f057a@gmail.com> References: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> In-Reply-To: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> To: Rob Herring , Saravana Kannan , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Christian Marangi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, netdev@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 device_links_driver_bound() drops managed sync-state-only links after a consumer successfully probes, then re-evaluates each affected supplier for a sync_state() callback. Frameworks which populate child devices below a driverless device need to complete the same lifecycle step, but cannot rely on a successful driver probe to trigger it. Factor the existing cleanup into a lock-held helper and reuse it from device_links_driver_bound(). Add a public locking wrapper so frameworks which populate children below driverless devices can retire temporary fw_devlink proxy links without affecting real dependency or runtime-PM links. Signed-off-by: James Hilliard --- drivers/base/core.c | 74 ++++++++++++++++++++++++++++++++++++++--------= ---- include/linux/device.h | 1 + 2 files changed, 58 insertions(+), 17 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index 4d026682944f..627fcfa274f0 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1305,6 +1305,57 @@ static void device_link_drop_managed(struct device_l= ink *link) kref_put(&link->kref, __device_link_del); } =20 +/* Caller must hold the device links write lock. */ +static void __device_links_drop_sync_state_only(struct device *dev, + struct list_head *sync_list) +{ + struct device_link *link, *ln; + + list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) { + struct device *supplier; + + if (!device_link_test(link, DL_FLAG_MANAGED) || + !device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) + continue; + + /* + * DL_FLAG_SYNC_STATE_ONLY excludes all other managed link flags, + * so it is safe to drop the managed link completely. + */ + supplier =3D link->supplier; + device_link_drop_managed(link); + + if (defer_sync_state_count) + __device_links_supplier_defer_sync(supplier); + else + __device_links_queue_sync_state(supplier, sync_list); + } +} + +/** + * device_links_drop_sync_state_only - Drop managed sync-state-only links + * @dev: Consumer device whose proxy links should be dropped + * + * Frameworks which populate child devices below a driverless device can c= all + * this after adding all of the children. The children will have acquired = their + * own links by then, so the temporary links which only prevent suppliers = from + * receiving sync_state() callbacks are no longer needed. + * + * Re-evaluate each affected supplier for a sync_state() callback after its + * link is dropped. + */ +void device_links_drop_sync_state_only(struct device *dev) +{ + LIST_HEAD(sync_list); + + device_links_write_lock(); + __device_links_drop_sync_state_only(dev, &sync_list); + device_links_write_unlock(); + + device_links_flush_sync_list(&sync_list, NULL); +} +EXPORT_SYMBOL_GPL(device_links_drop_sync_state_only); + static ssize_t waiting_for_supplier_show(struct device *dev, const struct device_attribute *attr, char *buf) @@ -1418,6 +1469,8 @@ void device_links_driver_bound(struct device *dev) else __device_links_queue_sync_state(dev, &sync_list); =20 + __device_links_drop_sync_state_only(dev, &sync_list); + list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) { struct device *supplier; =20 @@ -1425,17 +1478,10 @@ void device_links_driver_bound(struct device *dev) continue; =20 supplier =3D link->supplier; - if (device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) { - /* - * When DL_FLAG_SYNC_STATE_ONLY is set, it means no - * other DL_MANAGED_LINK_FLAGS have been set. So, it's - * save to drop the managed link completely. - */ - device_link_drop_managed(link); - } else if (dev_is_best_effort(dev) && - device_link_test(link, DL_FLAG_INFERRED) && - link->status !=3D DL_STATE_CONSUMER_PROBE && - !dev_can_match(link->supplier)) { + if (dev_is_best_effort(dev) && + device_link_test(link, DL_FLAG_INFERRED) && + link->status !=3D DL_STATE_CONSUMER_PROBE && + !dev_can_match(link->supplier)) { /* * When dev_is_best_effort() is true, we ignore device * links to suppliers that don't have a driver. If the @@ -1449,12 +1495,6 @@ void device_links_driver_bound(struct device *dev) WRITE_ONCE(link->status, DL_STATE_ACTIVE); } =20 - /* - * This needs to be done even for the deleted - * DL_FLAG_SYNC_STATE_ONLY device link in case it was the last - * device link that was preventing the supplier from getting a - * sync_state() call. - */ if (defer_sync_state_count) __device_links_supplier_defer_sync(supplier); else diff --git a/include/linux/device.h b/include/linux/device.h index aee79fd6b32b..8afb9f2b0d82 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -1381,6 +1381,7 @@ struct device_link *device_link_add(struct device *co= nsumer, struct device *supplier, u32 flags); void device_link_del(struct device_link *link); void device_link_remove(void *consumer, struct device *supplier); +void device_links_drop_sync_state_only(struct device *dev); void device_links_supplier_sync_state_pause(void); void device_links_supplier_sync_state_resume(void); void device_link_wait_removal(void); --=20 2.53.0 From nobody Mon Sep 28 23:55:26 2026 Received: from mail-oo1-f43.google.com (mail-oo1-f43.google.com [209.85.161.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABF5E23BD06 for ; Sat, 15 Aug 2026 00:48:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754921; cv=none; b=bVBfFgNMEj9yiNmsVdfQOXg1Jyyd8k1TpIENnQKR1HMis4SmyPHTC3aPp4/dJr3BZsrfTWpNNuEyXfJiRvpexLW5VWlOWjUBy1XUua3HRsrQrXdCedha/GSdt54/HsDSPzRjtnJs4XMap1AbJAFhSZnzs8FCWpWYynVsVUoory8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754921; c=relaxed/simple; bh=w+LhzNyKmZfjHXx/GmE0qF8XZ+mdBicKEri2vAY7vLw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=huJh6Gnucf2XHu+NfJweeM86wrNbsd7tAf+XNnsR4yls/1CfIEFZxziGRMj9tf0DKopJPoeU7AFmlBOPv+l2hj8wMwq10QPgB1tgKAlvGEZYPV9P/qd6voEsuXNFb4YUYRmO4IWJGYJL1Px8SxkWw7yABQyVkCSek4uokUuonQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lsz8WpbE; arc=none smtp.client-ip=209.85.161.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lsz8WpbE" Received: by mail-oo1-f43.google.com with SMTP id 006d021491bc7-6b04c0b9159so1003183eaf.3 for ; Fri, 14 Aug 2026 17:48:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786754918; x=1787359718; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1EURhxKL3TrXjvLpoGsii38tCfdVB5DjMF9c8u1cOGE=; b=lsz8WpbEhzobrbX7mhkCfYVjv0YK8l6+OSMvm18jsjL751XgawbmCx56/NbSVwJY0M yH6+pEKO8VTA+o6KLTAIhQwz4wdP8Y6bSKnpNwNu471mv2uxC37fDcWgYLLWiG/eJkn+ Xp8/YT7eW6lV/nLLWR3oxvc2WBauAPjyP4G2tAkozVWE7pZT5DEd3SgPgou89oC2JC1L TDq9YipQqcjwqk1RqEDHm5YZFEU9tb1vAaL6IKPrj6ciFmMEJjoiNcbfx54/cG0/HkTG xczwnpuo9HoVvxl+OlCfGMdnMIgTh76ZHunU41Kf0s4TZ9Bhqi7Ec2Fgx4Jbklau6qak jR5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786754918; x=1787359718; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1EURhxKL3TrXjvLpoGsii38tCfdVB5DjMF9c8u1cOGE=; b=ETc3LG5qxm0kzMOAkB/ZG47yardfVhC0zqVps6WQxEXiqSudL6fvhGzYptz0MJ7t2F qvmYRsLMo47lQYc7vspnHsbB/viZIs77XhJoRHRJxFpdGV3ZPrh4SL83+hksUjrsU7Rf O9fchDXvR8Y5bdZXDLC5Ma1SaleIkGSQzq1Rr4T/3pSpchO5FW4rKGdyZHP9NJCq+VNy YFlUILwRVNQ9mqYM7AIfkWE6JmgL/E7sg9xzRT8AiPcqqXYWg8vIs5wVul0haEQ/5SbG Rlhtp1xBMiYecpXAQfEdaQ5XUM6loLD+tv+WfrMbDn5LUJQyUD+d4mRbGxTSG5JASZeb klFw== X-Forwarded-Encrypted: i=1; AHgh+RprIir8hyekX45A2QVUaIZvR10Yi0aOWeMbkk2kuI1UN8elCAO6cFBbeFjRjlhGjZT6Jk2MWeKY09PDPqA=@vger.kernel.org X-Gm-Message-State: AOJu0YwjQ9D/HhgaJhLTS9zAez71375qF2IBc7AaD/KmYgG5jhNkvhXo Kvm4I4hC6yOdgNa4EEFYB8reVgPp1KoGaPINHfpbdARMosGn37jCuHpc X-Gm-Gg: AR+sD13qjC6qbCTDBgb+M573euo2VYta/b338T5U9uppyvz/VdHvD8wvnU2NlHgziSU 21syt/Ukni+M9E18CeYdmmzUg0QUkBignlumShrHVWe6Ga8zNNpsUUSt0mxSp4ZKJgCfhM2oEO3 yPo9jLv+50yZQWVc+SDHyLK/XqaNfPJpAqvM/qOga4p6aU9RqBoe6Bphx4XRUuW5vcP0eIpJ2Rx Ib3Rg8DtUw/k1BfdfP0n7DW0FKHYYSWttyIGfV7w6xTrOM8AwYlGGxlWRsBzIAIl57cqnnPZiLC BbO0F8X3xdHigwduxrwrxMEfaA1ajdDS31QKn5wFG2sMTfhMTKXBSAg1e4FijxStzgLRgDju93K iotFJWZmEKCA+v/2yjm1vfRZSnVnoQ2NjJlEo3WpxOcJQ/0BO+fIkmc6Jsgu7cvOa9JYxNjiyrT rWBTDbajPVNmwkqY8g5w1k9/6RZ3QODJ9/GjTpu8D7M7L4ApP/zN0RDlDQYOM+wd+rd0uVnP0Dt AGQOIvEA0nVG0Ht+mFp9szLdCZB47myFw8j7K+UCua7OIL/QK5ZZHsVxJl6mUlsqChPS+0dyFM2 43UJSKae/ScHuYl6M4LGd7tnnVSu4z4OUb/dB0TJLPxQtjR6IUllr1V4ApURs8LdaDz5nQDMDxO 2PGHsw7qO+DxKWlYy X-Received: by 2002:a05:6820:4b07:b0:6b0:abaa:bd3 with SMTP id 006d021491bc7-6b0d614726cmr8530774eaf.9.1786754918519; Fri, 14 Aug 2026 17:48:38 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6b0d9574d7csm3240730eaf.2.2026.08.14.17.48.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 17:48:37 -0700 (PDT) From: James Hilliard Date: Fri, 14 Aug 2026 18:46:16 -0600 Subject: [PATCH net-next 2/3] of: property: link PHY package suppliers to member PHYs 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: <20260814-submit-phy-package-fwdevlink-v1-v1-2-2319844f057a@gmail.com> References: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> In-Reply-To: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> To: Rob Herring , Saravana Kannan , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Christian Marangi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, netdev@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 Ethernet PHY package nodes describe shared resources for their member PHYs, but are not populated as struct devices. fw_devlink consequently represents the package dependencies with proxy links to the closest ancestor device. The MDIO bus is a class device without a driver, so such a proxy can remain available indefinitely and prevent a supplier from receiving its sync_state() callback even after every PHY has probed. Treat every enabled member PHY as a consumer of the common package suppliers. The links can then be converted to links for the real PHY devices and retired through their normal driver lifecycle. Fixes: 385ef48f4686 ("net: phy: add support for scanning PHY in PHY package= s nodes") Signed-off-by: James Hilliard --- drivers/of/property.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/of/property.c b/drivers/of/property.c index 72cf12907de0..f29ba818ecbc 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -1272,6 +1272,20 @@ static void of_link_to_phandle(struct device_node *c= on_np, tmp_np =3D of_get_next_parent(tmp_np); } =20 + /* + * An Ethernet PHY package node describes resources shared by its member + * PHYs, but is not populated as a struct device. Link every enabled + * member PHY to those suppliers so fw_devlink can use the real consumer + * devices instead of leaving a proxy link on the MDIO bus indefinitely. + */ + if (of_node_name_eq(con_np, "ethernet-phy-package")) { + for_each_available_child_of_node_scoped(con_np, child) + fwnode_link_add(of_fwnode_handle(child), + of_fwnode_handle(sup_np), flags); + + return; + } + fwnode_link_add(of_fwnode_handle(con_np), of_fwnode_handle(sup_np), flags= ); } =20 --=20 2.53.0 From nobody Mon Sep 28 23:55:26 2026 Received: from mail-oo1-f52.google.com (mail-oo1-f52.google.com [209.85.161.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EB8BD261B71 for ; Sat, 15 Aug 2026 00:48:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754922; cv=none; b=UaFe5VW+862HfLIgwZ+rxoz2Y+qroo9CTfE3nKe3fXG2F22i/PCbafQd9KU0jTQQIs/2FuGeovkm9/qL2OLiiU+X3hAp2ASmcmQ2tIziMbpaV54GljES9aMy0Qs37l+7RCYAwdbmQIxH+c82GX+mV2NFzx3JDnynNIIGyS/IUmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786754922; c=relaxed/simple; bh=1LnCRgjE5GrtVilnDq6Mw+CJnt8OEZLKDembPlnG1UE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PSvI99viecoJCDTE6h5YPvzSl/jeKNt1Eq0KmvCnICzZxMMOwdkb0sXYYT9fAANFR+/1T+5wvO+HdrQns1YKePgoH4rZCsiWLo+6epiUrnOXcJ3JR3LdFrXfIFhFKiNFNWlunLlv6N6QmAcIQ/I7yi+ynRV7+fMQLZO1bOvcYww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=biDmOmnD; arc=none smtp.client-ip=209.85.161.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="biDmOmnD" Received: by mail-oo1-f52.google.com with SMTP id 006d021491bc7-6acbf97e9a1so1082437eaf.1 for ; Fri, 14 Aug 2026 17:48:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786754919; x=1787359719; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Kbg4qcFK/mBxoYXCkGvYYK5TXUGZpjr2DCvrJZaXNS8=; b=biDmOmnD7DTVdha8hx+DQkfJo+m7eWvL2KNHnqgpVwgSSBQp4dOSCQPg2JstGhupJZ jLCmqX9/opdGbGpQ6VCF2jtojZ/XPIw2RT49PkObJiL9A0lkqYMjAF529RapyAHlSqZ8 CFPOA70KWgu223eIeQaXrx5HR1l/8TVpcv8EALoO3sPJPcLMpZBoUIMN0T48HUpu9jO0 37RxqNjymsIGuyzmQ4GhjIvh9QQyiWlLLuIOLbRPODyrQNNm5eoUZZIEcR7tWKppgn3M HJ7FVSiGMbwbqqfJLxMBSvMWJ5irY8iYLLHZ2um3OC3sHOdTO0A345PHRsZ/cOmm/Ket /xGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786754919; x=1787359719; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Kbg4qcFK/mBxoYXCkGvYYK5TXUGZpjr2DCvrJZaXNS8=; b=fKxMkHW/s3UUJtatQYInoGPGPP7UmCskUpDWgqXCaVALiGOUOQPbjSm9tDGKcYwx12 p+L8v0oo1ybYXuLl9r0JwTrLXzlg0DxEBTkbtCGkidH5TMpHQtEwj7RfUyfqImesOut/ 1Ah7myPW6v+1YkwzEqyLpChTDXX5kqegn63QIUQHOX4CseHC93ENzTcxhiS/vpvqUJ6P U++xU0jycGWfX3xfr16GxLPkzp2M6h4qrnBAtmYkZJnBzkvYd+8ddVzRpZnvfoemp8yO ohNPRJSsNUdNOB28l29sfoR/5Jx59IoPM8CZ41d/T2WwBRArikJv+LoL9stOKLRIcl2I SbCQ== X-Forwarded-Encrypted: i=1; AHgh+RoFXM1Ehs7T74z+ntx2lOAY94UJV+fEglLzGZLCNQkwxzw1ugStL3nLpYGf5vBHMQ6g4h0hSGBkVtV1/M0=@vger.kernel.org X-Gm-Message-State: AOJu0YzEHZ00lE+aHjUIEXHddA1DHScNFeKGN33+MaUtRF0RPS5Nh18V 5OBPkdk9nd91Hgq7ioggsgCOK1fKK/8mo54yewTz/hVJvI0egO0dDNFV X-Gm-Gg: AR+sD10snL3mpuV2Kx8Wqe5B1nFzpO5i9paLKCyy3WuicNbeC7hZe/zwpUJ8LeKf/t/ T8uFtiwWdWDdszHzkBMvy9DkTSiptDEcTZGVFe7wwSPX+MNR0ygmBOcvHGRR6VGQ9ujarU187zs ynG7cGyU6Ai3ogKobsMbfzHlmbvoYj+k2vtFxvhGmNbum8QXra+GtMY1CgF5qdlb4pEpFhukR3a avfDiIPKUb4znv6pKqfrlh6dsZG/ihvj2+LMJdCH6Scm9Kuyd+lq9iGeFhXyVNZ6Oc3mbw9V2YG hyN9UOpgMUakm5ivxOgSLx+lgmafwucRlbFRni/Ezbcxe0xCCMiuKG1bf+gr+zKLLO/iT8qv/Kk WQys5HtrvROroBiBOx3SUtZRiXn90ByqPycs7u2nRmtAPd/ta4Iz6B/qe4aNimsLdfvXfZm7A+h 9ySCv8LE6NaagCAcBblRo2CpmpdxCX5+RbVDM367dhFDJyZKvPzh9vyDysy3OMDhY1EVzggG61u dJuXnpta+d7QnS3HHMNpUl1gV0B5Tf/q2v2isDew50ZvHhX2rSlssxzuCMiAW9Ed6svnZa73h5r /rnaU4f1wEZXoDXhOjX7sEzyC9pwwSZSTZ06n6odkxG1xl1l9/t8h7HJKAqoGb3Ct2FBr5pccMl De81NFraAGFpD9usSyg== X-Received: by 2002:a05:6820:2916:b0:6ac:9729:6710 with SMTP id 006d021491bc7-6b0d6a8e9b9mr8697804eaf.18.1786754919602; Fri, 14 Aug 2026 17:48:39 -0700 (PDT) Received: from [127.0.1.1] (184-96-154-59.hlrn.qwest.net. [184.96.154.59]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6b0d9574d7csm3240730eaf.2.2026.08.14.17.48.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 17:48:39 -0700 (PDT) From: James Hilliard Date: Fri, 14 Aug 2026 18:46:17 -0600 Subject: [PATCH net-next 3/3] net: mdio: release fw_devlink proxies after population 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: <20260814-submit-phy-package-fwdevlink-v1-v1-3-2319844f057a@gmail.com> References: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> In-Reply-To: <20260814-submit-phy-package-fwdevlink-v1-v1-0-2319844f057a@gmail.com> To: Rob Herring , Saravana Kannan , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Christian Marangi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, netdev@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 fw_devlink creates sync-state-only links from the closest existing ancestor device to suppliers of child devices which have not been added yet. It normally drops those proxy links when the ancestor driver finishes probing. An MDIO bus is a driverless class device, so successful OF population never reaches that lifecycle point. Its proxy links can consequently remain forever and prevent suppliers from receiving sync_state() even after the real PHY devices have acquired and activated their own links. Call the driver-core cleanup helper after successful OF MDIO population. Only sync-state-only links are removed; the real PHY links continue to enforce dependency and runtime-PM ordering. Signed-off-by: James Hilliard --- drivers/net/mdio/of_mdio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index b8d298c04d3f..49f9b4062cf5 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -229,7 +229,7 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct = device_node *np, goto unregister; =20 if (!scanphys) - return 0; + goto done; =20 /* auto scan for PHYs with empty reg property */ for_each_available_child_of_node(np, child) { @@ -261,6 +261,9 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct = device_node *np, } } =20 +done: + device_links_drop_sync_state_only(&mdio->dev); + return 0; =20 put_unregister: --=20 2.53.0