Changeset 27949 for branches/backfire


Ignore:
Timestamp:
2011-08-10T20:50:12+02:00 (5 years ago)
Author:
nbd
Message:

ar71xx: backport ar7241/ar7242 fixes from trunk

Location:
branches/backfire/target/linux/ar71xx/files/arch/mips
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c

    r24964 r27949  
    4848        u16 *cal_data; 
    4949        u16 cmd; 
     50        u32 bar0; 
    5051        u32 val; 
    5152 
     
    7071 
    7172        /* Setup the PCI device to allow access to the internal registers */ 
    72         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0xffff); 
     73        pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); 
     74 
     75        switch (ar71xx_soc) { 
     76        case AR71XX_SOC_AR7240: 
     77                pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0xffff); 
     78                break; 
     79 
     80        case AR71XX_SOC_AR7241: 
     81        case AR71XX_SOC_AR7242: 
     82                pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0x1000ffff); 
     83                break; 
     84 
     85        default: 
     86                break; 
     87        } 
     88 
    7389        pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    7490        cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
     
    94110        dev->revision = val & 0xff; 
    95111        dev->class = val >> 8; /* upper 3 bytes */ 
     112 
     113        pci_read_config_word(dev, PCI_COMMAND, &cmd); 
     114        cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); 
     115        pci_write_config_word(dev, PCI_COMMAND, cmd); 
     116 
     117        pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); 
    96118 
    97119        iounmap(mem); 
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/dev-usb.c

    r20494 r27949  
    6565 
    6666/* 
    67  * EHCI (USB full speed host controller) 
     67 * EHCI (USB high/full speed host controller) 
    6868 */ 
    6969static struct resource ar71xx_ehci_resources[] = { 
     
    129129        ar71xx_usb_ctrl_wr(USB_CTRL_REG_FLADJ, 0x3); 
    130130 
    131         if (ar71xx_soc == AR71XX_SOC_AR7241 || ar71xx_soc == AR71XX_SOC_AR7242) { 
    132                 ar71xx_ehci_data.is_ar91xx = 1; 
    133                 ar71xx_ehci_device.resource = ar7240_ohci_resources; 
    134                 ar71xx_ehci_device.num_resources = ARRAY_SIZE(ar7240_ohci_resources); 
    135                 platform_device_register(&ar71xx_ehci_device); 
    136         } else { 
    137                 ar71xx_ohci_device.resource = ar7240_ohci_resources; 
    138                 ar71xx_ohci_device.num_resources = ARRAY_SIZE(ar7240_ohci_resources); 
    139                 platform_device_register(&ar71xx_ohci_device); 
    140         } 
     131        ar71xx_ohci_device.resource = ar7240_ohci_resources; 
     132        ar71xx_ohci_device.num_resources = ARRAY_SIZE(ar7240_ohci_resources); 
     133        platform_device_register(&ar71xx_ohci_device); 
     134} 
     135 
     136static void __init ar7241_usb_setup(void) 
     137{ 
     138        ar71xx_device_start(AR724X_RESET_USBSUS_OVERRIDE); 
     139        mdelay(10); 
     140 
     141        ar71xx_device_start(AR724X_RESET_USB_HOST); 
     142        mdelay(10); 
     143 
     144        ar71xx_device_start(AR724X_RESET_USB_PHY); 
     145        mdelay(10); 
     146 
     147        ar71xx_ehci_data.is_ar91xx = 1; 
     148        ar71xx_ehci_device.resource = ar7240_ohci_resources; 
     149        ar71xx_ehci_device.num_resources = ARRAY_SIZE(ar7240_ohci_resources); 
     150        platform_device_register(&ar71xx_ehci_device); 
    141151} 
    142152 
     
    160170        switch (ar71xx_soc) { 
    161171        case AR71XX_SOC_AR7240: 
     172                ar7240_usb_setup(); 
     173                break; 
     174 
    162175        case AR71XX_SOC_AR7241: 
    163176        case AR71XX_SOC_AR7242: 
    164                 ar7240_usb_setup(); 
     177                ar7241_usb_setup(); 
    165178                break; 
    166179 
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c

    r27706 r27949  
    8383}; 
    8484 
    85 void __init ar71xx_add_device_mdio(u32 phy_mask) 
    86 { 
    87         switch (ar71xx_soc) { 
    88         case AR71XX_SOC_AR7240: 
    89         case AR71XX_SOC_AR7241: 
    90         case AR71XX_SOC_AR7242: 
    91                 ar71xx_mdio_data.is_ar7240 = 1; 
    92                 break; 
    93         default: 
    94                 break; 
    95         } 
    96  
    97         ar71xx_mdio_data.phy_mask = phy_mask; 
    98  
    99         platform_device_register(&ar71xx_mdio_device); 
    100 } 
    101  
    10285static void ar71xx_set_pll(u32 cfg_reg, u32 pll_reg, u32 pll_val, u32 shift) 
    10386{ 
     
    129112} 
    130113 
     114void __init ar71xx_add_device_mdio(u32 phy_mask) 
     115{ 
     116        switch (ar71xx_soc) { 
     117        case AR71XX_SOC_AR7240: 
     118                ar71xx_mdio_data.is_ar7240 = 1; 
     119                break; 
     120        case AR71XX_SOC_AR7241: 
     121                ar71xx_mdio_data.is_ar7240 = 1; 
     122                ar71xx_mdio_resources[0].start = AR71XX_GE1_BASE; 
     123                ar71xx_mdio_resources[0].end = AR71XX_GE1_BASE + 0x200 - 1; 
     124                break; 
     125        case AR71XX_SOC_AR7242: 
     126                ar71xx_set_pll(AR71XX_PLL_REG_SEC_CONFIG, 
     127                               AR7242_PLL_REG_ETH0_INT_CLOCK, 0x62000000, 
     128                               AR71XX_ETH0_PLL_SHIFT); 
     129                break; 
     130        default: 
     131                break; 
     132        } 
     133 
     134        ar71xx_mdio_data.phy_mask = phy_mask; 
     135 
     136        platform_device_register(&ar71xx_mdio_device); 
     137} 
     138 
    131139struct ar71xx_eth_pll_data ar71xx_eth0_pll_data; 
    132140struct ar71xx_eth_pll_data ar71xx_eth1_pll_data; 
     
    189197{ 
    190198        /* TODO */ 
     199} 
     200 
     201static void ar7242_set_pll_ge0(int speed) 
     202{ 
     203        u32 val = ar71xx_get_eth_pll(0, speed); 
     204 
     205        ar71xx_set_pll(AR71XX_PLL_REG_SEC_CONFIG, AR7242_PLL_REG_ETH0_INT_CLOCK, 
     206                       val, AR71XX_ETH0_PLL_SHIFT); 
    191207} 
    192208 
     
    311327#define AR724X_PLL_VAL_10       0x00991099 
    312328 
     329#define AR7242_PLL_VAL_1000     0x1c000000 
     330#define AR7242_PLL_VAL_100      0x00000101 
     331#define AR7242_PLL_VAL_10       0x00001616 
     332 
    313333#define AR91XX_PLL_VAL_1000     0x1a000000 
    314334#define AR91XX_PLL_VAL_100      0x13000a44 
     
    342362        case AR71XX_SOC_AR7240: 
    343363        case AR71XX_SOC_AR7241: 
    344         case AR71XX_SOC_AR7242: 
    345364                pll_10 = AR724X_PLL_VAL_10; 
    346365                pll_100 = AR724X_PLL_VAL_100; 
    347366                pll_1000 = AR724X_PLL_VAL_1000; 
     367                break; 
     368 
     369        case AR71XX_SOC_AR7242: 
     370                pll_10 = AR7242_PLL_VAL_10; 
     371                pll_100 = AR7242_PLL_VAL_100; 
     372                pll_1000 = AR7242_PLL_VAL_1000; 
    348373                break; 
    349374 
     
    437462                break; 
    438463 
     464        case AR71XX_SOC_AR7242: 
     465                ar71xx_eth0_data.reset_bit |= AR724X_RESET_GE0_MDIO | 
     466                                              RESET_MODULE_GE0_PHY; 
     467                ar71xx_eth1_data.reset_bit |= AR724X_RESET_GE1_MDIO | 
     468                                              RESET_MODULE_GE1_PHY; 
     469                pdata->ddr_flush = id ? ar724x_ddr_flush_ge1 
     470                                      : ar724x_ddr_flush_ge0; 
     471                pdata->set_pll =  id ? ar724x_set_pll_ge1 
     472                                     : ar7242_set_pll_ge0; 
     473                pdata->has_gbit = 1; 
     474                pdata->is_ar724x = 1; 
     475 
     476                if (!pdata->fifo_cfg1) 
     477                        pdata->fifo_cfg1 = 0x0010ffff; 
     478                if (!pdata->fifo_cfg2) 
     479                        pdata->fifo_cfg2 = 0x015500aa; 
     480                if (!pdata->fifo_cfg3) 
     481                        pdata->fifo_cfg3 = 0x01f00140; 
     482                break; 
     483 
    439484        case AR71XX_SOC_AR7241: 
    440         case AR71XX_SOC_AR7242: 
    441485                ar71xx_eth0_data.reset_bit |= AR724X_RESET_GE0_MDIO; 
    442486                ar71xx_eth1_data.reset_bit |= AR724X_RESET_GE1_MDIO; 
     
    450494                                     : ar724x_set_pll_ge0; 
    451495                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; 
    452503                break; 
    453504 
  • branches/backfire/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r20528 r27949  
    153153#define AR724X_DDR_DIV_MASK             0x3 
    154154 
     155#define AR7242_PLL_REG_ETH0_INT_CLOCK   0x2c 
     156 
    155157#define AR91XX_PLL_REG_CPU_CONFIG       0x00 
    156158#define AR91XX_PLL_REG_ETH_CONFIG       0x04 
     
    433435#define AR724X_RESET_PCIE_PHY           BIT(7) 
    434436#define AR724X_RESET_PCIE               BIT(6) 
     437#define AR724X_RESET_USB_HOST           BIT(5) 
     438#define AR724X_RESET_USB_PHY            BIT(4) 
     439#define AR724X_RESET_USBSUS_OVERRIDE    BIT(3) 
    435440 
    436441#define REV_ID_MAJOR_MASK       0xfff0 
Note: See TracChangeset for help on using the changeset viewer.