Browse Source

cnss2: Restore HSP PCIe link speed to Gen2 after enum

Because HSP may meet pcie link issue if working on Gen3 speed,
auto SPs decide to enum HSP using Gen1, and restore to Gen2 after
enum. We will not restore to default Gen3 speed.

Change-Id: I0d2a2189bcd55e2649d34e7a8d9c18ebbfab86f2
CRs-Fixed: 3821700
Yu Ouyang 1 year ago
parent
commit
6fc69546c3
1 changed files with 17 additions and 6 deletions
  1. 17 6
      cnss2/pci.c

+ 17 - 6
cnss2/pci.c

@@ -7455,16 +7455,27 @@ static void
 cnss_pci_restore_rc_speed(struct cnss_pci_data *pci_priv)
 {
 	int ret;
+	u16 link_speed;
 	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
 
-	/* if not Genoa, do not restore rc speed */
-	if (pci_priv->device_id != QCN7605_DEVICE_ID) {
+	switch (pci_priv->device_id) {
+	case QCN7605_DEVICE_ID:
+		/* do nothing, keep Gen1*/
+		return;
+	case QCA6490_DEVICE_ID:
+		/* restore to Gen2 */
+		link_speed = PCI_EXP_LNKSTA_CLS_5_0GB;
+		break;
+	default:
 		/* The request 0 will reset maximum GEN speed to default */
-		ret = cnss_pci_set_max_link_speed(pci_priv, plat_priv->rc_num, 0);
-		if (ret)
-			cnss_pr_err("Failed to reset max PCIe RC%x link speed to default, err = %d\n",
-				     plat_priv->rc_num, ret);
+		link_speed = 0;
+		break;
 	}
+
+	ret = cnss_pci_set_max_link_speed(pci_priv, plat_priv->rc_num, link_speed);
+	if (ret)
+		cnss_pr_err("Failed to set max PCIe RC%x link speed to %d, err = %d\n",
+			    plat_priv->rc_num, link_speed, ret);
 }
 
 static void