From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) (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 85C7C3890E0 for ; Mon, 24 Aug 2026 18:43:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787597018; cv=none; b=lkRRJuz+a6uz4KE4wYuQLZBWGvxY1D3Fvu9csZCnCGLMteliu+0SFUK90A9qA29cXacvKzrl2Gj21T9VMOvpABcoHTIkGb6EL2LWvGqBiHTxOy6bwnrrfbj6578PNTkBL/bMr85xyl4BjarGpEWfC2zAU5YtEvIxQv7Hqu6nQKc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787597018; c=relaxed/simple; bh=HcpByxAQDcFBFS1iZYTXysptjWMt0ebtKELnEXEThjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HT5hbyNXVQlBhL+9jzOs1p8pyvBlKeHsj3wrTGVOAesBhM9sVFbOI+md8ZBRraVvJonGE90ZmpgBADkpkQI30pgN3PwQdrLe5KMeAUoyepCe2sSZWkjrbeaHuWd/pvC+tRbKR/w5EHvrByKS4yEBvF/2P0oDMG9EHf31T3TvJng= 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=lgey97YD; arc=none smtp.client-ip=209.85.215.176 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="lgey97YD" Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-c9d1fff21edso3142104a12.1 for ; Mon, 24 Aug 2026 11:43:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787597017; x=1788201817; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tZFHBXGZUMkxzk8eLLV1Kkc86VgN87uR+OevDtKNiZQ=; b=lgey97YDEg8965CQJz84QcavTNzfP+8hXb7VjEwPj4tp5bv/oScPvsYU19lxC1ofZY cc/AgRRzQP9whrZUQE0E0VCZpi0iAfIYjxo3645IEPxW+dDppEiIIzDDAUOgE222b0Ml KxiT0ItjXTIimeHA/2pw55qmSdy1wVBrqtRHxFI9j4948Xr0TBz6ev0q+4cGP5C3WRxA Ane3aqYmGHzqtWeyQxvLitaaMn8tsOm2SLM1pPNM9n1hOPtrULZ9mVJdWtn/cF/0Sj+G 1HqZ1QykvzgMQ7VTUWEZcf5hMCmrumMPurA9fScprgSfb4nDwlGMGUllIUp/eJPCVh3J TzBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787597017; x=1788201817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=tZFHBXGZUMkxzk8eLLV1Kkc86VgN87uR+OevDtKNiZQ=; b=jw6mzqWSWFDqQi+iMbWk+Um5a4P2WhDltFVlpQmu2wb8XHSebv36p/pgQ5Nx8MYya2 5Qludiy52GWlkbrn41+mmUaVB+qw09pOebK8xuAKbgDrYXSfbzE1xQfOsHR3NUvaLwt8 aQR18I1DJDjrjjMjcwhKDFxDnJu0h/LtCQ1vq+Az8tpT/Apd09syt6NHloUHS/8E1TFx ZeTKNJCQm30ahnsSFeRHWWieEi3zDQc23d3100YgEwbRQplhDckzaiYSPoVOZyU8tv0N GtJACk1NAoaVTIm3s8PcQp59aviy0jFveQlz2c4LRyj+Ok/79Q+n8XPems2pV9Kx/3kZ LEZQ== X-Forwarded-Encrypted: i=1; AHgh+Rq5j75NI6IXCy5s8+eFiMJmVxvJ8lYAJlEiBRNZqwe/QTkKlSy6f4Y0RTbpf6GBShyPCiQworsMoLB3IhM=@vger.kernel.org X-Gm-Message-State: AFuF++k9VLVqYb7hCayu836hmOFcuWlnwMqN+zM16RhT8IagTO2wd6wN 0zqV5Rp9L+w6BneuxPmJZw3/cuFXbnMpqk8hLhTN7hd4xjNaA04zgPc= X-Gm-Gg: AR+sD11eNhcw+QTQWn61yV2lciqumLGmPByGcfB9nDiFeawP65N9PAM65QzlwdPno1O 0ZeonImOVm6etEPIW9gtYGRB9gbKNY47KVmpy8/aUS3fpclHCMyw4pSl7qOx3MLWjs1xpCv0SOK E/ez4llt0yyB3AiCPEtjYQIoikq7n4jzs0QHRMNuYSa6t3wxe08P7FiwMr2I4rIMIkN13RRutdQ eTaRptTcDXvfw7iEuGpiFvgpwr5brVAZ3aYRxUE2A7YZQTuoE2ludiXmhQr6ekjj/h6F8XSStJ9 nK+PFLgsbTrMaRN6sewbMDEwxWFxLoLUqnWvokWaTHz2RkvNpqz7FaLq9zS1tonfKvMq27+Z6c0 BymP6grOYWKuH3nisiMRjdTa80Q1mJgkQqx3l8a5dkAJq61ZNvVzVr/a3h+CUBRVf9o0L3cpfUq FjN8lfkuwQ5WCj49GzJLawqd/sfI6sk/laX4jbAYziq+lXH66SwjyGATnNADcFjzUKwm7fb0Ffr isZNF8q/Pbn28phqIrtDHo7 X-Received: by 2002:a05:6a20:7288:b0:3c3:6b6e:8ba0 with SMTP id adf61e73a8af0-3cd3008a6f1mr46462634637.11.1787597016885; Mon, 24 Aug 2026 11:43:36 -0700 (PDT) Received: from at-Standard-PC-Q35-ICH9-2009.. ([223.228.8.56]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327f91d2d1esm29781367eec.17.2026.08.24.11.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 11:43:36 -0700 (PDT) From: Atharva Tiwari To: Cc: Atharva Tiwari , Alexander Fischer , Andre Eikmeyer , Andreas Noever , Mika Westerberg , Yehezkel Bernat , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH RESEND v9 3/3] thunderbolt: Add device links for Apple systems with Icelake thunderbolt Date: Mon, 24 Aug 2026 14:42:56 -0400 Message-ID: <20260824184305.1234-4-atharvatiwarilinuxdev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260824184305.1234-1-atharvatiwarilinuxdev@gmail.com> References: <20260824184305.1234-1-atharvatiwarilinuxdev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Ice Lake Thunderbolt NHI That are on some Macs. The NHI and its associated PCIe Root Ports all sit directly on the Root Complex with no upstream port. Identify the tunneled PCIe Root Ports by their PCI IDs and create device links back to the NHI so that PCIe tunnels can be re-established after sleep. Tested-by: Alexander Fischer Co-developed-by: Andre Eikmeyer Signed-off-by: Andre Eikmeyer Signed-off-by: Atharva Tiwari --- drivers/thunderbolt/pci.c | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/thunderbolt/pci.c b/drivers/thunderbolt/pci.c index 945e553dc..885fb9966 100644 --- a/drivers/thunderbolt/pci.c +++ b/drivers/thunderbolt/pci.c @@ -490,6 +490,45 @@ static const struct tb_nhi_ops icl_nhi_ops = { .init_interrupts = nhi_pci_init_msi, }; +static bool tb_pci_add_links_icl(struct pci_dev *nhi_pdev) +{ + struct pci_dev *pdev; + const struct device_link *link; + bool ret = false; + + for_each_pci_bridge(pdev, nhi_pdev->bus) { + if (!pci_is_pcie(pdev) || + pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT) + continue; + + switch (pdev->device) { + /* Ice Lake Thunderbolt 3 PCIe Root Ports */ + case 0x8a1d: + case 0x8a1f: + case 0x8a21: + case 0x8a23: + break; + default: + continue; + } + + link = device_link_add(&pdev->dev, &nhi_pdev->dev, + DL_FLAG_AUTOREMOVE_SUPPLIER | + DL_FLAG_PM_RUNTIME); + if (link) { + dev_dbg(&nhi_pdev->dev, "created link from %s\n", + dev_name(&pdev->dev)); + ret = true; + } else { + dev_warn(&nhi_pdev->dev, + "device link creation from %s failed\n", + dev_name(&pdev->dev)); + } + } + + return ret; +} + /* * During suspend the Thunderbolt controller is reset and all PCIe * tunnels are lost. The NHI driver will try to reestablish all tunnels @@ -512,6 +551,9 @@ bool tb_pci_add_links(struct tb_nhi *nhi) case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_NHI: case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_NHI: return tb_pci_add_links_discrete(nhi_pdev); + case PCI_DEVICE_ID_INTEL_ICL_NHI0: + case PCI_DEVICE_ID_INTEL_ICL_NHI1: + return tb_pci_add_links_icl(nhi_pdev); default: return false; } -- 2.43.0