Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23bd62b4 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Retry if PCI link traning fails during power up"

parents 1ef75670 fde95acb
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -606,6 +606,9 @@ static int cnss_show_quirks_state(struct seq_file *s,
		case ENABLE_DAEMON_SUPPORT:
			seq_puts(s, "DAEMON_SUPPORT");
			continue;
		case IGNORE_PCI_LINK_FAILURE:
			seq_puts(s, "IGNORE_PCI_LINK_FAILURE");
			continue;
		}

		seq_printf(s, "UNKNOWN-%d", i);
+1 −0
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ enum cnss_debug_quirks {
	ENABLE_PCI_LINK_DOWN_PANIC,
	FBC_BYPASS,
	ENABLE_DAEMON_SUPPORT,
	IGNORE_PCI_LINK_FAILURE,
};

enum cnss_bdf_type {
+20 −1
Original line number Diff line number Diff line
@@ -138,6 +138,9 @@ static DEFINE_SPINLOCK(pci_reg_window_lock);

#define QCA6390_WLAON_QFPROM_PWR_CTRL_REG	0x1F8031C

#define POWER_ON_RETRY_MAX_TIMES		3
#define POWER_ON_RETRY_DELAY_MS			200

static struct cnss_pci_reg ce_src[] = {
	{ "SRC_RING_BASE_LSB", QCA6390_CE_SRC_RING_BASE_LSB_OFFSET },
	{ "SRC_RING_BASE_MSB", QCA6390_CE_SRC_RING_BASE_MSB_OFFSET },
@@ -436,8 +439,10 @@ int cnss_resume_pci_link(struct cnss_pci_data *pci_priv)
	}

	ret = cnss_set_pci_link(pci_priv, PCI_LINK_UP);
	if (ret)
	if (ret) {
		ret = -EAGAIN;
		goto out;
	}

	pci_priv->pci_link_state = PCI_LINK_UP;

@@ -932,6 +937,7 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)
	int ret = 0;
	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
	unsigned int timeout;
	int retry = 0;

	if (plat_priv->ramdump_info_v2.dump_data_valid ||
	    test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state)) {
@@ -939,6 +945,7 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)
		cnss_pci_clear_dump_info(pci_priv);
	}

retry:
	ret = cnss_power_on_device(plat_priv);
	if (ret) {
		cnss_pr_err("Failed to power on device, err = %d\n", ret);
@@ -948,6 +955,18 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)
	ret = cnss_resume_pci_link(pci_priv);
	if (ret) {
		cnss_pr_err("Failed to resume PCI link, err = %d\n", ret);
		if (test_bit(IGNORE_PCI_LINK_FAILURE,
			     &plat_priv->ctrl_params.quirks)) {
			cnss_pr_dbg("Ignore PCI link resume failure\n");
			ret = 0;
			goto out;
		}
		if (ret == -EAGAIN && retry++ < POWER_ON_RETRY_MAX_TIMES) {
			cnss_power_off_device(plat_priv);
			cnss_pr_dbg("Retry to resume PCI link #%d\n", retry);
			msleep(POWER_ON_RETRY_DELAY_MS * retry);
			goto retry;
		}
		goto power_off;
	}