Sfoglia il codice sorgente

qcacld-3.0: Add paddr support for 32-bit host arch

Add support for 32-bit host architecture where dma_addr_t
is 32 bits and  bus addresses are of 64 bits on MAC and IPA.

Change-Id: Id4a4763ed388973297c63df290b578effdc5b284
CRs-Fixed: 2006548
Orhan K AKYILDIZ 8 anni fa
parent
commit
a652a60b37
4 ha cambiato i file con 21 aggiunte e 17 eliminazioni
  1. 10 6
      core/dp/htt/htt_h2t.c
  2. 8 8
      core/dp/htt/htt_rx.c
  3. 1 1
      core/dp/htt/htt_tx.c
  4. 2 2
      core/dp/htt/htt_types.h

+ 10 - 6
core/dp/htt/htt_h2t.c

@@ -178,9 +178,10 @@ A_STATUS htt_h2t_frag_desc_bank_cfg_msg(struct htt_pdev_t *pdev)
 
 	/** Bank specific data structure.*/
 #if HTT_PADDR64
-	bank_cfg->bank_base_address[0].lo =
-		pdev->frag_descs.desc_pages.dma_pages->page_p_addr;
-	bank_cfg->bank_base_address[0].hi = 0;
+	bank_cfg->bank_base_address[0].lo = qdf_get_lower_32_bits(
+			pdev->frag_descs.desc_pages.dma_pages->page_p_addr);
+	bank_cfg->bank_base_address[0].hi = qdf_get_upper_32_bits(
+			pdev->frag_descs.desc_pages.dma_pages->page_p_addr);
 #else /* ! HTT_PADDR64 */
 	bank_cfg->bank_base_address[0] =
 		pdev->frag_descs.desc_pages.dma_pages->page_p_addr;
@@ -424,10 +425,13 @@ QDF_STATUS htt_h2t_rx_ring_cfg_msg_ll(struct htt_pdev_t *pdev)
 	msg_word++;
 	*msg_word = 0;
 #if HTT_PADDR64
-	HTT_RX_RING_CFG_IDX_SHADOW_REG_PADDR_LO_SET(*msg_word,
-						    pdev->rx_ring.alloc_idx.paddr);
+	HTT_RX_RING_CFG_IDX_SHADOW_REG_PADDR_LO_SET(
+			*msg_word,
+			qdf_get_lower_32_bits(pdev->rx_ring.alloc_idx.paddr));
 	msg_word++;
-	HTT_RX_RING_CFG_IDX_SHADOW_REG_PADDR_HI_SET(*msg_word, 0);
+	HTT_RX_RING_CFG_IDX_SHADOW_REG_PADDR_HI_SET(
+			*msg_word,
+			qdf_get_upper_32_bits(pdev->rx_ring.alloc_idx.paddr));
 #else /* ! HTT_PADDR64 */
 	HTT_RX_RING_CFG_IDX_SHADOW_REG_PADDR_SET(*msg_word,
 						 pdev->rx_ring.alloc_idx.paddr);

+ 8 - 8
core/dp/htt/htt_rx.c

@@ -3297,7 +3297,7 @@ int htt_rx_attach(struct htt_pdev_t *pdev)
 int htt_rx_attach(struct htt_pdev_t *pdev)
 {
 	qdf_dma_addr_t paddr;
-	uint32_t ring_elem_size = sizeof(qdf_dma_addr_t);
+	uint32_t ring_elem_size = sizeof(target_paddr_t);
 
 	pdev->rx_ring.size = htt_rx_ring_size(pdev);
 	HTT_ASSERT2(QDF_IS_PWR2(pdev->rx_ring.size));
@@ -3425,7 +3425,7 @@ int htt_rx_attach(struct htt_pdev_t *pdev)
 
 fail4:
 	qdf_mem_free_consistent(pdev->osdev, pdev->osdev->dev,
-				   pdev->rx_ring.size * sizeof(qdf_dma_addr_t),
+				   pdev->rx_ring.size * sizeof(target_paddr_t),
 				   pdev->rx_ring.buf.paddrs_ring,
 				   pdev->rx_ring.base_paddr,
 				   qdf_get_dma_mem_context((&pdev->rx_ring.buf),
@@ -3470,22 +3470,21 @@ static int htt_rx_ipa_uc_alloc_wdi2_rsc(struct htt_pdev_t *pdev,
 	 *   4bytes: pointer
 	 *   2bytes: VDEV ID
 	 *   2bytes: length */
+	/* RX indication ring size, by bytes */
+	pdev->ipa_uc_rx_rsc.rx2_ind_ring_size =
+		rx_ind_ring_elements * sizeof(target_paddr_t);
 	pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.vaddr =
 		qdf_mem_alloc_consistent(
 			pdev->osdev, pdev->osdev->dev,
-			rx_ind_ring_elements *
-			sizeof(qdf_dma_addr_t),
+			pdev->ipa_uc_rx_rsc.rx2_ind_ring_size,
 			&pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.paddr);
 	if (!pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.vaddr) {
 		qdf_print("%s: RX IND RING alloc fail", __func__);
 		return -ENOBUFS;
 	}
 
-	/* RX indication ring size, by bytes */
-	pdev->ipa_uc_rx_rsc.rx2_ind_ring_size =
-		rx_ind_ring_elements * sizeof(qdf_dma_addr_t);
 	qdf_mem_zero(pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.vaddr,
-		pdev->ipa_uc_rx_rsc.rx2_ind_ring_size);
+		     pdev->ipa_uc_rx_rsc.rx2_ind_ring_size);
 
 	/* Allocate RX process done index */
 	pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.vaddr =
@@ -3526,6 +3525,7 @@ int htt_rx_ipa_uc_attach(struct htt_pdev_t *pdev,
 			 unsigned int rx_ind_ring_elements)
 {
 	int ret = 0;
+
 	/* Allocate RX indication ring */
 	/* RX IND ring element
 	 *   4bytes: pointer

+ 1 - 1
core/dp/htt/htt_tx.c

@@ -1285,7 +1285,7 @@ int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
 	}
 
 	/* Allocate TX COMP Ring */
-	tx_comp_ring_size = uc_tx_buf_cnt * sizeof(qdf_dma_addr_t);
+	tx_comp_ring_size = uc_tx_buf_cnt * sizeof(target_paddr_t);
 	pdev->ipa_uc_tx_rsc.tx_comp_base.vaddr =
 		qdf_mem_alloc_consistent(
 			pdev->osdev, pdev->osdev->dev,

+ 2 - 2
core/dp/htt/htt_types.h

@@ -56,7 +56,7 @@
 
 struct htt_htc_pkt {
 	void *pdev_ctxt;
-	dma_addr_t nbuf_paddr;
+	target_paddr_t nbuf_paddr;
 	HTC_PACKET htc_pkt;
 	uint16_t msdu_id;
 };
@@ -172,7 +172,7 @@ struct htt_ipa_uc_rx_resource_t {
  * @rx_packet_leng: packet length
  */
 struct ipa_uc_rx_ring_elem_t {
-	qdf_dma_addr_t rx_packet_paddr;
+	target_paddr_t rx_packet_paddr;
 	uint32_t vdev_id;
 	uint32_t rx_packet_leng;
 };