Changeset 26777


Ignore:
Timestamp:
2011-04-28T21:30:49+02:00 (7 years ago)
Author:
nbd
Message:

ar71xx: fix MDIO access on ar7242 (based on a patch by Jess Zhu)

Location:
trunk/target/linux/ar71xx/files/arch/mips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c

    r26561 r26777  
    106106}; 
    107107 
    108 void __init ar71xx_add_device_mdio(u32 phy_mask) 
    109 { 
    110         switch (ar71xx_soc) { 
    111         case AR71XX_SOC_AR7240: 
    112                 ar71xx_mdio_data.is_ar7240 = 1; 
    113                 break; 
    114         case AR71XX_SOC_AR7241: 
    115                 ar71xx_mdio_data.is_ar7240 = 1; 
    116                 ar71xx_mdio_resources[0].start = AR71XX_GE1_BASE; 
    117                 ar71xx_mdio_resources[0].end = AR71XX_GE1_BASE + 0x200 - 1; 
    118                 break; 
    119         case AR71XX_SOC_AR7242: 
    120                 ar71xx_mdio_data.is_ar7240 = 1; 
    121                 break; 
    122         default: 
    123                 break; 
    124         } 
    125  
    126         ar71xx_mdio_data.phy_mask = phy_mask; 
    127  
    128         platform_device_register(&ar71xx_mdio_device); 
    129 } 
    130  
    131108static void ar71xx_set_pll(u32 cfg_reg, u32 pll_reg, u32 pll_val, u32 shift) 
    132109{ 
     
    158135} 
    159136 
     137void __init ar71xx_add_device_mdio(u32 phy_mask) 
     138{ 
     139        switch (ar71xx_soc) { 
     140        case AR71XX_SOC_AR7240: 
     141                ar71xx_mdio_data.is_ar7240 = 1; 
     142                break; 
     143        case AR71XX_SOC_AR7241: 
     144                ar71xx_mdio_data.is_ar7240 = 1; 
     145                ar71xx_mdio_resources[0].start = AR71XX_GE1_BASE; 
     146                ar71xx_mdio_resources[0].end = AR71XX_GE1_BASE + 0x200 - 1; 
     147                break; 
     148        case AR71XX_SOC_AR7242: 
     149                ar71xx_set_pll(AR71XX_PLL_REG_SEC_CONFIG, 
     150                               AR7242_PLL_REG_ETH0_INT_CLOCK, 0x62000000, 
     151                               AR71XX_ETH0_PLL_SHIFT); 
     152                break; 
     153        default: 
     154                break; 
     155        } 
     156 
     157        ar71xx_mdio_data.phy_mask = phy_mask; 
     158 
     159        platform_device_register(&ar71xx_mdio_device); 
     160} 
     161 
    160162struct ar71xx_eth_pll_data ar71xx_eth0_pll_data; 
    161163struct ar71xx_eth_pll_data ar71xx_eth1_pll_data; 
     
    218220{ 
    219221        /* TODO */ 
     222} 
     223 
     224static void ar7242_set_pll_ge0(int speed) 
     225{ 
     226        u32 val = ar71xx_get_eth_pll(0, speed); 
     227 
     228        ar71xx_set_pll(AR71XX_PLL_REG_SEC_CONFIG, AR7242_PLL_REG_ETH0_INT_CLOCK, 
     229                       val, AR71XX_ETH0_PLL_SHIFT); 
    220230} 
    221231 
     
    340350#define AR724X_PLL_VAL_10       0x00991099 
    341351 
     352#define AR7242_PLL_VAL_1000     0x1c000000 
     353#define AR7242_PLL_VAL_100      0x00000101 
     354#define AR7242_PLL_VAL_10       0x00001616 
     355 
    342356#define AR91XX_PLL_VAL_1000     0x1a000000 
    343357#define AR91XX_PLL_VAL_100      0x13000a44 
     
    371385        case AR71XX_SOC_AR7240: 
    372386        case AR71XX_SOC_AR7241: 
    373         case AR71XX_SOC_AR7242: 
    374387                pll_10 = AR724X_PLL_VAL_10; 
    375388                pll_100 = AR724X_PLL_VAL_100; 
    376389                pll_1000 = AR724X_PLL_VAL_1000; 
     390                break; 
     391 
     392        case AR71XX_SOC_AR7242: 
     393                pll_10 = AR7242_PLL_VAL_10; 
     394                pll_100 = AR7242_PLL_VAL_100; 
     395                pll_1000 = AR7242_PLL_VAL_1000; 
    377396                break; 
    378397 
     
    466485                break; 
    467486 
     487        case AR71XX_SOC_AR7242: 
     488                ar71xx_eth0_data.reset_bit |= AR724X_RESET_GE0_MDIO; 
     489                ar71xx_eth1_data.reset_bit |= AR724X_RESET_GE1_MDIO; 
     490                pdata->ddr_flush = id ? ar724x_ddr_flush_ge1 
     491                                      : ar724x_ddr_flush_ge0; 
     492                pdata->set_pll =  id ? ar724x_set_pll_ge1 
     493                                     : ar7242_set_pll_ge0; 
     494                pdata->has_gbit = 1; 
     495                pdata->is_ar724x = 1; 
     496 
     497                if (!pdata->fifo_cfg1) 
     498                        pdata->fifo_cfg1 = 0x0010ffff; 
     499                if (!pdata->fifo_cfg2) 
     500                        pdata->fifo_cfg2 = 0x015500aa; 
     501                if (!pdata->fifo_cfg3) 
     502                        pdata->fifo_cfg3 = 0x01f00140; 
     503                break; 
     504 
    468505        case AR71XX_SOC_AR7241: 
    469         case AR71XX_SOC_AR7242: 
    470506                ar71xx_eth0_data.reset_bit |= AR724X_RESET_GE0_MDIO; 
    471507                ar71xx_eth1_data.reset_bit |= AR724X_RESET_GE1_MDIO; 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r26594 r26777  
    167167#define AR724X_DDR_DIV_MASK             0x3 
    168168 
     169#define AR7242_PLL_REG_ETH0_INT_CLOCK   0x2c 
     170 
    169171#define AR91XX_PLL_REG_CPU_CONFIG       0x00 
    170172#define AR91XX_PLL_REG_ETH_CONFIG       0x04 
Note: See TracChangeset for help on using the changeset viewer.