Changeset 33548


Ignore:
Timestamp:
2012-09-25T16:47:08+02:00 (5 years ago)
Author:
blogic
Message:

[ramips] add ethernet support for rt5350

Location:
trunk/target/linux/ramips/files/drivers/net/ethernet/ramips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h

    r30732 r33548  
    5555#define RAMIPS_RX_DLY_INT               BIT(0) 
    5656 
     57#define RT5350_RX_DLY_INT               BIT(30) 
     58#define RT5350_TX_DLY_INT               BIT(28) 
     59 
    5760/* registers */ 
    5861#define RAMIPS_FE_OFFSET                0x0000 
     
    6669#define RAMIPS_POLICYTABLE_OFFSET       0x1000 
    6770 
     71#define RT5350_PDMA_OFFSET              0x0800 
     72#define RT5350_SDM_OFFSET               0x0c00 
     73 
    6874#define RAMIPS_MDIO_ACCESS              (RAMIPS_FE_OFFSET + 0x00) 
    6975#define RAMIPS_MDIO_CFG                 (RAMIPS_FE_OFFSET + 0x04) 
     
    94100#define RAMIPS_CDMA_CSG_CFG             (RAMIPS_CDMA_OFFSET + 0x00) 
    95101#define RAMIPS_CDMA_SCH_CFG             (RAMIPS_CDMA_OFFSET + 0x04) 
     102 
     103#define RT5350_TX_BASE_PTR0             (RT5350_PDMA_OFFSET + 0x00) 
     104#define RT5350_TX_MAX_CNT0              (RT5350_PDMA_OFFSET + 0x04) 
     105#define RT5350_TX_CTX_IDX0              (RT5350_PDMA_OFFSET + 0x08) 
     106#define RT5350_TX_DTX_IDX0              (RT5350_PDMA_OFFSET + 0x0C) 
     107#define RT5350_TX_BASE_PTR1             (RT5350_PDMA_OFFSET + 0x10) 
     108#define RT5350_TX_MAX_CNT1              (RT5350_PDMA_OFFSET + 0x14) 
     109#define RT5350_TX_CTX_IDX1              (RT5350_PDMA_OFFSET + 0x18) 
     110#define RT5350_TX_DTX_IDX1              (RT5350_PDMA_OFFSET + 0x1C) 
     111#define RT5350_TX_BASE_PTR2             (RT5350_PDMA_OFFSET + 0x20) 
     112#define RT5350_TX_MAX_CNT2              (RT5350_PDMA_OFFSET + 0x24) 
     113#define RT5350_TX_CTX_IDX2              (RT5350_PDMA_OFFSET + 0x28) 
     114#define RT5350_TX_DTX_IDX2              (RT5350_PDMA_OFFSET + 0x2C) 
     115#define RT5350_TX_BASE_PTR3             (RT5350_PDMA_OFFSET + 0x30) 
     116#define RT5350_TX_MAX_CNT3              (RT5350_PDMA_OFFSET + 0x34) 
     117#define RT5350_TX_CTX_IDX3              (RT5350_PDMA_OFFSET + 0x38) 
     118#define RT5350_TX_DTX_IDX3              (RT5350_PDMA_OFFSET + 0x3C) 
     119#define RT5350_RX_BASE_PTR0             (RT5350_PDMA_OFFSET + 0x100) 
     120#define RT5350_RX_MAX_CNT0              (RT5350_PDMA_OFFSET + 0x104) 
     121#define RT5350_RX_CALC_IDX0             (RT5350_PDMA_OFFSET + 0x108) 
     122#define RT5350_RX_DRX_IDX0              (RT5350_PDMA_OFFSET + 0x10C) 
     123#define RT5350_RX_BASE_PTR1             (RT5350_PDMA_OFFSET + 0x110) 
     124#define RT5350_RX_MAX_CNT1              (RT5350_PDMA_OFFSET + 0x114) 
     125#define RT5350_RX_CALC_IDX1             (RT5350_PDMA_OFFSET + 0x118) 
     126#define RT5350_RX_DRX_IDX1              (RT5350_PDMA_OFFSET + 0x11C) 
     127#define RT5350_PDMA_GLO_CFG             (RT5350_PDMA_OFFSET + 0x204) 
     128#define RT5350_PDMA_RST_CFG             (RT5350_PDMA_OFFSET + 0x208) 
     129#define RT5350_DLY_INT_CFG              (RT5350_PDMA_OFFSET + 0x20c) 
     130#define RT5350_FE_INT_STATUS            (RT5350_PDMA_OFFSET + 0x220) 
     131#define RT5350_FE_INT_ENABLE            (RT5350_PDMA_OFFSET + 0x228) 
     132#define RT5350_PDMA_SCH_CFG             (RT5350_PDMA_OFFSET + 0x280) 
     133 
    96134 
    97135#define RAMIPS_PDMA_GLO_CFG             (RAMIPS_PDMA_OFFSET + 0x00) 
     
    124162#define RAMIPS_RX_DRX_IDX1              (RAMIPS_PDMA_OFFSET + 0x6C) 
    125163 
     164#define RT5350_SDM_CFG                  (RT5350_SDM_OFFSET + 0x00)  //Switch DMA configuration 
     165#define RT5350_SDM_RRING                (RT5350_SDM_OFFSET + 0x04)  //Switch DMA Rx Ring 
     166#define RT5350_SDM_TRING                (RT5350_SDM_OFFSET + 0x08)  //Switch DMA Tx Ring 
     167#define RT5350_SDM_MAC_ADRL             (RT5350_SDM_OFFSET + 0x0C)  //Switch MAC address LSB 
     168#define RT5350_SDM_MAC_ADRH             (RT5350_SDM_OFFSET + 0x10)  //Switch MAC Address MSB 
     169#define RT5350_SDM_TPCNT                (RT5350_SDM_OFFSET + 0x100) //Switch DMA Tx packet count 
     170#define RT5350_SDM_TBCNT                (RT5350_SDM_OFFSET + 0x104) //Switch DMA Tx byte count 
     171#define RT5350_SDM_RPCNT                (RT5350_SDM_OFFSET + 0x108) //Switch DMA rx packet count 
     172#define RT5350_SDM_RBCNT                (RT5350_SDM_OFFSET + 0x10C) //Switch DMA rx byte count 
     173#define RT5350_SDM_CS_ERR               (RT5350_SDM_OFFSET + 0x110) //Switch DMA rx checksum error count 
     174 
     175#define RT5350_SDM_ICS_EN               BIT(16) 
     176#define RT5350_SDM_TCS_EN               BIT(17) 
     177#define RT5350_SDM_UCS_EN               BIT(18) 
     178 
     179 
    126180/* MDIO_CFG register bits */ 
    127181#define RAMIPS_MDIO_CFG_AUTO_POLL_EN    BIT(29) 
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c

    r33547 r33548  
    3434 
    3535#ifdef CONFIG_RALINK_RT305X 
     36#include <rt305x.h> 
    3637#include "ramips_esw.c" 
    3738#else 
    3839static inline int rt305x_esw_init(void) { return 0; } 
    3940static inline void rt305x_esw_exit(void) { } 
     41static inline int soc_is_rt5350(void) { return 0; } 
    4042#endif 
    4143 
     
    4749#define RADEBUG(fmt, args...)   do {} while (0) 
    4850#endif 
     51 
     52#define RX_DLY_INT ((soc_is_rt5350())?(RT5350_RX_DLY_INT):(RAMIPS_RX_DLY_INT)) 
     53#define TX_DLY_INT ((soc_is_rt5350())?(RT5350_TX_DLY_INT):(RAMIPS_TX_DLY_INT)) 
    4954 
    5055enum raeth_reg { 
     
    7782}; 
    7883 
     84static const u32 rt5350_reg_table[RAETH_REG_COUNT] = { 
     85        [RAETH_REG_PDMA_GLO_CFG] = RT5350_PDMA_GLO_CFG, 
     86        [RAETH_REG_PDMA_RST_CFG] = RT5350_PDMA_RST_CFG, 
     87        [RAETH_REG_DLY_INT_CFG] = RT5350_DLY_INT_CFG, 
     88        [RAETH_REG_TX_BASE_PTR0] = RT5350_TX_BASE_PTR0, 
     89        [RAETH_REG_TX_MAX_CNT0] = RT5350_TX_MAX_CNT0, 
     90        [RAETH_REG_TX_CTX_IDX0] = RT5350_TX_CTX_IDX0, 
     91        [RAETH_REG_RX_BASE_PTR0] = RT5350_RX_BASE_PTR0, 
     92        [RAETH_REG_RX_MAX_CNT0] = RT5350_RX_MAX_CNT0, 
     93        [RAETH_REG_RX_CALC_IDX0] = RT5350_RX_CALC_IDX0, 
     94        [RAETH_REG_FE_INT_ENABLE] = RT5350_FE_INT_ENABLE, 
     95        [RAETH_REG_FE_INT_STATUS] = RT5350_FE_INT_STATUS, 
     96}; 
     97 
    7998static struct net_device * ramips_dev; 
    8099static void __iomem *ramips_fe_base = 0; 
     
    84103        const u32 *table; 
    85104 
    86         table = ramips_reg_table; 
     105        if (soc_is_rt5350()) 
     106                table = rt5350_reg_table; 
     107        else 
     108                table = ramips_reg_table; 
    87109 
    88110        return table[reg]; 
     
    134156ramips_hw_set_macaddr(unsigned char *mac) 
    135157{ 
    136         ramips_fe_wr((mac[0] << 8) | mac[1], RAMIPS_GDMA1_MAC_ADRH); 
    137         ramips_fe_wr((mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5], 
    138                      RAMIPS_GDMA1_MAC_ADRL); 
     158        if (soc_is_rt5350()) { 
     159                ramips_fe_wr((mac[0] << 8) | mac[1], RT5350_SDM_MAC_ADRH); 
     160                ramips_fe_wr((mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5], 
     161                             RT5350_SDM_MAC_ADRL); 
     162        } else { 
     163                ramips_fe_wr((mac[0] << 8) | mac[1], RAMIPS_GDMA1_MAC_ADRH); 
     164                ramips_fe_wr((mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5], 
     165                             RAMIPS_GDMA1_MAC_ADRL); 
     166        } 
    139167} 
    140168 
     
    826854                tasklet_schedule(&re->rx_tasklet); 
    827855        else 
    828                 ramips_fe_int_enable(RAMIPS_RX_DLY_INT); 
     856                ramips_fe_int_enable(RX_DLY_INT); 
    829857} 
    830858 
     
    859887        spin_unlock(&re->page_lock); 
    860888 
    861         ramips_fe_int_enable(RAMIPS_TX_DLY_INT); 
     889        ramips_fe_int_enable(TX_DLY_INT); 
    862890} 
    863891 
     
    884912        ramips_fe_twr(status, RAETH_REG_FE_INT_STATUS); 
    885913 
    886         if (status & RAMIPS_RX_DLY_INT) { 
    887                 ramips_fe_int_disable(RAMIPS_RX_DLY_INT); 
     914        if (status & RX_DLY_INT) { 
     915                ramips_fe_int_disable(RX_DLY_INT); 
    888916                tasklet_schedule(&re->rx_tasklet); 
    889917        } 
    890918 
    891         if (status & RAMIPS_TX_DLY_INT) { 
    892                 ramips_fe_int_disable(RAMIPS_TX_DLY_INT); 
     919        if (status & TX_DLY_INT) { 
     920                ramips_fe_int_disable(TX_DLY_INT); 
    893921                tasklet_schedule(&re->tx_housekeeping_tasklet); 
    894922        } 
     
    934962 
    935963        ramips_fe_twr(RAMIPS_DELAY_INIT, RAETH_REG_DLY_INT_CFG); 
    936         ramips_fe_twr(RAMIPS_TX_DLY_INT | RAMIPS_RX_DLY_INT, RAETH_REG_FE_INT_ENABLE); 
    937         ramips_fe_wr(ramips_fe_rr(RAMIPS_GDMA1_FWD_CFG) & 
    938                 ~(RAMIPS_GDM1_ICS_EN | RAMIPS_GDM1_TCS_EN | RAMIPS_GDM1_UCS_EN | 0xffff), 
    939                 RAMIPS_GDMA1_FWD_CFG); 
    940         ramips_fe_wr(ramips_fe_rr(RAMIPS_CDMA_CSG_CFG) & 
    941                 ~(RAMIPS_ICS_GEN_EN | RAMIPS_TCS_GEN_EN | RAMIPS_UCS_GEN_EN), 
    942                 RAMIPS_CDMA_CSG_CFG); 
    943         ramips_fe_wr(RAMIPS_PSE_FQFC_CFG_INIT, RAMIPS_PSE_FQ_CFG); 
     964        ramips_fe_twr(TX_DLY_INT | RX_DLY_INT, RAETH_REG_FE_INT_ENABLE); 
     965        if (soc_is_rt5350()) { 
     966                ramips_fe_wr(ramips_fe_rr(RT5350_SDM_CFG) & 
     967                        ~(RT5350_SDM_ICS_EN | RT5350_SDM_TCS_EN | RT5350_SDM_UCS_EN | 0xffff), 
     968                        RT5350_SDM_CFG); 
     969        } else { 
     970                ramips_fe_wr(ramips_fe_rr(RAMIPS_GDMA1_FWD_CFG) & 
     971                        ~(RAMIPS_GDM1_ICS_EN | RAMIPS_GDM1_TCS_EN | RAMIPS_GDM1_UCS_EN | 0xffff), 
     972                        RAMIPS_GDMA1_FWD_CFG); 
     973                ramips_fe_wr(ramips_fe_rr(RAMIPS_CDMA_CSG_CFG) & 
     974                        ~(RAMIPS_ICS_GEN_EN | RAMIPS_TCS_GEN_EN | RAMIPS_UCS_GEN_EN), 
     975                        RAMIPS_CDMA_CSG_CFG); 
     976                ramips_fe_wr(RAMIPS_PSE_FQFC_CFG_INIT, RAMIPS_PSE_FQ_CFG); 
     977        } 
    944978        ramips_fe_wr(1, RAMIPS_FE_RST_GL); 
    945979        ramips_fe_wr(0, RAMIPS_FE_RST_GL); 
Note: See TracChangeset for help on using the changeset viewer.