qcacmn: Add hif support for qca8074v2

Add new target type for qca8074v2 and extend target
type checks of QCA8074 for QCA8074V2.

Change-Id: Ib3ff4505e2057fc843b492b9720004dcac042a65
CRs-Fixed: 2292271
This commit is contained in:
Venkateswara Swamy Bandaru
2018-08-07 13:01:50 +05:30
committed by nshrivas
parent ef65ce37d7
commit dbacd5e70f
11 changed files with 57 additions and 22 deletions

View File

@@ -60,6 +60,7 @@ typedef void *hif_handle_t;
#define HIF_TYPE_QCA6290 16
#define HIF_TYPE_QCN7605 17
#define HIF_TYPE_QCA6390 18
#define HIF_TYPE_QCA8074V2 19
#ifdef IPA_OFFLOAD
#define DMA_COHERENT_MASK_IPA_VER_3_AND_ABOVE 37

View File

@@ -39,5 +39,6 @@ extern struct hostdef_s *QCA6390_HOSTdef;
extern struct hostdef_s *IPQ4019_HOSTdef;
#endif
extern struct hostdef_s *QCA8074_HOSTdef;
extern struct hostdef_s *QCA8074V2_HOSTDEF;
#endif

View File

@@ -67,6 +67,9 @@ extern "C" {
#ifndef TARGET_TYPE_QCA6390
#define TARGET_TYPE_QCA6390 23
#endif
#ifndef TARGET_TYPE_QCA8074V2
#define TARGET_TYPE_QCA8074V2 24
#endif
#ifdef __cplusplus
}

View File

@@ -39,6 +39,7 @@ extern struct targetdef_s *QCA6390_TARGETdef;
extern struct targetdef_s *IPQ4019_TARGETdef;
#endif
extern struct targetdef_s *QCA8074_TARGETdef;
extern struct targetdef_s *QCA8074V2_TARGETDEF;
extern struct ce_reg_def *AR6002_CE_TARGETdef;
extern struct ce_reg_def *AR6003_CE_TARGETdef;
@@ -55,6 +56,7 @@ extern struct ce_reg_def *QCA6390_CE_TARGETdef;
extern struct ce_reg_def *IPQ4019_CE_TARGETdef;
#endif
extern struct ce_reg_def *QCA8074_CE_TARGETdef;
extern struct ce_reg_def *QCA8074V2_CE_TARGETDEF;
#endif

View File

