ralink: improve check rx sg function. use check frags instead of function call
[openwrt/svn-archive/archive.git] / target / linux / ramips / files / drivers / net / ethernet / ralink / soc_mt7620.c
index 0c1384b51c7c5ad85218375c325c1b27b3ea4aba..5a7ee35eb0379ae7f227eca2aa613e835e192f51 100644 (file)
@@ -28,7 +28,6 @@
 #define MT7620A_CDMA_CSG_CFG   0x400
 #define MT7620_DMA_VID         (MT7620A_CDMA_CSG_CFG | 0x30)
 #define MT7621_DMA_VID         0xa8
-#define MT7620A_DMA_2B_OFFSET  BIT(31)
 #define MT7620A_RESET_FE       BIT(21)
 #define MT7621_RESET_FE                BIT(6)
 #define MT7620A_RESET_ESW      BIT(23)
@@ -39,8 +38,6 @@
 #define MT7621_TX_DMA_UDF      BIT(19)
 #define TX_DMA_FP_BMAP         ((0xff) << 19)
 
-#define SYSC_REG_RESET_CTRL     0x34
-
 #define CDMA_ICS_EN            BIT(2)
 #define CDMA_UCS_EN            BIT(1)
 #define CDMA_TCS_EN            BIT(0)
@@ -105,18 +102,12 @@ static const u32 mt7621_reg_table[FE_REG_COUNT] = {
 
 static void mt7620_fe_reset(void)
 {
-       u32 val = rt_sysc_r32(SYSC_REG_RESET_CTRL);
-
-       rt_sysc_w32(val | MT7620A_RESET_FE | MT7620A_RESET_ESW, SYSC_REG_RESET_CTRL);
-       rt_sysc_w32(val, SYSC_REG_RESET_CTRL);
+       fe_reset(MT7620A_RESET_FE | MT7620A_RESET_ESW);
 }
 
 static void mt7621_fe_reset(void)
 {
-       u32 val = rt_sysc_r32(SYSC_REG_RESET_CTRL);
-
-       rt_sysc_w32(val | MT7621_RESET_FE, SYSC_REG_RESET_CTRL);
-       rt_sysc_w32(val, SYSC_REG_RESET_CTRL);
+       fe_reset(MT7621_RESET_FE);
 }
 
 static void mt7620_rxcsum_config(bool enable)
@@ -177,17 +168,13 @@ static void mt7621_tx_dma(struct fe_tx_dma *txd)
        txd->txd4 = BIT(25);
 }
 
-static void mt7620_rx_dma(struct fe_rx_dma *rxd, u16 len)
-{
-       rxd->rxd2 = RX_DMA_PLEN0(len);
-}
-
 static void mt7620_init_data(struct fe_soc_data *data,
                struct net_device *netdev)
 {
        struct fe_priv *priv = netdev_priv(netdev);
 
-       priv->flags = FE_FLAG_PADDING_64B;
+       priv->flags = FE_FLAG_PADDING_64B | FE_FLAG_RX_2B_OFFSET |
+               FE_FLAG_RX_SG_DMA;
        netdev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
                NETIF_F_HW_VLAN_CTAG_TX;
 
@@ -201,7 +188,8 @@ static void mt7621_init_data(struct fe_soc_data *data,
 {
        struct fe_priv *priv = netdev_priv(netdev);
 
-       priv->flags = FE_FLAG_PADDING_64B;
+       priv->flags = FE_FLAG_PADDING_64B | FE_FLAG_RX_2B_OFFSET |
+               FE_FLAG_RX_SG_DMA;
        netdev->hw_features = NETIF_F_HW_VLAN_CTAG_TX;
 }
 
@@ -223,12 +211,11 @@ static struct fe_soc_data mt7620_data = {
        .set_mac = mt7620_set_mac,
        .fwd_config = mt7620_fwd_config,
        .tx_dma = mt7620_tx_dma,
-       .rx_dma = mt7620_rx_dma,
        .switch_init = mt7620_gsw_probe,
        .switch_config = mt7620_gsw_config,
        .port_init = mt7620_port_init,
        .reg_table = mt7620_reg_table,
-       .pdma_glo_cfg = FE_PDMA_SIZE_16DWORDS | MT7620A_DMA_2B_OFFSET,
+       .pdma_glo_cfg = FE_PDMA_SIZE_16DWORDS,
        .rx_int = RT5350_RX_DONE_INT,
        .tx_int = RT5350_TX_DONE_INT,
        .checksum_bit = MT7620_L4_VALID,
@@ -246,11 +233,10 @@ static struct fe_soc_data mt7621_data = {
        .set_mac = mt7621_set_mac,
        .fwd_config = mt7621_fwd_config,
        .tx_dma = mt7621_tx_dma,
-       .rx_dma = mt7620_rx_dma,
        .switch_init = mt7620_gsw_probe,
        .switch_config = mt7621_gsw_config,
        .reg_table = mt7621_reg_table,
-       .pdma_glo_cfg = FE_PDMA_SIZE_16DWORDS | MT7620A_DMA_2B_OFFSET,
+       .pdma_glo_cfg = FE_PDMA_SIZE_16DWORDS,
        .rx_int = RT5350_RX_DONE_INT,
        .tx_int = RT5350_TX_DONE_INT,
        .checksum_bit = MT7621_L4_VALID,