qcacmn: IOMMU map and unmap RX buffers to LPASS SMMU CB
IOMMU map and unmap RX buffers into LPASS SMMU context bank for LPASS to access RX buffers in direct link usecases. Change-Id: Ie72a008309e3abdf3fbc7198bb5d3af5e9497180 CRs-Fixed: 3356568
此提交包含在:

提交者
Madan Koyyalamudi

父節點
80e1cfff99
當前提交
34d893df39
@@ -931,7 +931,8 @@ void dp_rx_desc_nbuf_and_pool_free(struct dp_soc *soc, uint32_t pool_id,
|
||||
* Return: None
|
||||
*/
|
||||
void dp_rx_desc_nbuf_free(struct dp_soc *soc,
|
||||
struct rx_desc_pool *rx_desc_pool);
|
||||
struct rx_desc_pool *rx_desc_pool,
|
||||
bool is_mon_pool);
|
||||
|
||||
#ifdef DP_RX_MON_MEM_FRAG
|
||||
/*
|
||||
@@ -2378,6 +2379,52 @@ bool dp_rx_pkt_tracepoints_enabled(void)
|
||||
qdf_trace_dp_rx_pkt_enabled());
|
||||
}
|
||||
|
||||
#ifdef FEATURE_DIRECT_LINK
|
||||
/**
|
||||
* dp_audio_smmu_map()- Map memory region into Audio SMMU CB
|
||||
* @qdf_dev: pointer to QDF device structure
|
||||
* @paddr: physical address
|
||||
* @iova: DMA address
|
||||
* @size: memory region size
|
||||
*
|
||||
* Return: 0 on success else failure code
|
||||
*/
|
||||
static inline
|
||||
int dp_audio_smmu_map(qdf_device_t qdf_dev, qdf_dma_addr_t paddr,
|
||||
qdf_dma_addr_t iova, qdf_size_t size)
|
||||
{
|
||||
return pld_audio_smmu_map(qdf_dev->dev, paddr, iova, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_audio_smmu_unmap()- Remove memory region mapping from Audio SMMU CB
|
||||
* @qdf_dev: pointer to QDF device structure
|
||||
* @iova: DMA address
|
||||
* @size: memory region size
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline
|
||||
void dp_audio_smmu_unmap(qdf_device_t qdf_dev, qdf_dma_addr_t iova,
|
||||
qdf_size_t size)
|
||||
{
|
||||
pld_audio_smmu_unmap(qdf_dev->dev, iova, size);
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
int dp_audio_smmu_map(qdf_device_t qdf_dev, qdf_dma_addr_t paddr,
|
||||
qdf_dma_addr_t iova, qdf_size_t size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
void dp_audio_smmu_unmap(qdf_device_t qdf_dev, qdf_dma_addr_t iova,
|
||||
qdf_size_t size)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(QCA_DP_RX_NBUF_NO_MAP_UNMAP) && !defined(BUILD_X86)
|
||||
static inline
|
||||
QDF_STATUS dp_pdev_rx_buffers_attach_simple(struct dp_soc *soc, uint32_t mac_id,
|
||||
@@ -2596,6 +2643,11 @@ void dp_rx_nbuf_unmap(struct dp_soc *soc,
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[rx_desc->pool_id];
|
||||
dp_ipa_reo_ctx_buf_mapping_lock(soc, reo_ring_num);
|
||||
|
||||
dp_audio_smmu_unmap(soc->osdev,
|
||||
QDF_NBUF_CB_PADDR(rx_desc->nbuf),
|
||||
rx_desc_pool->buf_size);
|
||||
|
||||
dp_ipa_handle_rx_buf_smmu_mapping(soc, rx_desc->nbuf,
|
||||
rx_desc_pool->buf_size,
|
||||
false, __func__, __LINE__);
|
||||
@@ -2612,6 +2664,8 @@ void dp_rx_nbuf_unmap_pool(struct dp_soc *soc,
|
||||
struct rx_desc_pool *rx_desc_pool,
|
||||
qdf_nbuf_t nbuf)
|
||||
{
|
||||
dp_audio_smmu_unmap(soc->osdev, QDF_NBUF_CB_PADDR(nbuf),
|
||||
rx_desc_pool->buf_size);
|
||||
dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, rx_desc_pool->buf_size,
|
||||
false, __func__, __LINE__);
|
||||
qdf_nbuf_unmap_nbytes_single(soc->osdev, nbuf, QDF_DMA_FROM_DEVICE,
|
||||
|
新增問題並參考
封鎖使用者