Merge "qcacld-3.0: Add debug code in hdd_ipa_init" into wlan-cld3.driver.lnx.2.0-dev

This commit is contained in:
Service qcabuildsw 2017-03-27 19:09:39 -07:00 • committed by Gerrit - the friendly Code Review server
commit e70b174b50

View file

@ -2323,18 +2323,22 @@ QDF_STATUS hdd_ipa_uc_ol_init(hdd_context_t *hdd_ctx)
struct ipa_wdi_in_params pipe_in;
struct ipa_wdi_out_params pipe_out;
struct hdd_ipa_priv *ipa_ctxt = (struct hdd_ipa_priv *)hdd_ctx->hdd_ipa;
p_cds_contextType cds_ctx = hdd_ctx->pcds_context;
uint8_t i;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
int ret;
QDF_STATUS stat = QDF_STATUS_SUCCESS;
ENTER();
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (!pdev || !soc) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_FATAL, "DP context is NULL");
return QDF_STATUS_E_FAILURE;
stat = QDF_STATUS_E_FAILURE;
goto fail_return;
}
cdp_ipa_get_resource(soc, pdev, &ipa_ctxt->ipa_resource);
cdp_ipa_get_resource(soc, (void *)pdev, &ipa_ctxt->ipa_resource);
if ((ipa_ctxt->ipa_resource.ce_sr_base_paddr == 0) ||
(ipa_ctxt->ipa_resource.tx_comp_ring_base_paddr == 0) ||
(ipa_ctxt->ipa_resource.rx_rdy_ring_base_paddr == 0) ||
@ -2370,41 +2374,50 @@ QDF_STATUS hdd_ipa_uc_ol_init(hdd_context_t *hdd_ctx)
pipe_in.sys.notify = hdd_ipa_i2w_cb;
if (!hdd_ipa_is_rm_enabled(hdd_ctx)) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO,
"%s: IPA RM DISABLED, IPA AWAKE", __func__);
"IPA RM DISABLED, IPA AWAKE");
pipe_in.sys.keep_ipa_awake = true;
}
pipe_in.u.dl.comp_ring_base_pa =
ipa_ctxt->ipa_resource.tx_comp_ring_base_paddr;
ipa_ctxt->ipa_resource.tx_comp_ring_base_paddr;
pipe_in.u.dl.comp_ring_size =
ipa_ctxt->ipa_resource.tx_comp_ring_size *
sizeof(qdf_dma_addr_t);
ipa_ctxt->ipa_resource.tx_comp_ring_size *
sizeof(qdf_dma_addr_t);
pipe_in.u.dl.ce_ring_base_pa =
ipa_ctxt->ipa_resource.ce_sr_base_paddr;
ipa_ctxt->ipa_resource.ce_sr_base_paddr;
pipe_in.u.dl.ce_door_bell_pa = ipa_ctxt->ipa_resource.ce_reg_paddr;
pipe_in.u.dl.ce_ring_size =
ipa_ctxt->ipa_resource.ce_sr_ring_size;
ipa_ctxt->ipa_resource.ce_sr_ring_size;
pipe_in.u.dl.num_tx_buffers =
ipa_ctxt->ipa_resource.tx_num_alloc_buffer;
ipa_ctxt->ipa_resource.tx_num_alloc_buffer;
qdf_mem_copy(&ipa_ctxt->cons_pipe_in,
&pipe_in,
sizeof(struct ipa_wdi_in_params));
qdf_mem_copy(&ipa_ctxt->cons_pipe_in, &pipe_in,
sizeof(struct ipa_wdi_in_params));
hdd_ipa_uc_get_db_paddr(&ipa_ctxt->tx_comp_doorbell_paddr,
IPA_CLIENT_WLAN1_CONS);
IPA_CLIENT_WLAN1_CONS);
if (true == ipa_ctxt->uc_loaded) {
/* Connect WDI IPA PIPE */
ipa_connect_wdi_pipe(&ipa_ctxt->cons_pipe_in, &pipe_out);
ret = ipa_connect_wdi_pipe(&ipa_ctxt->cons_pipe_in, &pipe_out);
if (ret) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR,
"ipa_connect_wdi_pipe falied for Tx: ret=%d",
ret);
stat = QDF_STATUS_E_FAILURE;
goto fail_return;
}
/* Micro Controller Doorbell register */
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO,
"%s CONS DB pipe out 0x%x",
__func__, (unsigned int)pipe_out.uc_door_bell_pa);
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO_HIGH,
"CONS DB pipe out 0x%x TX PIPE Handle 0x%x",
(unsigned int)pipe_out.uc_door_bell_pa,
ipa_ctxt->tx_pipe_handle);
ipa_ctxt->tx_comp_doorbell_paddr = pipe_out.uc_door_bell_pa;
/* WLAN TX PIPE Handle */
ipa_ctxt->tx_pipe_handle = pipe_out.clnt_hdl;
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO_HIGH,
"TX : CRBPA 0x%x, CRS %d, CERBPA 0x%x, CEDPA 0x%x, CERZ %d, NB %d, CDBPAD 0x%x",
"TX : 0x%x, %d, 0x%x, 0x%x, %d, %d, 0x%x",
(unsigned int)pipe_in.u.dl.comp_ring_base_pa,
pipe_in.u.dl.comp_ring_size,
(unsigned int)pipe_in.u.dl.ce_ring_base_pa,
@ -2426,29 +2439,39 @@ QDF_STATUS hdd_ipa_uc_ol_init(hdd_context_t *hdd_ctx)
pipe_in.sys.notify = hdd_ipa_w2i_cb;
if (!hdd_ipa_is_rm_enabled(hdd_ctx)) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR,
"%s: IPA RM DISABLED, IPA AWAKE", __func__);
"%s: IPA RM DISABLED, IPA AWAKE", __func__);
pipe_in.sys.keep_ipa_awake = true;
}
pipe_in.u.ul.rdy_ring_base_pa =
ipa_ctxt->ipa_resource.rx_rdy_ring_base_paddr;
ipa_ctxt->ipa_resource.rx_rdy_ring_base_paddr;
pipe_in.u.ul.rdy_ring_size =
ipa_ctxt->ipa_resource.rx_rdy_ring_size;
ipa_ctxt->ipa_resource.rx_rdy_ring_size;
pipe_in.u.ul.rdy_ring_rp_pa =
ipa_ctxt->ipa_resource.rx_proc_done_idx_paddr;
ipa_ctxt->ipa_resource.rx_proc_done_idx_paddr;
HDD_IPA_WDI2_SET(pipe_in, ipa_ctxt);
qdf_mem_copy(&ipa_ctxt->prod_pipe_in,
&pipe_in,
sizeof(struct ipa_wdi_in_params));
qdf_mem_copy(&ipa_ctxt->prod_pipe_in, &pipe_in,
sizeof(struct ipa_wdi_in_params));
hdd_ipa_uc_get_db_paddr(&ipa_ctxt->rx_ready_doorbell_paddr,
IPA_CLIENT_WLAN1_PROD);
IPA_CLIENT_WLAN1_PROD);
if (true == ipa_ctxt->uc_loaded) {
ipa_connect_wdi_pipe(&ipa_ctxt->prod_pipe_in, &pipe_out);
ret = ipa_connect_wdi_pipe(&ipa_ctxt->prod_pipe_in, &pipe_out);
if (ret) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR,
"ipa_connect_wdi_pipe falied for Rx: ret=%d",
ret);
stat = QDF_STATUS_E_FAILURE;
goto fail_return;
}
ipa_ctxt->rx_ready_doorbell_paddr = pipe_out.uc_door_bell_pa;
ipa_ctxt->rx_pipe_handle = pipe_out.clnt_hdl;
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO,
"%s PROD DB pipe out 0x%x",
__func__, (unsigned int)pipe_out.uc_door_bell_pa);
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO_HIGH,
"PROD DB pipe out 0x%x TX PIPE Handle 0x%x",
(unsigned int)pipe_out.uc_door_bell_pa,
ipa_ctxt->tx_pipe_handle);
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO_HIGH,
"RX : RRBPA 0x%x, RRS %d, PDIPA 0x%x, RDY_DB_PAD 0x%x",
(unsigned int)pipe_in.u.ul.rdy_ring_base_pa,
@ -2457,22 +2480,28 @@ QDF_STATUS hdd_ipa_uc_ol_init(hdd_context_t *hdd_ctx)
(unsigned int)ipa_ctxt->rx_ready_doorbell_paddr);
}
cdp_ipa_set_doorbell_paddr(soc,
(struct cdp_pdev *)cds_ctx->pdev_txrx_ctx,
ipa_ctxt->tx_comp_doorbell_paddr,
ipa_ctxt->rx_ready_doorbell_paddr);
cdp_ipa_set_doorbell_paddr(soc, (void *)pdev,
ipa_ctxt->tx_comp_doorbell_paddr,
ipa_ctxt->rx_ready_doorbell_paddr);
cdp_ipa_register_op_cb(soc,
(struct cdp_pdev *)cds_ctx->pdev_txrx_ctx,
hdd_ipa_uc_op_event_handler, (void *)hdd_ctx);
cdp_ipa_register_op_cb(soc, (void *)pdev,
hdd_ipa_uc_op_event_handler, (void *)hdd_ctx);
HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO_HIGH,
"ipa_uc_op_cb=0x%p, tx_comp_idx_paddr=0x%x, rx_rdy_idx_paddr=0x%x",
pdev->ipa_uc_op_cb,
(unsigned int)pdev->htt_pdev->ipa_uc_tx_rsc.tx_comp_idx_paddr,
(unsigned int)pdev->htt_pdev->ipa_uc_rx_rsc.rx_rdy_idx_paddr);
for (i = 0; i < HDD_IPA_UC_OPCODE_MAX; i++) {
hdd_ipa_init_uc_op_work(&ipa_ctxt->uc_op_work[i].work,
hdd_ipa_uc_fw_op_event_handler);
hdd_ipa_uc_fw_op_event_handler);
ipa_ctxt->uc_op_work[i].msg = NULL;
}
return QDF_STATUS_SUCCESS;
fail_return:
EXIT();
return stat;
}
/**
@ -5314,11 +5343,14 @@ static QDF_STATUS __hdd_ipa_init(hdd_context_t *hdd_ctx)
struct hdd_ipa_priv *hdd_ipa = NULL;
int ret, i;
struct hdd_ipa_iface_context *iface_context = NULL;
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
struct ol_txrx_pdev_t *pdev = NULL;
if (!hdd_ipa_is_enabled(hdd_ctx))
return QDF_STATUS_SUCCESS;
ENTER();
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (!pdev) {
HDD_IPA_LOG(QDF_TRACE_LEVEL_FATAL, "pdev is NULL");
goto fail_return;
@ -5380,13 +5412,13 @@ static QDF_STATUS __hdd_ipa_init(hdd_context_t *hdd_ctx)
}
if (hdd_ipa_uc_register_uc_ready(hdd_ipa))
goto fail_create_sys_pipe;
} else {
ret = hdd_ipa_setup_sys_pipe(hdd_ipa);
if (ret)
goto fail_create_sys_pipe;
}
EXIT();
return QDF_STATUS_SUCCESS;
fail_create_sys_pipe:
@ -5397,6 +5429,7 @@ fail_setup_rm:
hdd_ctx->hdd_ipa = NULL;
ghdd_ipa = NULL;
fail_return:
EXIT();
return QDF_STATUS_E_FAILURE;
}