Since PTP doesn't support yet, so extend the DMA address to 46bits. When PTP is supported, the dma_mask should be fixed dynamically.
Signed-off-by: Wang Dongsheng <wdsc...@gmail.com> --- v2: - Changes PATCH subject. - Dynamic fix TPD_BUFFER_ADDR_H_SET size. - Modify DMA MASK to 46bits. - Add Comments for DMA MASK. --- drivers/net/ethernet/qualcomm/emac/emac-mac.c | 9 ++++++--- drivers/net/ethernet/qualcomm/emac/emac-mac.h | 5 ++++- drivers/net/ethernet/qualcomm/emac/emac.c | 8 ++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c index 9cbb2726..db73348 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c +++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c @@ -1362,7 +1362,8 @@ static void emac_tx_fill_tpd(struct emac_adapter *adpt, goto error; TPD_BUFFER_ADDR_L_SET(tpd, lower_32_bits(tpbuf->dma_addr)); - TPD_BUFFER_ADDR_H_SET(tpd, upper_32_bits(tpbuf->dma_addr)); + TPD_BUFFER_ADDR_H_SET(adpt, tpd, + upper_32_bits(tpbuf->dma_addr)); TPD_BUF_LEN_SET(tpd, tpbuf->length); emac_tx_tpd_create(adpt, tx_q, tpd); count++; @@ -1380,7 +1381,8 @@ static void emac_tx_fill_tpd(struct emac_adapter *adpt, goto error; TPD_BUFFER_ADDR_L_SET(tpd, lower_32_bits(tpbuf->dma_addr)); - TPD_BUFFER_ADDR_H_SET(tpd, upper_32_bits(tpbuf->dma_addr)); + TPD_BUFFER_ADDR_H_SET(adpt, tpd, + upper_32_bits(tpbuf->dma_addr)); TPD_BUF_LEN_SET(tpd, tpbuf->length); emac_tx_tpd_create(adpt, tx_q, tpd); count++; @@ -1402,7 +1404,8 @@ static void emac_tx_fill_tpd(struct emac_adapter *adpt, goto error; TPD_BUFFER_ADDR_L_SET(tpd, lower_32_bits(tpbuf->dma_addr)); - TPD_BUFFER_ADDR_H_SET(tpd, upper_32_bits(tpbuf->dma_addr)); + TPD_BUFFER_ADDR_H_SET(adpt, tpd, + upper_32_bits(tpbuf->dma_addr)); TPD_BUF_LEN_SET(tpd, tpbuf->length); emac_tx_tpd_create(adpt, tx_q, tpd); count++; diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.h b/drivers/net/ethernet/qualcomm/emac/emac-mac.h index 5028fb4..31c1f21 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac-mac.h +++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.h @@ -115,7 +115,10 @@ struct emac_tpd { /* High-14bit Buffer Address, So, the 64b-bit address is * {DESC_CTRL_11_TX_DATA_HIADDR[17:0],(register) BUFFER_ADDR_H, BUFFER_ADDR_L} */ -#define TPD_BUFFER_ADDR_H_SET(tpd, val) BITS_SET((tpd)->word[3], 18, 30, val) +#define TPD_BUFFER_ADDR_H_SET(adpt, tpd, val) BITS_SET((tpd)->word[3], 18, \ + TX_TS_ENABLE & \ + readl((adpt)->csr + EMAC_EMAC_WRAPPER_CSR1) ? \ + 30 : 31, val) /* Format D. Word offset from the 1st byte of this packet to start to calculate * the custom checksum. */ diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c index 70c92b6..de5a4fb 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac.c +++ b/drivers/net/ethernet/qualcomm/emac/emac.c @@ -615,8 +615,12 @@ static int emac_probe(struct platform_device *pdev) u32 reg; int ret; - /* The TPD buffer address is limited to 45 bits. */ - ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(45)); + /* + * The TPD buffer address is limited to: + * 1. PTP: 45bits. (Driver doesn't support yet.) + * 2. NON-PTP: 46bits. + */ + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(46)); if (ret) { dev_err(&pdev->dev, "could not set DMA mask\n"); return ret; -- 2.7.4