MLK-20680 brcmfmac: add time delay for pcie device exit D3 mode
authorAndy Duan <fugang.duan@nxp.com>
Wed, 2 Jan 2019 10:05:00 +0000 (18:05 +0800)
committerLeonard Crestez <leonard.crestez@nxp.com>
Thu, 18 Apr 2019 00:00:38 +0000 (03:00 +0300)
- The current timeout value is not enough for MB transaction read
when modem enter D3 mode, so increase the timeout value to match
the D3 mode timing requirement.
- Add 10 ms delay for pcie device to exit D3 state and enter D0 state.
- Remove the duplicated code for SBMBX register access.

Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
(cherry picked from commit 05601af462145e27142e3d140e10a66d4a493d40)

drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c

index 68d22f5..73fec3c 100644 (file)
@@ -189,7 +189,7 @@ static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
 #define BRCMF_H2D_HOST_D0_INFORM_IN_USE                0x00000008
 #define BRCMF_H2D_HOST_D0_INFORM               0x00000010
 
-#define BRCMF_PCIE_MBDATA_TIMEOUT              msecs_to_jiffies(2000)
+#define BRCMF_PCIE_MBDATA_TIMEOUT              msecs_to_jiffies(5000)
 
 #define BRCMF_PCIE_CFGREG_STATUS_CMD           0x4
 #define BRCMF_PCIE_CFGREG_PM_CSR               0x4C
@@ -684,7 +684,6 @@ brcmf_pcie_send_mb_data(struct brcmf_pciedev_info *devinfo, u32 htod_mb_data)
 
        brcmf_pcie_write_tcm32(devinfo, addr, htod_mb_data);
        pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1);
-       pci_write_config_dword(devinfo->pdev, BRCMF_PCIE_REG_SBMBX, 1);
 
        return 0;
 }
@@ -1976,6 +1975,7 @@ static int brcmf_pcie_pm_leave_D3(struct device *dev)
                if (brcmf_pcie_send_mb_data(devinfo, BRCMF_H2D_HOST_D0_INFORM))
                        goto cleanup;
                brcmf_dbg(PCIE, "Hot resume, continue....\n");
+               msleep(10);
                devinfo->state = BRCMFMAC_PCIE_STATE_UP;
                brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2);
                brcmf_bus_change_state(bus, BRCMF_BUS_UP);