Changeset 18860


Ignore:
Timestamp:
2009-12-20T14:46:23+01:00 (8 years ago)
Author:
juhosg
Message:

ar71xx: update AR7240 PCI code

Location:
trunk/target/linux/ar71xx
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/config-2.6.30

    r18820 r18860  
    44CONFIG_AG71XX_AR8216_SUPPORT=y 
    55# CONFIG_AG71XX_DEBUG is not set 
     6CONFIG_AR71XX_DEV_AP91_PCI=y 
    67CONFIG_AR71XX_DEV_AP94_PCI=y 
    78CONFIG_AR71XX_DEV_AR913X_WMAC=y 
  • trunk/target/linux/ar71xx/config-2.6.31

    r18820 r18860  
    66# CONFIG_ALCHEMY_GPIO_INDIRECT is not set 
    77# CONFIG_AR7 is not set 
     8CONFIG_AR71XX_DEV_AP91_PCI=y 
    89CONFIG_AR71XX_DEV_AP94_PCI=y 
    910CONFIG_AR71XX_DEV_AR913X_WMAC=y 
  • trunk/target/linux/ar71xx/config-2.6.32

    r18820 r18860  
    66# CONFIG_ALCHEMY_GPIO_INDIRECT is not set 
    77# CONFIG_AR7 is not set 
     8CONFIG_AR71XX_DEV_AP91_PCI=y 
    89CONFIG_AR71XX_DEV_AP94_PCI=y 
    910CONFIG_AR71XX_DEV_AR913X_WMAC=y 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig

    r18820 r18860  
    9292        bool "TP-LINK TL-WR741ND support" 
    9393        select AR71XX_DEV_M25P80 
     94        select AR71XX_DEV_AP91_PCI if PCI 
    9495        default y 
    9596 
     
    115116        bool "Ubiquiti AR71xx based boards support" 
    116117        select AR71XX_DEV_M25P80 
     118        select AR71XX_DEV_AP91_PCI if PCI 
    117119        default y 
    118120 
     
    120122 
    121123config AR71XX_DEV_M25P80 
     124        def_bool n 
     125 
     126config AR71XX_DEV_AP91_PCI 
    122127        def_bool n 
    123128 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile

    r18820 r18860  
    1414obj-$(CONFIG_PCI)                       += pci.o 
    1515 
     16obj-$(CONFIG_AR71XX_DEV_AP91_PCI)       += dev-ap91-pci.o 
    1617obj-$(CONFIG_AR71XX_DEV_AP94_PCI)       += dev-ap94-pci.o 
    1718obj-$(CONFIG_AR71XX_DEV_AR913X_WMAC)    += dev-ar913x-wmac.o 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c

    r18817 r18860  
    99 */ 
    1010 
    11 #include <linux/pci.h> 
    1211#include <linux/platform_device.h> 
    1312#include <linux/mtd/mtd.h> 
    1413#include <linux/mtd/partitions.h> 
    1514#include <linux/input.h> 
    16 #include <linux/ath9k_platform.h> 
    1715 
    1816#include <asm/mips_machine.h> 
    1917 
    2018#include <asm/mach-ar71xx/ar71xx.h> 
    21 #include <asm/mach-ar71xx/pci.h> 
    2219 
    2320#include "devices.h" 
    2421#include "dev-m25p80.h" 
     22#include "dev-ap91-pci.h" 
    2523 
    2624#define TL_WR741ND_GPIO_LED_QSS         0 
     
    9795}; 
    9896 
    99 #ifdef CONFIG_PCI 
    100 static struct ar71xx_pci_irq tl_wr741nd_pci_irqs[] __initdata = { 
    101         { 
    102                 .slot   = 0, 
    103                 .pin    = 1, 
    104                 .irq    = AR71XX_PCI_IRQ_DEV0, 
    105         } 
    106 }; 
    107  
    108 static struct ath9k_platform_data tl_wr741nd_wmac_data; 
    109  
    110 static int tl_wr741nd_pci_plat_dev_init(struct pci_dev *dev) 
    111 { 
    112         dev->dev.platform_data = &tl_wr741nd_wmac_data; 
    113         return 0; 
    114 } 
    115  
    116 static void tl_wr741nd_pci_init(void) 
    117 { 
    118         u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); 
    119  
    120         memcpy(tl_wr741nd_wmac_data.eeprom_data, ee, 
    121                sizeof(tl_wr741nd_wmac_data.eeprom_data)); 
    122  
    123         ar71xx_pci_plat_dev_init = tl_wr741nd_pci_plat_dev_init; 
    124  
    125         ar71xx_pci_init(ARRAY_SIZE(tl_wr741nd_pci_irqs), tl_wr741nd_pci_irqs); 
    126 } 
    127 #else 
    128 static inline void tl_wr741nd_pci_init(void) { }; 
    129 #endif /* CONFIG_PCI */ 
    130  
    13197static void __init tl_wr741nd_setup(void) 
    13298{ 
    13399        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); 
     100        u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); 
    134101 
    135102        ar71xx_set_mac_base(mac); 
     
    166133                                        tl_wr741nd_gpio_buttons); 
    167134 
    168         tl_wr741nd_pci_init(); 
     135        ap91_pci_init(ee, NULL); 
    169136} 
    170137MIPS_MACHINE(AR71XX_MACH_TL_WR741ND, "TP-LINK TL-WR741ND", tl_wr741nd_setup); 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c

    r18817 r18860  
    1414#include <linux/platform_device.h> 
    1515#include <linux/input.h> 
    16 #include <linux/ath9k_platform.h> 
    1716 
    1817#include <asm/mips_machine.h> 
     
    2221#include "devices.h" 
    2322#include "dev-m25p80.h" 
     23#include "dev-ap91-pci.h" 
    2424 
    2525#define UBNT_RS_GPIO_LED_RF     2 
     
    236236MIPS_MACHINE(AR71XX_MACH_UBNT_LSSR71, "Ubiquiti LS-SR71", ubnt_lssr71_setup); 
    237237 
    238 #ifdef CONFIG_PCI 
    239 static struct ar71xx_pci_irq ubnt_m_pci_irqs[] __initdata = { 
    240         { 
    241                 .slot   = 0, 
    242                 .pin    = 1, 
    243                 .irq    = AR71XX_PCI_IRQ_DEV0, 
    244         } 
    245 }; 
    246  
    247 static struct ath9k_platform_data ubnt_m_wmac_data; 
    248  
    249 static int ubmnt_m_pci_plat_dev_init(struct pci_dev *dev) 
    250 { 
    251         dev->dev.platform_data = &ubnt_m_wmac_data; 
    252         return 0; 
    253 } 
    254  
    255 static void __init ubnt_m_pci_init(void) 
    256 { 
     238static void __init ubnt_m_setup(void) 
     239{ 
     240        u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000); 
    257241        u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); 
    258  
    259         memcpy(ubnt_m_wmac_data.eeprom_data, ee, 
    260                sizeof(ubnt_m_wmac_data.eeprom_data)); 
    261  
    262         ar71xx_pci_plat_dev_init = ubmnt_m_pci_plat_dev_init; 
    263  
    264         ar71xx_pci_init(ARRAY_SIZE(ubnt_m_pci_irqs), 
    265                         ubnt_m_pci_irqs); 
    266 } 
    267 #else 
    268 static inline void ubnt_m_pci_init(void) { }; 
    269 #endif /* CONFIG_PCI */ 
    270  
    271 static void __init ubnt_m_setup(void) 
    272 { 
    273         u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000); 
    274242 
    275243        ar71xx_set_mac_base(mac); 
     
    289257        ar71xx_add_device_eth(0); 
    290258 
    291         ubnt_m_pci_init(); 
     259        ap91_pci_init(ee, NULL); 
    292260 
    293261        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_m_leds_gpio), 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r18818 r18860  
    179179 
    180180#define AR724X_PLL_REG_CPU_CONFIG       0x00 
     181#define AR724X_PLL_REG_PCIE_CONFIG      0x18 
    181182 
    182183#define AR724X_PLL_DIV_SHIFT            0 
     
    385386#define AR724X_PCI_CFG_SIZE     0x1000 
    386387 
     388#define AR724X_PCI_REG_APP              0x00 
     389#define AR724X_PCI_REG_RESET            0x18 
    387390#define AR724X_PCI_REG_INT_STATUS       0x4c 
    388391#define AR724X_PCI_REG_INT_MASK         0x50 
    389392 
     393#define AR724X_PCI_APP_LTSSM_ENABLE     BIT(0) 
     394 
    390395#define AR724X_PCI_INT_DEV0             BIT(14) 
    391396 
     
    396401        base = ioremap_nocache(AR724X_PCI_CTRL_BASE, AR724X_PCI_CTRL_SIZE); 
    397402        __raw_writel(val, base + reg); 
     403        iounmap(base); 
     404} 
     405 
     406static inline void ar724x_pci_wr_nf(unsigned reg, u32 val) 
     407{ 
     408        void __iomem *base; 
     409 
     410        base = ioremap_nocache(AR724X_PCI_CTRL_BASE, AR724X_PCI_CTRL_SIZE); 
    398411        iounmap(base); 
    399412} 
     
    478491#define RESET_MODULE_PCI_CORE           BIT(0) 
    479492 
     493#define AR724X_RESET_PCIE_PHY_SERIAL    BIT(10) 
     494#define AR724X_RESET_PCIE_PHY           BIT(7) 
     495#define AR724X_RESET_PCIE               BIT(6) 
     496 
    480497#define REV_ID_MAJOR_MASK       0xf0 
    481498#define REV_ID_MAJOR_AR71XX     0xa0 
  • trunk/target/linux/ar71xx/files/arch/mips/pci/pci-ar724x.c

    r17808 r18860  
    132132static void ar724x_pci_fixup(struct pci_dev *dev) 
    133133{ 
    134         u32 t; 
     134        u16 cmd; 
    135135 
    136136        if (!ar724x_pci_fixup_enable) 
     
    140140                return; 
    141141 
    142         DBG("PCI: fixup host controller %s (%04x:%04x)\n", pci_name(dev), 
    143                 dev->vendor, dev->device); 
    144  
    145142        /* setup COMMAND register */ 
    146         t = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE 
    147           | PCI_COMMAND_PARITY | PCI_COMMAND_SERR | PCI_COMMAND_FAST_BACK; 
    148  
    149         pci_write_config_word(dev, PCI_COMMAND, t); 
     143        pci_read_config_word(dev, PCI_COMMAND, &cmd); 
     144        cmd |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | 
     145               PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR | 
     146               PCI_COMMAND_FAST_BACK; 
     147 
     148        pci_write_config_word(dev, PCI_COMMAND, cmd); 
    150149} 
    151150DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, ar724x_pci_fixup); 
     
    202201}; 
    203202 
     203static void __init ar724x_pci_reset(void) 
     204{ 
     205        ar71xx_device_stop(AR724X_RESET_PCIE); 
     206        ar71xx_device_stop(AR724X_RESET_PCIE_PHY); 
     207        ar71xx_device_stop(AR724X_RESET_PCIE_PHY_SERIAL); 
     208        udelay(100); 
     209 
     210        ar71xx_device_start(AR724X_RESET_PCIE_PHY_SERIAL); 
     211        udelay(100); 
     212        ar71xx_device_start(AR724X_RESET_PCIE_PHY); 
     213        ar71xx_device_start(AR724X_RESET_PCIE); 
     214} 
     215 
     216static int __init ar724x_pci_setup(void) 
     217{ 
     218        u32 t; 
     219 
     220        /* setup COMMAND register */ 
     221        t = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE | 
     222            PCI_COMMAND_PARITY|PCI_COMMAND_SERR|PCI_COMMAND_FAST_BACK; 
     223 
     224        ar724x_pci_write(ar724x_pci_localcfg_base, PCI_COMMAND, 4, t); 
     225        ar724x_pci_write(ar724x_pci_localcfg_base, 0x20, 4, 0x1ff01000); 
     226        ar724x_pci_write(ar724x_pci_localcfg_base, 0x24, 4, 0x1ff01000); 
     227 
     228        t = ar724x_pci_rr(AR724X_PCI_REG_RESET); 
     229        if (t != 0x7) { 
     230                udelay(100000); 
     231                ar724x_pci_wr_nf(AR724X_PCI_REG_RESET, 0); 
     232                udelay(100); 
     233                ar724x_pci_wr_nf(AR724X_PCI_REG_RESET, 4); 
     234                udelay(100000); 
     235        } 
     236 
     237        ar724x_pci_wr(AR724X_PCI_REG_APP, AR724X_PCI_APP_LTSSM_ENABLE); 
     238        udelay(1000); 
     239 
     240        t = ar724x_pci_rr(AR724X_PCI_REG_APP); 
     241        if ((t & AR724X_PCI_APP_LTSSM_ENABLE) == 0x0) { 
     242                printk(KERN_WARNING "PCI: no PCIe module found\n"); 
     243                return -ENODEV; 
     244        } 
     245 
     246        return 0; 
     247} 
     248 
    204249int __init ar724x_pcibios_init(void) 
    205250{ 
    206         u32 t; 
     251        int ret; 
    207252 
    208253        ar724x_pci_localcfg_base = ioremap_nocache(AR724X_PCI_CRP_BASE, 
     
    212257                                                 AR724X_PCI_CFG_SIZE); 
    213258 
    214         /* setup COMMAND register */ 
    215         t = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE | 
    216             PCI_COMMAND_PARITY | PCI_COMMAND_SERR | PCI_COMMAND_FAST_BACK; 
    217  
    218         ar724x_pci_write(ar724x_pci_localcfg_base, PCI_COMMAND, 4, t); 
     259        ar724x_pci_reset(); 
     260        ret = ar724x_pci_setup(); 
     261        if (ret) 
     262                return ret; 
    219263 
    220264        ar724x_pci_fixup_enable = 1; 
Note: See TracChangeset for help on using the changeset viewer.