In order to keep PCIe hierarchies consistent across hotplugs, add
hard-coded PCIe downstream port to Thunderbolt port for Alpine Ridge and
Titan Ridge as well.

Signed-off-by: Mika Westerberg <mika.westerb...@linux.intel.com>
---
 drivers/thunderbolt/tb.c |  4 +++-
 drivers/thunderbolt/tb.h | 25 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
index dbbe9afb9fb7..704455a4f763 100644
--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -344,10 +344,12 @@ static struct tb_port *tb_find_pcie_down(struct tb_switch 
*sw,
                 * Hard-coded Thunderbolt port to PCIe down port mapping
                 * per controller.
                 */
-               if (tb_switch_is_cr(sw))
+               if (tb_switch_is_cr(sw) || tb_switch_is_ar(sw))
                        index = !phy_port ? 6 : 7;
                else if (tb_switch_is_fr(sw))
                        index = !phy_port ? 6 : 8;
+               else if (tb_switch_is_tr(sw))
+                       index = !phy_port ? 8 : 9;
                else
                        goto out;
 
diff --git a/drivers/thunderbolt/tb.h b/drivers/thunderbolt/tb.h
index e641dcebd50a..dbab06551eaa 100644
--- a/drivers/thunderbolt/tb.h
+++ b/drivers/thunderbolt/tb.h
@@ -632,6 +632,31 @@ static inline bool tb_switch_is_fr(const struct tb_switch 
*sw)
        }
 }
 
+static inline bool tb_switch_is_ar(const struct tb_switch *sw)
+{
+       switch (sw->config.device_id) {
+       case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_BRIDGE:
+       case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_BRIDGE:
+       case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_BRIDGE:
+       case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_BRIDGE:
+               return true;
+       default:
+               return false;
+       }
+}
+
+static inline bool tb_switch_is_tr(const struct tb_switch *sw)
+{
+       switch (sw->config.device_id) {
+       case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_BRIDGE:
+       case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_BRIDGE:
+       case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_BRIDGE:
+               return true;
+       default:
+               return false;
+       }
+}
+
 /**
  * tb_switch_is_icm() - Is the switch handled by ICM firmware
  * @sw: Switch to check
-- 
2.23.0

Reply via email to