* [PATCH] Revert "net: qcom/emac: enforce DMA address restrictions"
@ 2017-10-12 17:42 Timur Tabi
2017-10-12 17:50 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Timur Tabi @ 2017-10-12 17:42 UTC (permalink / raw)
To: David S. Miller, netdev, David.Laight; +Cc: timur
This reverts commit df1ec1b9d0df57e96011f175418dc95b1af46821.
It turns out that memory allocated via dma_alloc_coherent is always
aligned to the size of the buffer, so there's no way the RRD and RFD
can ever be in separate 32-bit regions.
Signed-off-by: Timur Tabi <timur@codeaurora.org>
---
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 39 +++++++++++----------------
1 file changed, 15 insertions(+), 24 deletions(-)
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
index 0f5ece5d9507..9cbb27263742 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
@@ -734,11 +734,6 @@ static int emac_rx_descs_alloc(struct emac_adapter *adpt)
rx_q->rrd.size = rx_q->rrd.count * (adpt->rrd_size * 4);
rx_q->rfd.size = rx_q->rfd.count * (adpt->rfd_size * 4);
- /* Check if the RRD and RFD are aligned properly, and if not, adjust. */
- if (upper_32_bits(ring_header->dma_addr) !=
- upper_32_bits(ring_header->dma_addr + ALIGN(rx_q->rrd.size, 8)))
- ring_header->used = ALIGN(rx_q->rrd.size, 8);
-
rx_q->rrd.dma_addr = ring_header->dma_addr + ring_header->used;
rx_q->rrd.v_addr = ring_header->v_addr + ring_header->used;
ring_header->used += ALIGN(rx_q->rrd.size, 8);
@@ -772,18 +767,11 @@ int emac_mac_rx_tx_rings_alloc_all(struct emac_adapter *adpt)
/* Ring DMA buffer. Each ring may need up to 8 bytes for alignment,
* hence the additional padding bytes are allocated.
- *
- * Also double the memory allocated for the RRD so that we can
- * re-align it if necessary. The EMAC has a restriction that the
- * upper 32 bits of the base addresses for the RFD and RRD rings
- * must be the same. It is extremely unlikely that this is not the
- * case, since the rings are only a few KB in size. However, we
- * need to check for this anyway, and if the two rings are not
- * compliant, then we re-align.
*/
- ring_header->size = ALIGN(num_tx_descs * (adpt->tpd_size * 4), 8) +
- ALIGN(num_rx_descs * (adpt->rfd_size * 4), 8) +
- ALIGN(num_rx_descs * (adpt->rrd_size * 4), 8) * 2;
+ ring_header->size = num_tx_descs * (adpt->tpd_size * 4) +
+ num_rx_descs * (adpt->rfd_size * 4) +
+ num_rx_descs * (adpt->rrd_size * 4) +
+ 8 + 2 * 8; /* 8 byte per one Tx and two Rx rings */
ring_header->used = 0;
ring_header->v_addr = dma_zalloc_coherent(dev, ring_header->size,
@@ -792,23 +780,26 @@ int emac_mac_rx_tx_rings_alloc_all(struct emac_adapter *adpt)
if (!ring_header->v_addr)
return -ENOMEM;
- ret = emac_rx_descs_alloc(adpt);
- if (ret) {
- netdev_err(adpt->netdev, "error: Rx Queue alloc failed\n");
- goto err_alloc_rx;
- }
+ ring_header->used = ALIGN(ring_header->dma_addr, 8) -
+ ring_header->dma_addr;
ret = emac_tx_q_desc_alloc(adpt, &adpt->tx_q);
if (ret) {
- netdev_err(adpt->netdev, "transmit queue allocation failed\n");
+ netdev_err(adpt->netdev, "error: Tx Queue alloc failed\n");
goto err_alloc_tx;
}
+ ret = emac_rx_descs_alloc(adpt);
+ if (ret) {
+ netdev_err(adpt->netdev, "error: Rx Queue alloc failed\n");
+ goto err_alloc_rx;
+ }
+
return 0;
-err_alloc_tx:
- emac_rx_q_bufs_free(adpt);
err_alloc_rx:
+ emac_tx_q_bufs_free(adpt);
+err_alloc_tx:
dma_free_coherent(dev, ring_header->size,
ring_header->v_addr, ring_header->dma_addr);
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Revert "net: qcom/emac: enforce DMA address restrictions"
2017-10-12 17:42 [PATCH] Revert "net: qcom/emac: enforce DMA address restrictions" Timur Tabi
@ 2017-10-12 17:50 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2017-10-12 17:50 UTC (permalink / raw)
To: timur; +Cc: netdev, David.Laight
From: Timur Tabi <timur@codeaurora.org>
Date: Thu, 12 Oct 2017 12:42:04 -0500
> This reverts commit df1ec1b9d0df57e96011f175418dc95b1af46821.
>
> It turns out that memory allocated via dma_alloc_coherent is always
> aligned to the size of the buffer, so there's no way the RRD and RFD
> can ever be in separate 32-bit regions.
>
> Signed-off-by: Timur Tabi <timur@codeaurora.org>
Applied, thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-10-12 17:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-12 17:42 [PATCH] Revert "net: qcom/emac: enforce DMA address restrictions" Timur Tabi
2017-10-12 17:50 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).