]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/marvell/mvneta.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / drivers / net / ethernet / marvell / mvneta.c
index 389a854b88fc7280403e17d249f128b9b4431382..e35bac7cfdf14dc85d2bb55b49a864c29f2ae2c6 100644 (file)
 #define MVNETA_MAC_ADDR_HIGH                     0x2418
 #define MVNETA_SDMA_CONFIG                       0x241c
 #define      MVNETA_SDMA_BRST_SIZE_16            4
-#define      MVNETA_NO_DESC_SWAP                 0x0
 #define      MVNETA_RX_BRST_SZ_MASK(burst)       ((burst) << 1)
 #define      MVNETA_RX_NO_DATA_SWAP              BIT(4)
 #define      MVNETA_TX_NO_DATA_SWAP              BIT(5)
+#define      MVNETA_DESC_SWAP                    BIT(6)
 #define      MVNETA_TX_BRST_SZ_MASK(burst)       ((burst) << 22)
 #define MVNETA_PORT_STATUS                       0x2444
 #define      MVNETA_TX_IN_PRGRS                  BIT(1)
@@ -266,8 +266,7 @@ struct mvneta_port {
  * layout of the transmit and reception DMA descriptors, and their
  * layout is therefore defined by the hardware design
  */
-struct mvneta_tx_desc {
-       u32  command;           /* Options used by HW for packet transmitting.*/
+
 #define MVNETA_TX_L3_OFF_SHIFT 0
 #define MVNETA_TX_IP_HLEN_SHIFT        8
 #define MVNETA_TX_L4_UDP       BIT(16)
@@ -282,15 +281,6 @@ struct mvneta_tx_desc {
 #define MVNETA_TX_L4_CSUM_FULL BIT(30)
 #define MVNETA_TX_L4_CSUM_NOT  BIT(31)
 
-       u16  reserverd1;        /* csum_l4 (for future use)             */
-       u16  data_size;         /* Data size of transmitted packet in bytes */
-       u32  buf_phys_addr;     /* Physical addr of transmitted buffer  */
-       u32  reserved2;         /* hw_cmd - (for future use, PMT)       */
-       u32  reserved3[4];      /* Reserved - (for future use)          */
-};
-
-struct mvneta_rx_desc {
-       u32  status;            /* Info about received packet           */
 #define MVNETA_RXD_ERR_CRC             0x0
 #define MVNETA_RXD_ERR_SUMMARY         BIT(16)
 #define MVNETA_RXD_ERR_OVERRUN         BIT(17)
@@ -301,16 +291,57 @@ struct mvneta_rx_desc {
 #define MVNETA_RXD_FIRST_LAST_DESC     (BIT(26) | BIT(27))
 #define MVNETA_RXD_L4_CSUM_OK          BIT(30)
 
+#if defined(__LITTLE_ENDIAN)
+struct mvneta_tx_desc {
+       u32  command;           /* Options used by HW for packet transmitting.*/
+       u16  reserverd1;        /* csum_l4 (for future use)             */
+       u16  data_size;         /* Data size of transmitted packet in bytes */
+       u32  buf_phys_addr;     /* Physical addr of transmitted buffer  */
+       u32  reserved2;         /* hw_cmd - (for future use, PMT)       */
+       u32  reserved3[4];      /* Reserved - (for future use)          */
+};
+
+struct mvneta_rx_desc {
+       u32  status;            /* Info about received packet           */
        u16  reserved1;         /* pnc_info - (for future use, PnC)     */
        u16  data_size;         /* Size of received packet in bytes     */
+
        u32  buf_phys_addr;     /* Physical address of the buffer       */
        u32  reserved2;         /* pnc_flow_id  (for future use, PnC)   */
+
        u32  buf_cookie;        /* cookie for access to RX buffer in rx path */
        u16  reserved3;         /* prefetch_cmd, for future use         */
        u16  reserved4;         /* csum_l4 - (for future use, PnC)      */
+
+       u32  reserved5;         /* pnc_extra PnC (for future use, PnC)  */
+       u32  reserved6;         /* hw_cmd (for future use, PnC and HWF) */
+};
+#else
+struct mvneta_tx_desc {
+       u16  data_size;         /* Data size of transmitted packet in bytes */
+       u16  reserverd1;        /* csum_l4 (for future use)             */
+       u32  command;           /* Options used by HW for packet transmitting.*/
+       u32  reserved2;         /* hw_cmd - (for future use, PMT)       */
+       u32  buf_phys_addr;     /* Physical addr of transmitted buffer  */
+       u32  reserved3[4];      /* Reserved - (for future use)          */
+};
+
+struct mvneta_rx_desc {
+       u16  data_size;         /* Size of received packet in bytes     */
+       u16  reserved1;         /* pnc_info - (for future use, PnC)     */
+       u32  status;            /* Info about received packet           */
+
+       u32  reserved2;         /* pnc_flow_id  (for future use, PnC)   */
+       u32  buf_phys_addr;     /* Physical address of the buffer       */
+
+       u16  reserved4;         /* csum_l4 - (for future use, PnC)      */
+       u16  reserved3;         /* prefetch_cmd, for future use         */
+       u32  buf_cookie;        /* cookie for access to RX buffer in rx path */
+
        u32  reserved5;         /* pnc_extra PnC (for future use, PnC)  */
        u32  reserved6;         /* hw_cmd (for future use, PnC and HWF) */
 };
+#endif
 
 struct mvneta_tx_queue {
        /* Number of this TX queue, in the range 0-7 */
@@ -910,9 +941,11 @@ static void mvneta_defaults_set(struct mvneta_port *pp)
        /* Default burst size */
        val |= MVNETA_TX_BRST_SZ_MASK(MVNETA_SDMA_BRST_SIZE_16);
        val |= MVNETA_RX_BRST_SZ_MASK(MVNETA_SDMA_BRST_SIZE_16);
+       val |= MVNETA_RX_NO_DATA_SWAP | MVNETA_TX_NO_DATA_SWAP;
 
-       val |= (MVNETA_RX_NO_DATA_SWAP | MVNETA_TX_NO_DATA_SWAP |
-               MVNETA_NO_DESC_SWAP);
+#if defined(__BIG_ENDIAN)
+       val |= MVNETA_DESC_SWAP;
+#endif
 
        /* Assign port SDMA configuration */
        mvreg_write(pp, MVNETA_SDMA_CONFIG, val);