|
@@ -2078,10 +2078,9 @@ void hif_pci_close(struct hif_softc *hif_sc)
|
|
|
|
|
|
#define BAR_NUM 0
|
|
|
|
|
|
-#ifndef CONFIG_PLD_PCIE_INIT
|
|
|
-static int hif_enable_pci(struct hif_pci_softc *sc,
|
|
|
- struct pci_dev *pdev,
|
|
|
- const struct pci_device_id *id)
|
|
|
+static int hif_enable_pci_nopld(struct hif_pci_softc *sc,
|
|
|
+ struct pci_dev *pdev,
|
|
|
+ const struct pci_device_id *id)
|
|
|
{
|
|
|
void __iomem *mem;
|
|
|
int ret = 0;
|
|
@@ -2193,29 +2192,27 @@ err_region:
|
|
|
pci_disable_device(pdev);
|
|
|
return ret;
|
|
|
}
|
|
|
-#else
|
|
|
-static int hif_enable_pci(struct hif_pci_softc *sc,
|
|
|
- struct pci_dev *pdev,
|
|
|
- const struct pci_device_id *id)
|
|
|
+
|
|
|
+static int hif_enable_pci_pld(struct hif_pci_softc *sc,
|
|
|
+ struct pci_dev *pdev,
|
|
|
+ const struct pci_device_id *id)
|
|
|
{
|
|
|
PCI_CFG_TO_DISABLE_L1SS_STATES(pdev, 0x188);
|
|
|
sc->pci_enabled = true;
|
|
|
return 0;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
-#ifndef CONFIG_PLD_PCIE_INIT
|
|
|
-static inline void hif_pci_deinit(struct hif_pci_softc *sc)
|
|
|
+static void hif_pci_deinit_nopld(struct hif_pci_softc *sc)
|
|
|
{
|
|
|
+ pci_disable_msi(sc->pdev);
|
|
|
pci_iounmap(sc->pdev, sc->mem);
|
|
|
pci_clear_master(sc->pdev);
|
|
|
pci_release_region(sc->pdev, BAR_NUM);
|
|
|
pci_disable_device(sc->pdev);
|
|
|
}
|
|
|
-#else
|
|
|
-static inline void hif_pci_deinit(struct hif_pci_softc *sc) {}
|
|
|
-#endif
|
|
|
+
|
|
|
+static void hif_pci_deinit_pld(struct hif_pci_softc *sc) {}
|
|
|
|
|
|
static void hif_disable_pci(struct hif_pci_softc *sc)
|
|
|
{
|
|
@@ -2226,8 +2223,7 @@ static void hif_disable_pci(struct hif_pci_softc *sc)
|
|
|
return;
|
|
|
}
|
|
|
hif_pci_device_reset(sc);
|
|
|
-
|
|
|
- hif_pci_deinit(sc);
|
|
|
+ sc->hif_pci_deinit(sc);
|
|
|
|
|
|
sc->mem = NULL;
|
|
|
ol_sc->mem = NULL;
|
|
@@ -2648,15 +2644,12 @@ void hif_pci_disable_bus(struct hif_softc *scn)
|
|
|
#endif
|
|
|
mem = (void __iomem *)sc->mem;
|
|
|
if (mem) {
|
|
|
-#ifndef CONFIG_PLD_PCIE_INIT
|
|
|
- pci_disable_msi(pdev);
|
|
|
-#endif
|
|
|
hif_dump_pipe_debug_count(scn);
|
|
|
if (scn->athdiag_procfs_inited) {
|
|
|
athdiag_procfs_remove();
|
|
|
scn->athdiag_procfs_inited = false;
|
|
|
}
|
|
|
- hif_pci_deinit(sc);
|
|
|
+ sc->hif_pci_deinit(sc);
|
|
|
scn->mem = NULL;
|
|
|
}
|
|
|
HIF_INFO("%s: X", __func__);
|
|
@@ -3780,8 +3773,8 @@ static void hif_target_sync(struct hif_softc *scn)
|
|
|
PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_PLD_PCIE_INIT
|
|
|
-static void hif_pci_get_soc_info(struct hif_pci_softc *sc, struct device *dev)
|
|
|
+static void hif_pci_get_soc_info_pld(struct hif_pci_softc *sc,
|
|
|
+ struct device *dev)
|
|
|
{
|
|
|
struct pld_soc_info info;
|
|
|
|
|
@@ -3790,10 +3783,36 @@ static void hif_pci_get_soc_info(struct hif_pci_softc *sc, struct device *dev)
|
|
|
sc->ce_sc.ol_sc.mem = info.v_addr;
|
|
|
sc->ce_sc.ol_sc.mem_pa = info.p_addr;
|
|
|
}
|
|
|
-#else
|
|
|
-static void hif_pci_get_soc_info(struct hif_pci_softc *sc, struct device *dev)
|
|
|
+
|
|
|
+static void hif_pci_get_soc_info_nopld(struct hif_pci_softc *sc,
|
|
|
+ struct device *dev)
|
|
|
{}
|
|
|
-#endif
|
|
|
+
|
|
|
+static bool hif_is_pld_based_target(int device_id)
|
|
|
+{
|
|
|
+ switch (device_id) {
|
|
|
+ case QCA6290_DEVICE_ID:
|
|
|
+ case QCA6290_EMULATION_DEVICE_ID:
|
|
|
+ case QCA6390_DEVICE_ID:
|
|
|
+ case AR6320_DEVICE_ID:
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static void hif_pci_init_deinit_ops_attach(struct hif_pci_softc *sc,
|
|
|
+ int device_id)
|
|
|
+{
|
|
|
+ if (hif_is_pld_based_target(device_id)) {
|
|
|
+ sc->hif_enable_pci = hif_enable_pci_pld;
|
|
|
+ sc->hif_pci_deinit = hif_pci_deinit_pld;
|
|
|
+ sc->hif_pci_get_soc_info = hif_pci_get_soc_info_pld;
|
|
|
+ } else {
|
|
|
+ sc->hif_enable_pci = hif_enable_pci_nopld;
|
|
|
+ sc->hif_pci_deinit = hif_pci_deinit_nopld;
|
|
|
+ sc->hif_pci_get_soc_info = hif_pci_get_soc_info_nopld;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
#ifdef HIF_REG_WINDOW_SUPPORT
|
|
|
static void hif_pci_init_reg_windowing_support(struct hif_pci_softc *sc,
|
|
@@ -3857,9 +3876,10 @@ QDF_STATUS hif_pci_enable_bus(struct hif_softc *ol_sc,
|
|
|
sc->devid = id->device;
|
|
|
sc->cacheline_sz = dma_get_cache_alignment();
|
|
|
tgt_info = hif_get_target_info_handle(hif_hdl);
|
|
|
- hif_pci_get_soc_info(sc, dev);
|
|
|
+ hif_pci_init_deinit_ops_attach(sc, id->device);
|
|
|
+ sc->hif_pci_get_soc_info(sc, dev);
|
|
|
again:
|
|
|
- ret = hif_enable_pci(sc, pdev, id);
|
|
|
+ ret = sc->hif_enable_pci(sc, pdev, id);
|
|
|
if (ret < 0) {
|
|
|
HIF_ERROR("%s: ERROR - hif_enable_pci error = %d",
|
|
|
__func__, ret);
|