@@ -81,11 +81,12 @@ static ssize_t ath_procfs_diag_read(struct file *file, char __user *buf,
read_buffer, count, (int)*pos, buf);
tgt_info = hif_get_target_info_handle(GET_HIF_OPAQUE_HDL(hif_hdl));
if (scn->bus_type == QDF_BUS_TYPE_SNOC ||
if ((scn->bus_type == QDF_BUS_TYPE_SNOC) ||
(scn->bus_type == QDF_BUS_TYPE_PCI &&
(tgt_info->target_type == TARGET_TYPE_QCA6290 ||
tgt_info->target_type == TARGET_TYPE_QCA6390 ||
tgt_info->target_type == TARGET_TYPE_QCA8074))) {
((tgt_info->target_type == TARGET_TYPE_QCA6290) ||
(tgt_info->target_type == TARGET_TYPE_QCA6390) ||
(tgt_info->target_type == TARGET_TYPE_QCA8074) ||
(tgt_info->target_type == TARGET_TYPE_QCA8074V2)))) {
memtype = ((uint32_t)(*pos) & 0xff000000) >> 24;
offset = (uint32_t)(*pos) & 0xffffff;
HIF_TRACE("%s: offset 0x%x memtype 0x%x, datalen %zu\n",
@@ -153,11 +154,12 @@ static ssize_t ath_procfs_diag_write(struct file *file,
(int)*pos, *((uint32_t *) write_buffer));
tgt_info = hif_get_target_info_handle(GET_HIF_OPAQUE_HDL(hif_hdl));
if (scn->bus_type == QDF_BUS_TYPE_SNOC ||
(scn->bus_type == QDF_BUS_TYPE_PCI &&
(tgt_info->target_type == TARGET_TYPE_QCA6290 ||
tgt_info->target_type == TARGET_TYPE_QCA6390 ||
tgt_info->target_type == TARGET_TYPE_QCA8074))) {
if ((scn->bus_type == QDF_BUS_TYPE_SNOC) ||
((scn->bus_type == QDF_BUS_TYPE_PCI) &&
((tgt_info->target_type == TARGET_TYPE_QCA6290) ||
(tgt_info->target_type == TARGET_TYPE_QCA6390) ||
(tgt_info->target_type == TARGET_TYPE_QCA8074) ||
(tgt_info->target_type == TARGET_TYPE_QCA8074V2)))) {
memtype = ((uint32_t)(*pos) & 0xff000000) >> 24;
offset = (uint32_t)(*pos) & 0xffffff;
HIF_TRACE("%s: offset 0x%x memtype 0x%x, datalen %zu\n",

View File

@@ -718,6 +718,7 @@ static void hif_select_service_to_pipe_map(struct hif_softc *scn,
sizeof(target_service_to_ce_map_qca6390);
break;
case TARGET_TYPE_QCA8074:
case TARGET_TYPE_QCA8074V2:
*tgt_svc_map_to_use = target_service_to_ce_map_qca8074;
*sz_tgt_svc_map_to_use =
sizeof(target_service_to_ce_map_qca8074);
@@ -902,6 +903,7 @@ bool ce_srng_based(struct hif_softc *scn)
switch (tgt_info->target_type) {
case TARGET_TYPE_QCA8074:
case TARGET_TYPE_QCA8074V2:
case TARGET_TYPE_QCA6290:
case TARGET_TYPE_QCA6390:
return true;
@@ -2803,6 +2805,7 @@ void hif_ce_prepare_config(struct hif_softc *scn)
break;
case TARGET_TYPE_QCA8074:
case TARGET_TYPE_QCA8074V2:
if (scn->bus_type == QDF_BUS_TYPE_PCI) {
hif_state->host_ce_config =
host_ce_config_wlan_qca8074_pci;

View File

@@ -800,10 +800,6 @@ int hif_get_device_type(uint32_t device_id,
break;
case QCA8074_DEVICE_ID:
case RUMIM2M_DEVICE_ID_NODE0:
case RUMIM2M_DEVICE_ID_NODE1:
case RUMIM2M_DEVICE_ID_NODE2:
case RUMIM2M_DEVICE_ID_NODE3:
*hif_type = HIF_TYPE_QCA8074;
*target_type = TARGET_TYPE_QCA8074;
HIF_INFO(" *********** QCA8074 *************\n");
@@ -830,6 +826,16 @@ int hif_get_device_type(uint32_t device_id,
HIF_INFO(" *********** QCA6390 *************\n");
break;
case QCA8074V2_DEVICE_ID:
case RUMIM2M_DEVICE_ID_NODE0:
case RUMIM2M_DEVICE_ID_NODE1:
case RUMIM2M_DEVICE_ID_NODE2:
case RUMIM2M_DEVICE_ID_NODE3:
*hif_type = HIF_TYPE_QCA8074V2;
*target_type = TARGET_TYPE_QCA8074V2;
HIF_INFO(" *********** QCA8074V2 *************\n");
break;
default:
HIF_ERROR("%s: Unsupported device ID = 0x%x!",
__func__, device_id);

View File

@@ -94,6 +94,7 @@
actual number once available.
currently defining this to 0xffff for
emulation purpose */
#define QCA8074V2_DEVICE_ID (0xfffe) /* Todo: replace this with actual number */
/* Genoa */
#define QCN7605_COMPOSITE (0x9900)
#define QCN7605_STANDALONE (0x9901)

View File

@@ -2014,7 +2014,8 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc)
}
/* todo: consider replacing this with an srng field */
if ((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) &&
if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) ||
(hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2)) &&
(hif_sc->bus_type == QDF_BUS_TYPE_AHB)) {
hif_sc->per_ce_irq = true;
}
@@ -2034,7 +2035,8 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc)
hif_register_bmi_callbacks(hif_sc);
}
if ((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) &&
if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) ||
(hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2)) &&
(hif_sc->bus_type == QDF_BUS_TYPE_PCI))
HIF_INFO_MED("%s: Skip irq config for PCI based 8074 target",
__func__);
@@ -3703,6 +3705,7 @@ int hif_configure_irq(struct hif_softc *scn)
ret = hif_ahb_configure_legacy_irq(sc);
break;
case TARGET_TYPE_QCA8074:
case TARGET_TYPE_QCA8074V2:
ret = hif_ahb_configure_irq(sc);
break;
default:

View File

@@ -113,6 +113,12 @@ void hif_target_register_tbl_attach(struct hif_softc *scn, u32 target_type)
scn->target_ce_def = QCA6290_CE_TARGETdef;
break;
#endif
#if defined(QCA8074V2_HEADERS_DEF)
case TARGET_TYPE_QCA8074V2:
scn->targetdef = QCA8074V2_TARGETDEF;
scn->target_ce_def = QCA8074V2_CE_TARGETDEF;
break;
#endif
#if defined(QCA6390_HEADERS_DEF)
case TARGET_TYPE_QCA6390:
@@ -194,7 +200,11 @@ void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type)
scn->hostdef = QCA8074_HOSTdef;
break;
#endif
#if defined(QCA8074V2_HEADERS_DEF)
case HIF_TYPE_QCA8074V2:
scn->hostdef = QCA8074V2_HOSTDEF;
break;
#endif
#if defined(QCA6290_HEADERS_DEF)
case HIF_TYPE_QCA6290:
scn->hostdef = QCA6290_HOSTdef;

View File

@@ -436,7 +436,8 @@ void hif_ahb_disable_bus(struct hif_softc *scn)
mem_pa_size = memres->end - memres->start + 1;
/* Should not be executed on 8074 platform */
if (tgt_info->target_type != TARGET_TYPE_QCA8074) {
if ((tgt_info->target_type != TARGET_TYPE_QCA8074) &&
(tgt_info->target_type != TARGET_TYPE_QCA8074V2)) {
hif_ahb_clk_enable_disable(&pdev->dev, 0);
hif_ahb_device_reset(scn);
@@ -538,7 +539,8 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
hif_target_register_tbl_attach(ol_sc, target_type);
/* QCA_WIFI_QCA8074_VP:Should not be executed on 8074 VP platform */
if (tgt_info->target_type != TARGET_TYPE_QCA8074) {
if ((tgt_info->target_type != TARGET_TYPE_QCA8074) &&
(tgt_info->target_type != TARGET_TYPE_QCA8074V2)) {
if (hif_ahb_enable_radio(sc, pdev, id) != 0) {
HIF_INFO("error in enabling soc\n");
return -EIO;
@@ -555,7 +557,8 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
return QDF_STATUS_SUCCESS;
err_target_sync:
/* QCA_WIFI_QCA8074_VP:Should not be executed on 8074 VP platform */
if (tgt_info->target_type != TARGET_TYPE_QCA8074) {
if ((tgt_info->target_type != TARGET_TYPE_QCA8074) &&
(tgt_info->target_type != TARGET_TYPE_QCA8074V2)) {
HIF_INFO("Error: Disabling target\n");
hif_ahb_disable_bus(ol_sc);
}