]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net: qcom/emac: extend DMA mask to 46bits
authorWang Dongsheng <dongsheng.wang@hxt-semitech.com>
Tue, 23 Jan 2018 04:25:06 +0000 (20:25 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Jan 2018 21:32:29 +0000 (16:32 -0500)
Bit TPD3[31] is used as a timestamp bit if PTP is enabled, but
it's used as an address bit if PTP is disabled.  Since PTP isn't
supported by the driver, we can extend the DMA address to 46 bits.

Signed-off-by: Wang Dongsheng <dongsheng.wang@hxt-semitech.com>
Acked-by: Timur Tabi <timur@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/emac/emac-mac.h
drivers/net/ethernet/qualcomm/emac/emac.c

index 5028fb4bec2ba6cfea9fc49696dcbef1707783df..4beedb8faa1ef7f6bdd66bebdbe54dea2ecc6163 100644 (file)
@@ -114,8 +114,9 @@ struct emac_tpd {
 #define TPD_INSTC_SET(tpd, val)                BITS_SET((tpd)->word[3], 17, 17, val)
 /* 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}
+ * Extend TPD_BUFFER_ADDR_H to [31, 18], because we never enable timestamping.
  */
-#define TPD_BUFFER_ADDR_H_SET(tpd, val)        BITS_SET((tpd)->word[3], 18, 30, val)
+#define TPD_BUFFER_ADDR_H_SET(tpd, val)        BITS_SET((tpd)->word[3], 18, 31, val)
 /* Format D. Word offset from the 1st byte of this packet to start to calculate
  * the custom checksum.
  */
index 38c924bdd32e46f3586eac77d5a63c361993fd09..13235baf476633df5b3ecfd5b4aa90c1519328b9 100644 (file)
@@ -615,8 +615,11 @@ 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;