From 803ea570f6380987ae2f265b1dcc02243240a387 Mon Sep 17 00:00:00 2001 From: Chaoli Zhou Date: Mon, 13 Jan 2020 20:15:52 +0800 Subject: [PATCH] qcacld-3.0: Set pcie addr flag for IPA tx/rx ring As for WDI2 over gsi, IPA driver adds is_txr_rn_db_pcie_addr and is_evt_rn_db_pcie_addr in ipa_wdi_pipe_setup_info and ipa_wdi_pipe_setup_info_smmu these two structures to check if doorbell address is PCIe mapped address or not. So, it need to set such flag from wlan host driver for IPA transfer and event rings. Change-Id: Ic71a460c6e87f5b77be737fa9a8e860ab7424e82 --- core/dp/txrx/ol_txrx_ipa.c | 46 +++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/core/dp/txrx/ol_txrx_ipa.c b/core/dp/txrx/ol_txrx_ipa.c index 22d3c9c3099f..d10df6465060 100644 --- a/core/dp/txrx/ol_txrx_ipa.c +++ b/core/dp/txrx/ol_txrx_ipa.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -315,7 +315,8 @@ static inline void ol_txrx_setup_mcc_sys_pipes( */ static inline void ol_txrx_ipa_wdi_tx_smmu_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu) + qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu, + bool over_gsi) { QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(tx_smmu) = IPA_CLIENT_WLAN1_CONS; @@ -333,6 +334,8 @@ static inline void ol_txrx_ipa_wdi_tx_smmu_params( ipa_res->ce_sr_ring_size; QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(tx_smmu) = ipa_res->ce_reg_paddr; + if (over_gsi) + QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(tx_smmu) = true; QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(tx_smmu) = ipa_res->tx_num_alloc_buffer; QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(tx_smmu) = 0; @@ -348,7 +351,8 @@ static inline void ol_txrx_ipa_wdi_tx_smmu_params( */ static inline void ol_txrx_ipa_wdi_rx_smmu_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu) + qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu, + bool over_gsi) { QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(rx_smmu) = IPA_CLIENT_WLAN1_PROD; @@ -360,6 +364,8 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params( ipa_res->rx_rdy_ring->mem_info.size; QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(rx_smmu) = ipa_res->rx_proc_done_idx->mem_info.pa; + if (over_gsi) + QDF_IPA_WDI_SETUP_INFO_SMMU_IS_TXR_RN_DB_PCIE_ADDR(rx_smmu) = false; qdf_mem_copy(&QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE( rx_smmu), &ipa_res->rx2_rdy_ring->sgtable, @@ -368,13 +374,16 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params( ipa_res->rx2_rdy_ring->mem_info.size; QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(rx_smmu) = ipa_res->rx2_proc_done_idx->mem_info.pa; + if (over_gsi) + 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) = 0; } #else static inline void ol_txrx_ipa_wdi_rx_smmu_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu) + qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu, + bool over_gsi) { QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(rx_smmu) = IPA_CLIENT_WLAN1_PROD; @@ -395,13 +404,15 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params( static inline void ol_txrx_ipa_wdi_tx_smmu_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu) + qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu, + bool over_gsi) { } static inline void ol_txrx_ipa_wdi_rx_smmu_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu) + qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu, + bool over_gsi) { } #endif @@ -415,7 +426,8 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params( */ static inline void ol_txrx_ipa_wdi_tx_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_t *tx) + qdf_ipa_wdi_pipe_setup_info_t *tx, + bool over_gsi) { qdf_device_t osdev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); @@ -438,6 +450,8 @@ static inline void ol_txrx_ipa_wdi_tx_params( ipa_res->ce_sr_ring_size; QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(tx) = ipa_res->ce_reg_paddr; + if (over_gsi) + QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(tx) = true; QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(tx) = ipa_res->tx_num_alloc_buffer; QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(tx) = 0; @@ -453,7 +467,8 @@ static inline void ol_txrx_ipa_wdi_tx_params( */ static inline void ol_txrx_ipa_wdi_rx_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_t *rx) + qdf_ipa_wdi_pipe_setup_info_t *rx, + bool over_gsi) { QDF_IPA_WDI_SETUP_INFO_CLIENT(rx) = IPA_CLIENT_WLAN1_PROD; QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(rx) = @@ -462,12 +477,16 @@ static inline void ol_txrx_ipa_wdi_rx_params( ipa_res->rx_rdy_ring->mem_info.size; QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(rx) = ipa_res->rx_proc_done_idx->mem_info.pa; + if (over_gsi) + QDF_IPA_WDI_SETUP_INFO_IS_TXR_RN_DB_PCIE_ADDR(rx) = false; QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(rx) = ipa_res->rx2_rdy_ring->mem_info.pa; QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(rx) = ipa_res->rx2_rdy_ring->mem_info.size; QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(rx) = ipa_res->rx2_proc_done_idx->mem_info.pa; + if (over_gsi) + QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(rx) = false; QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = 0; } @@ -475,7 +494,8 @@ static inline void ol_txrx_ipa_wdi_rx_params( static inline void ol_txrx_ipa_wdi_rx_params( struct ol_txrx_ipa_resources *ipa_res, - qdf_ipa_wdi_pipe_setup_info_t *rx) + qdf_ipa_wdi_pipe_setup_info_t *rx, + bool over_gsi) { QDF_IPA_WDI_SETUP_INFO_CLIENT(rx) = IPA_CLIENT_WLAN1_PROD; QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(rx) = @@ -551,9 +571,9 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(tx_cfg) = true; if (is_smmu_enabled) - ol_txrx_ipa_wdi_tx_smmu_params(ipa_res, tx_smmu); + ol_txrx_ipa_wdi_tx_smmu_params(ipa_res, tx_smmu, over_gsi); else - ol_txrx_ipa_wdi_tx_params(ipa_res, tx); + ol_txrx_ipa_wdi_tx_params(ipa_res, tx, over_gsi); /* RX PIPE */ @@ -577,9 +597,9 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(rx_cfg) = true; if (is_smmu_enabled) - ol_txrx_ipa_wdi_rx_smmu_params(ipa_res, rx_smmu); + ol_txrx_ipa_wdi_rx_smmu_params(ipa_res, rx_smmu, over_gsi); else - ol_txrx_ipa_wdi_rx_params(ipa_res, rx); + ol_txrx_ipa_wdi_rx_params(ipa_res, rx, over_gsi); QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(&pipe_in) = ipa_w2i_cb; QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(&pipe_in) = ipa_priv;