From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 402FA43BDBC for ; Tue, 18 Aug 2026 09:50:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787046631; cv=none; b=rFhTGNnZoG5VjWpLOU8VoFwuNa8hIIc8qaL8uV2fe6ipXluXMAsj/OonVg0smIpm9WsBFpWsUdbPfOaXzDY+efQjtpBb7bhQC1/aa/k25zSJQAmNYly901L2TF+z6XoWI4bDRi3udIZRD7rq9YpKrclln3dqltUljfvFTS3d8Cs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787046631; c=relaxed/simple; bh=HcpByxAQDcFBFS1iZYTXysptjWMt0ebtKELnEXEThjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nQ8QFUUytWSxDlq9CVrCndPOQmlnD1B066fDeOm4eVdVdIjjHaDjcHLPpEyHPgnpmaOgKeW57lmcQKWpL3or3/RcBwc2UMxpb5WU+tWv4fwmdBjh6byGE3m/M1K/4uU8uaac8bosV6D/ETRKFLMhpe53USvJu8Kx+/mQhcmpsd0= 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=pRx8fq79; arc=none smtp.client-ip=209.85.214.182 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="pRx8fq79" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2cacf197759so60571875ad.2 for ; Tue, 18 Aug 2026 02:50:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787046630; x=1787651430; 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=pRx8fq79UzThhUombIBC52DoYCM/NVCEKqEZBD67SSyFKrCBR6sU1HOvbXEy14mX6R TX1UgypMae4vSMlvSJ98RZJ4VLGXlR1jO9YwRIaJcufpW43jxg7mx4dZ5Mx9XRHOpskA F9+fFRrfRQtwTGanf2RbZtuoo03J1OlSA+7s3HM0xWM436+uG6rwG/FzF8MRECs4X0y9 rlnQXYV1Yx9MjMlIhxNwUsr5zQOZH5rigQwdWxQZFD93Ho16Go9AnM7JegqIOBvvCNdv e+v2gbHFdxZLH/FqikvYTq7obxfFyqiTgPClTpNh5251SAbZJ9qJWgxri8sT/+ClKd88 CV8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787046630; x=1787651430; 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=TB6FOc8Qi81CZzVhHSJo3quVtJwQhhpVSXItvSL5KtkuplAFJZi7PeZMzo586hoeo3 w8h0Dpoxaxci68Rj0u2jvCpyB8hJF8JnRJS8w8gHaRwepbx9dNzmJJa1g5eBBweqsKZj 02k9KlPPw5g5rIbZCq5aGvrjWKDvUDpYWchRh+uNJmdc3YLEOUCMrbX93hca0SAHXyg/ zdpZWWWzqjbotTf3EkaLZf3CMqVI4G7P9HhqKTMpwAVxU26grKxqbD8MCx8+0ZbH2qzl wEvB9whu445rcEbwwRIdN7qQVFOjBdw7YJovUh+3kKcr436oBLx4bBanu+PRmYQlQb61 DmNA== X-Forwarded-Encrypted: i=1; AHgh+Rohd/QZ7nLuHx+TpkgJZHztfF6qykDn17GAm46XAHx9s/7D4HYY9ICJ7aITA2ceRkj1MFiAO+Jm4+GOY1Q=@vger.kernel.org X-Gm-Message-State: AOJu0YxM0eoCunBuvbm83OIdfEdoCyrE8fTFazN6nxOoE06ShXtBYX7O MWKYPRzr6yY31b+c4VgNKuJvnLZcQT7EDlYhXGXdgE9RsvQamNIOxgg= X-Gm-Gg: AR+sD10M2M7+XqWgHrELD4WiE3icLzodX4W/cap0yk+jYTBo8M13D0u/Af3fP3nlgbB dO5Uzyu6p7PRtyKlI+Njy/PmONGKtZo/ypuAJALRk15o8pYugjNtda/PtWFV09+9C3AzlXroqVi RwWACiTbvxmpPTN5tcuB0qFSs+hxwfjg/Lxo17r9lyIpF7jW+QaHgbJeQhmLeGyiYHpoG5YrEoU 00jKeUO6Wd0d/qwsEsQaVrkkc/YJW3RLnB/6ArB7SU8jOb+YZq/Oyu+bciE0RY1p/joBOyrxGDa 5Hvte1IyTfBxtVXjIcvaBogWm7H9sn7uZb1vEGtyECZSBsSrr0FrGVnn8wzUqOHJDVzAuRpTV4f FYiBVupe/kBM1npkah5IL/r6K/SkrldWWAwZtovdrGUkZ69miODaxeCwsPKqb6ar/dHfFRyYXtl AQ7Vuln4bDqjAeclo70z43u95VUhJ499+UwC2OqEEMfSLq52BmiPy8blcGZKlnMgrI39FyoiiyP hajc5v3H31Ib5zOjP+T4JE= X-Received: by 2002:a17:903:98b:b0:2d3:14c6:2372 with SMTP id d9443c01a7336-2d3b080bf23mr406145225ad.1.1787046629608; Tue, 18 Aug 2026 02:50:29 -0700 (PDT) Received: from at-Standard-PC-Q35-ICH9-2009.. ([14.97.72.18]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-326798cb9f5sm18466759eec.13.2026.08.18.02.50.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 02:50:29 -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 v9 3/3] thunderbolt: Add device links for Apple systems with Icelake thunderbolt Date: Tue, 18 Aug 2026 05:50:04 -0400 Message-ID: <20260818095010.1857-4-atharvatiwarilinuxdev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260818095010.1857-1-atharvatiwarilinuxdev@gmail.com> References: <20260818095010.1857-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