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

Commit 15307054 authored by Yue Ma's avatar Yue Ma Committed by Gerrit - the friendly Code Review server
Browse files

cnss2: Skip link down recovery if link has been recovered by retry



There is no need to proceed link down recovery if link has been recovered
by retries during power on sequence.

Change-Id: I876f2e239b519d4230b5c115cdc05ff7650f5cd1
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent e55e8f73
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -418,6 +418,21 @@ int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv)
	}
}

int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv)
{
	if (!plat_priv)
		return -ENODEV;

	switch (plat_priv->bus_type) {
	case CNSS_BUS_PCI:
		return cnss_pci_check_link_status(plat_priv->bus_priv);
	default:
		cnss_pr_dbg("Unsupported bus type: %d\n",
			    plat_priv->bus_type);
		return 0;
	}
}

int cnss_bus_debug_reg_read(struct cnss_plat_data *plat_priv, u32 offset,
			    u32 *val)
{
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv,
int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
			   enum cnss_driver_status status);
int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv);
int cnss_bus_check_link_status(struct cnss_plat_data *plat_priv);
int cnss_bus_debug_reg_read(struct cnss_plat_data *plat_priv, u32 offset,
			    u32 *val);
int cnss_bus_debug_reg_write(struct cnss_plat_data *plat_priv, u32 offset,
+4 −0
Original line number Diff line number Diff line
@@ -1023,6 +1023,10 @@ static int cnss_do_recovery(struct cnss_plat_data *plat_priv,

	switch (reason) {
	case CNSS_REASON_LINK_DOWN:
		if (!cnss_bus_check_link_status(plat_priv)) {
			cnss_pr_dbg("Skip link down recovery as link is already up\n");
			return 0;
		}
		if (test_bit(LINK_DOWN_SELF_RECOVERY,
			     &plat_priv->ctrl_params.quirks))
			goto self_recovery;
+1 −1
Original line number Diff line number Diff line
@@ -356,7 +356,7 @@ static struct cnss_misc_reg wlaon_reg_access_seq[] = {
#define PCIE_REG_SIZE ARRAY_SIZE(pcie_reg_access_seq)
#define WLAON_REG_SIZE ARRAY_SIZE(wlaon_reg_access_seq)

static int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv)
int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv)
{
	u16 device_id;

+1 −0
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ static inline int cnss_pci_get_drv_connected(void *bus_priv)
	return atomic_read(&pci_priv->drv_connected);
}

int cnss_pci_check_link_status(struct cnss_pci_data *pci_priv);
int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv);
int cnss_resume_pci_link(struct cnss_pci_data *pci_priv);
int cnss_pci_init(struct cnss_plat_data *plat_priv);