Add changes in IPA APIs due to hal API
modifications for WCN7850.

Change-Id: I13e3acc154cb22538eca0adcd312cb7f9bc1124c
CRs-Fixed: 2888556
Этот коммит содержится в:
Rakesh Pillai
2021-02-16 23:42:54 -08:00
родитель 872da9462b
Коммит a42ab6f94e

Просмотреть файл

@@ -21,6 +21,7 @@
#include <qdf_lock.h>
#include <hal_hw_headers.h>
#include <hal_api.h>
#include <hal_reo.h>
#include <hif.h>
#include <htt.h>
#include <wdi_event.h>
@@ -406,8 +407,7 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc)
struct hal_srng *wbm_srng = (struct hal_srng *)
soc->tx_comp_ring[IPA_TX_ALT_COMP_RING_IDX].hal_srng;
struct hal_srng_params srng_params;
uint32_t paddr_lo;
uint32_t paddr_hi;
uint32_t wbm_sw0_bm_id = soc->wbm_sw0_bm_id;
void *ring_entry;
int num_entries;
qdf_nbuf_t nbuf;
@@ -478,11 +478,9 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc)
qdf_mem_dp_tx_skb_cnt_inc();
qdf_mem_dp_tx_skb_inc(qdf_nbuf_get_end_offset(nbuf));
paddr_lo = ((uint64_t)buffer_paddr & 0x00000000ffffffff);
paddr_hi = ((uint64_t)buffer_paddr & 0x0000001f00000000) >> 32;
HAL_RXDMA_PADDR_LO_SET(ring_entry, paddr_lo);
HAL_RXDMA_PADDR_HI_SET(ring_entry, paddr_hi);
HAL_RXDMA_MANAGER_SET(ring_entry, HAL_WBM_SW4_BM_ID);
hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry,
buffer_paddr, 0,
HAL_WBM_SW4_BM_ID(wbm_sw0_bm_id));
soc->ipa_uc_tx_rsc_alt.tx_buf_pool_vaddr_unaligned[
tx_buffer_count] = (void *)nbuf;
@@ -763,7 +761,8 @@ static void dp_ipa_wdi_tx_alt_pipe_params(struct dp_soc *soc,
HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
tcl_desc_ptr = (struct tcl_data_cmd *)
(QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx) + 1);
tcl_desc_ptr->buf_addr_info.return_buffer_manager = HAL_WBM_SW4_BM_ID;
tcl_desc_ptr->buf_addr_info.return_buffer_manager =
HAL_WBM_SW4_BM_ID(soc->wbm_sw0_bm_id);
tcl_desc_ptr->addrx_en = 1; /* Address X search enable in ASE */
tcl_desc_ptr->addry_en = 1; /* Address X search enable in ASE */
tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
@@ -814,7 +813,8 @@ dp_ipa_wdi_tx_alt_pipe_smmu_params(struct dp_soc *soc,
HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
tcl_desc_ptr = (struct tcl_data_cmd *)
(QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(tx_smmu) + 1);
tcl_desc_ptr->buf_addr_info.return_buffer_manager = HAL_WBM_SW4_BM_ID;
tcl_desc_ptr->buf_addr_info.return_buffer_manager =
HAL_WBM_SW4_BM_ID(soc->wbm_sw0_bm_id);
tcl_desc_ptr->addrx_en = 1; /* Address X search enable in ASE */
tcl_desc_ptr->addry_en = 1; /* Address Y search enable in ASE */
tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
@@ -1192,8 +1192,6 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev)
struct hal_srng *wbm_srng = (struct hal_srng *)
soc->tx_comp_ring[IPA_TX_COMP_RING_IDX].hal_srng;
struct hal_srng_params srng_params;
uint32_t paddr_lo;
uint32_t paddr_hi;
void *ring_entry;
int num_entries;
qdf_nbuf_t nbuf;
@@ -1262,12 +1260,14 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev)
qdf_mem_dp_tx_skb_cnt_inc();
qdf_mem_dp_tx_skb_inc(qdf_nbuf_get_end_offset(nbuf));
paddr_lo = ((uint64_t)buffer_paddr & 0x00000000ffffffff);
paddr_hi = ((uint64_t)buffer_paddr & 0x0000001f00000000) >> 32;
HAL_RXDMA_PADDR_LO_SET(ring_entry, paddr_lo);
HAL_RXDMA_PADDR_HI_SET(ring_entry, paddr_hi);
HAL_RXDMA_MANAGER_SET(ring_entry, (IPA_TCL_DATA_RING_IDX +
HAL_WBM_SW0_BM_ID));
/*
* TODO - WCN7850 code can directly call the be handler
* instead of hal soc ops.
*/
hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry,
buffer_paddr, 0,
(IPA_TCL_DATA_RING_IDX +
soc->wbm_sw0_bm_id));
soc->ipa_uc_tx_rsc.tx_buf_pool_vaddr_unaligned[tx_buffer_count]
= (void *)nbuf;
@@ -1361,6 +1361,7 @@ int dp_ipa_ring_resource_setup(struct dp_soc *soc,
qdf_dma_addr_t hp_addr;
unsigned long addr_offset, dev_base_paddr;
uint32_t ix0;
uint8_t ix0_map[8];
if (!wlan_cfg_is_ipa_enabled(soc->wlan_cfg_ctx))
return QDF_STATUS_SUCCESS;
@@ -1485,14 +1486,17 @@ int dp_ipa_ring_resource_setup(struct dp_soc *soc,
* Set DEST_RING_MAPPING_4 to SW2 as default value for
* DESTINATION_RING_CTRL_IX_0.
*/
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
ix0_map[0] = REO_REMAP_TCL;
ix0_map[1] = REO_REMAP_SW1;
ix0_map[2] = REO_REMAP_SW2;
ix0_map[3] = REO_REMAP_SW3;
ix0_map[4] = REO_REMAP_SW2;
ix0_map[5] = REO_REMAP_RELEASE;
ix0_map[6] = REO_REMAP_FW;
ix0_map[7] = REO_REMAP_FW;
ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
ix0_map);
hal_reo_read_write_ctrl_ix(soc->hal_soc, false, &ix0, NULL, NULL, NULL);
@@ -1696,6 +1700,7 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
uint32_t ix0;
uint32_t ix2;
uint8_t ix_map[8];
if (!pdev) {
dp_err("Invalid instance");
@@ -1709,24 +1714,30 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
return QDF_STATUS_E_AGAIN;
/* Call HAL API to remap REO rings to REO2IPA ring */
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
HAL_REO_REMAP_IX0(REO_REMAP_SW4, 1) |
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 2) |
HAL_REO_REMAP_IX0(REO_REMAP_SW4, 3) |
HAL_REO_REMAP_IX0(REO_REMAP_SW4, 4) |
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
ix_map[0] = REO_REMAP_TCL;
ix_map[1] = REO_REMAP_SW4;
ix_map[2] = REO_REMAP_SW1;
ix_map[3] = REO_REMAP_SW4;
ix_map[4] = REO_REMAP_SW4;
ix_map[5] = REO_REMAP_RELEASE;
ix_map[6] = REO_REMAP_FW;
ix_map[7] = REO_REMAP_FW;
ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
ix_map);
if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
ix2 = HAL_REO_REMAP_IX2(REO_REMAP_SW4, 16) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 17) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 18) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 19) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 20) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 21) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 22) |
HAL_REO_REMAP_IX2(REO_REMAP_SW4, 23);
ix_map[0] = REO_REMAP_SW4;
ix_map[1] = REO_REMAP_SW4;
ix_map[2] = REO_REMAP_SW4;
ix_map[3] = REO_REMAP_SW4;
ix_map[4] = REO_REMAP_SW4;
ix_map[5] = REO_REMAP_SW4;
ix_map[6] = REO_REMAP_SW4;
ix_map[7] = REO_REMAP_SW4;
ix2 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX2,
ix_map);
hal_reo_read_write_ctrl_ix(soc->hal_soc, false, &ix0, NULL,
&ix2, &ix2);
@@ -1745,6 +1756,7 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_pdev *pdev =
dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
uint8_t ix0_map[8];
uint32_t ix0;
uint32_t ix2;
uint32_t ix3;
@@ -1760,15 +1772,18 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
if (!hif_is_target_ready(HIF_GET_SOFTC(soc->hif_handle)))
return QDF_STATUS_E_AGAIN;
ix0_map[0] = REO_REMAP_TCL;
ix0_map[1] = REO_REMAP_SW1;
ix0_map[2] = REO_REMAP_SW2;
ix0_map[3] = REO_REMAP_SW3;
ix0_map[4] = REO_REMAP_SW2;
ix0_map[5] = REO_REMAP_RELEASE;
ix0_map[6] = REO_REMAP_FW;
ix0_map[7] = REO_REMAP_FW;
/* Call HAL API to remap REO rings to REO2IPA ring */
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
ix0_map);
if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
dp_reo_remap_config(soc, &ix2, &ix3);
@@ -1859,14 +1874,20 @@ static void dp_ipa_wdi_tx_params(struct dp_soc *soc,
desc_addr =
(uint8_t *)QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx);
desc_size = sizeof(struct tcl_data_cmd);
#ifndef DP_BE_WAR
/* TODO - WCN7850 does not have these fields */
HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
#endif
tcl_desc_ptr = (struct tcl_data_cmd *)
(QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx) + 1);
tcl_desc_ptr->buf_addr_info.return_buffer_manager =
HAL_RX_BUF_RBM_SW2_BM;
HAL_RX_BUF_RBM_SW2_BM(soc->wbm_sw0_bm_id);
#ifndef DP_BE_WAR
/* TODO - WCN7850 does not have these fields */
tcl_desc_ptr->addrx_en = 1; /* Address X search enable in ASE */
tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
tcl_desc_ptr->packet_offset = 2; /* padding for alignment */
#endif
}
static void dp_ipa_wdi_rx_params(struct dp_soc *soc,
@@ -1906,7 +1927,7 @@ static void dp_ipa_wdi_rx_params(struct dp_soc *soc,
QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(rx) = false;
QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) =
RX_PKT_TLVS_LEN + L3_HEADER_PADDING;
soc->rx_pkt_tlv_size + L3_HEADER_PADDING;
}
static void
@@ -1956,14 +1977,20 @@ dp_ipa_wdi_tx_smmu_params(struct dp_soc *soc,
desc_addr = (uint8_t *)QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(
tx_smmu);
desc_size = sizeof(struct tcl_data_cmd);
#ifndef DP_BE_WAR
/* TODO - WCN7850 does not have these fields */
HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
#endif
tcl_desc_ptr = (struct tcl_data_cmd *)
(QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(tx_smmu) + 1);
tcl_desc_ptr->buf_addr_info.return_buffer_manager =
HAL_RX_BUF_RBM_SW2_BM;
HAL_RX_BUF_RBM_SW2_BM(soc->wbm_sw0_bm_id);
#ifndef DP_BE_WAR
/* TODO - WCN7850 does not have these fields */
tcl_desc_ptr->addrx_en = 1; /* Address X search enable in ASE */
tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
tcl_desc_ptr->packet_offset = 2; /* padding for alignment */
#endif
}
static void
@@ -2003,7 +2030,7 @@ dp_ipa_wdi_rx_smmu_params(struct dp_soc *soc,
QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(rx_smmu) = false;
QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(rx_smmu) =
RX_PKT_TLVS_LEN + L3_HEADER_PADDING;
soc->rx_pkt_tlv_size + L3_HEADER_PADDING;
}
QDF_STATUS dp_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
@@ -2326,7 +2353,7 @@ QDF_STATUS dp_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
/* FW Head Pointer Address */
QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(rx) =
soc->ipa_uc_rx_rsc.ipa_rx_refill_buf_hp_paddr;
QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = RX_PKT_TLVS_LEN +
QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = soc->rx_pkt_tlv_size +
L3_HEADER_PADDING;
QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(&pipe_in) = ipa_w2i_cb;
QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(&pipe_in) = ipa_priv;
@@ -2815,12 +2842,13 @@ static qdf_nbuf_t dp_ipa_frag_nbuf_linearize(struct dp_soc *soc,
/* first head nbuf */
if (is_nbuf_head) {
qdf_mem_copy(dst_nbuf_data, src_nbuf_data,
RX_PKT_TLVS_LEN);
soc->rx_pkt_tlv_size);
/* leave extra 2 bytes L3_HEADER_PADDING */
dst_nbuf_data += (RX_PKT_TLVS_LEN + L3_HEADER_PADDING);
src_nbuf_data += RX_PKT_TLVS_LEN;
dst_nbuf_data += (soc->rx_pkt_tlv_size +
L3_HEADER_PADDING);
src_nbuf_data += soc->rx_pkt_tlv_size;
copy_len = qdf_nbuf_headlen(temp_nbuf) -
RX_PKT_TLVS_LEN;
soc->rx_pkt_tlv_size;
temp_nbuf = qdf_nbuf_get_ext_list(temp_nbuf);
is_nbuf_head = false;
} else {