Changeset 18819


Ignore:
Timestamp:
2009-12-18T13:57:05+01:00 (8 years ago)
Author:
juhosg
Message:

ar71xx: move AP94 specific PCI init code into a separate file

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

Legend:

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

    r18818 r18819  
    44CONFIG_AG71XX_AR8216_SUPPORT=y 
    55# CONFIG_AG71XX_DEBUG is not set 
     6CONFIG_AR71XX_DEV_AP94_PCI=y 
    67CONFIG_AR71XX_DEV_M25P80=y 
    78CONFIG_AR71XX_MACH_AP81=y 
  • trunk/target/linux/ar71xx/config-2.6.31

    r18818 r18819  
    66# CONFIG_ALCHEMY_GPIO_INDIRECT is not set 
    77# CONFIG_AR7 is not set 
     8CONFIG_AR71XX_DEV_AP94_PCI=y 
    89CONFIG_AR71XX_DEV_M25P80=y 
    910CONFIG_AR71XX_MACH_AP81=y 
  • trunk/target/linux/ar71xx/config-2.6.32

    r18818 r18819  
    66# CONFIG_ALCHEMY_GPIO_INDIRECT is not set 
    77# CONFIG_AR7 is not set 
     8CONFIG_AR71XX_DEV_AP94_PCI=y 
    89CONFIG_AR71XX_DEV_M25P80=y 
    910CONFIG_AR71XX_MACH_AP81=y 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig

    r18818 r18819  
    2020        bool "D-Link DIR-825 rev. B1 board support" 
    2121        select AR71XX_DEV_M25P80 
     22        select AR71XX_DEV_AP94_PCI if PCI 
    2223        default y 
    2324 
     
    6364        bool "NETGEAR WNDR3700 board support" 
    6465        select AR71XX_DEV_M25P80 
     66        select AR71XX_DEV_AP94_PCI if PCI 
    6567        default y 
    6668 
     
    110112        def_bool n 
    111113 
     114config AR71XX_DEV_AP94_PCI 
     115        def_bool n 
     116 
    112117endif 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile

    r18818 r18819  
    1414obj-$(CONFIG_PCI)                       += pci.o 
    1515 
     16obj-$(CONFIG_AR71XX_DEV_AP94_PCI)       += dev-ap94-pci.o 
    1617obj-$(CONFIG_AR71XX_DEV_M25P80)         += dev-m25p80.o 
    1718 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-dir-825-b1.c

    r18817 r18819  
    1515#include <linux/mtd/partitions.h> 
    1616#include <linux/input.h> 
    17 #include <linux/pci.h> 
    18 #include <linux/ath9k_platform.h> 
    1917#include <linux/delay.h> 
    2018#include <linux/rtl8366_smi.h> 
     
    2220#include <asm/mips_machine.h> 
    2321#include <asm/mach-ar71xx/ar71xx.h> 
    24 #include <asm/mach-ar71xx/pci.h> 
    2522 
    2623#include "devices.h" 
    2724#include "dev-m25p80.h" 
     25#include "dev-ap94-pci.h" 
    2826 
    2927#define DIR825B1_GPIO_LED_BLUE_USB              0 
     
    4745#define DIR825B1_MAC_LOCATION_0                 0x2ffa81b8 
    4846#define DIR825B1_MAC_LOCATION_1                 0x2ffa8370 
    49  
    50 static struct ath9k_platform_data dir825b1_wmac0_data; 
    51 static struct ath9k_platform_data dir825b1_wmac1_data; 
    52 static char dir825b1_wmac0_mac[6]; 
    53 static char dir825b1_wmac1_mac[6]; 
    5447 
    5548#ifdef CONFIG_MTD_PARTITIONS 
     
    144137}; 
    145138 
    146 #ifdef CONFIG_PCI 
    147 static struct ar71xx_pci_irq dir825b1_pci_irqs[] __initdata = { 
    148         { 
    149                 .slot   = 0, 
    150                 .pin    = 1, 
    151                 .irq    = AR71XX_PCI_IRQ_DEV0, 
    152         }, { 
    153                 .slot   = 1, 
    154                 .pin    = 1, 
    155                 .irq    = AR71XX_PCI_IRQ_DEV1, 
    156         } 
    157 }; 
    158  
    159 static int dir825b1_pci_plat_dev_init(struct pci_dev *dev) 
    160 { 
    161         switch(PCI_SLOT(dev->devfn)) { 
    162         case 17: 
    163                 dev->dev.platform_data = &dir825b1_wmac0_data; 
    164                 break; 
    165  
    166         case 18: 
    167                 dev->dev.platform_data = &dir825b1_wmac1_data; 
    168                 break; 
    169         } 
    170  
    171         return 0; 
    172 } 
    173  
    174 static void dir825b1_pci_fixup(struct pci_dev *dev) 
    175 { 
    176         void __iomem *mem; 
    177         u16 *cal_data; 
    178         u16 cmd; 
    179         u32 bar0; 
    180         u32 val; 
    181  
    182         if (ar71xx_mach != AR71XX_MACH_DIR_825_B1) 
    183                 return; 
    184  
    185         dir825b1_pci_plat_dev_init(dev); 
    186         cal_data = dev->dev.platform_data; 
    187  
    188         if (*cal_data != 0xa55a) { 
    189                 printk(KERN_ERR "PCI: no calibration data found for %s\n", 
    190                        pci_name(dev)); 
    191                 return; 
    192         } 
    193  
    194         mem = ioremap(AR71XX_PCI_MEM_BASE, 0x10000); 
    195         if (!mem) { 
    196                 printk(KERN_ERR "PCI: ioremap error for device %s\n", 
    197                        pci_name(dev)); 
    198                 return; 
    199         } 
    200  
    201         printk(KERN_INFO "PCI: fixup device %s\n", pci_name(dev)); 
    202  
    203         pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); 
    204  
    205         /* Setup the PCI device to allow access to the internal registers */ 
    206         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, AR71XX_PCI_MEM_BASE); 
    207         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    208         cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    209         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    210  
    211         /* set pointer to first reg address */ 
    212         cal_data += 3; 
    213         while (*cal_data != 0xffff) { 
    214                 u32 reg; 
    215                 reg = *cal_data++; 
    216                 val = *cal_data++; 
    217                 val |= (*cal_data++) << 16; 
    218  
    219                 __raw_writel(val, mem + reg); 
    220                 udelay(100); 
    221         } 
    222  
    223         pci_read_config_dword(dev, PCI_VENDOR_ID, &val); 
    224         dev->vendor = val & 0xffff; 
    225         dev->device = (val >> 16) & 0xffff; 
    226  
    227         pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); 
    228         dev->revision = val & 0xff; 
    229         dev->class = val >> 8; /* upper 3 bytes */ 
    230  
    231         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    232         cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); 
    233         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    234  
    235         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); 
    236  
    237         iounmap(mem); 
    238 } 
    239 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, 
    240                         dir825b1_pci_fixup); 
    241  
    242 static void __init dir825b1_pci_init(void) 
    243 { 
    244         memcpy(dir825b1_wmac0_data.eeprom_data, 
    245                (u8 *) KSEG1ADDR(DIR825B1_CAL_LOCATION_0), 
    246                sizeof(dir825b1_wmac0_data.eeprom_data)); 
    247  
    248         memcpy(dir825b1_wmac1_data.eeprom_data, 
    249                (u8 *) KSEG1ADDR(DIR825B1_CAL_LOCATION_1), 
    250                sizeof(dir825b1_wmac1_data.eeprom_data)); 
    251  
    252         memcpy(dir825b1_wmac0_mac, (u8 *)KSEG1ADDR(DIR825B1_MAC_LOCATION_0), 6); 
    253         dir825b1_wmac0_data.macaddr = dir825b1_wmac0_mac; 
    254         memcpy(dir825b1_wmac1_mac, (u8 *)KSEG1ADDR(DIR825B1_MAC_LOCATION_1), 6); 
    255         dir825b1_wmac1_data.macaddr = dir825b1_wmac1_mac; 
    256  
    257         ar71xx_pci_plat_dev_init = dir825b1_pci_plat_dev_init; 
    258         ar71xx_pci_init(ARRAY_SIZE(dir825b1_pci_irqs), dir825b1_pci_irqs); 
    259 } 
    260 #else 
    261 static void __init dir825b1_pci_init(void) { } 
    262 #endif /* CONFIG_PCI */ 
    263  
    264139static void __init dir825b1_setup(void) 
    265140{ 
     
    300175 
    301176        platform_device_register(&dir825b1_rtl8366_smi_device); 
    302         dir825b1_pci_init(); 
     177 
     178        ap94_pci_init((u8 *) KSEG1ADDR(DIR825B1_CAL_LOCATION_0), 
     179                      (u8 *) KSEG1ADDR(DIR825B1_MAC_LOCATION_0), 
     180                      (u8 *) KSEG1ADDR(DIR825B1_CAL_LOCATION_1), 
     181                      (u8 *) KSEG1ADDR(DIR825B1_MAC_LOCATION_1)); 
    303182} 
    304183 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c

    r18817 r18819  
    1414#include <linux/mtd/partitions.h> 
    1515#include <linux/input.h> 
    16 #include <linux/pci.h> 
    17 #include <linux/ath9k_platform.h> 
    1816#include <linux/delay.h> 
    1917#include <linux/rtl8366_smi.h> 
     
    2119#include <asm/mips_machine.h> 
    2220#include <asm/mach-ar71xx/ar71xx.h> 
    23 #include <asm/mach-ar71xx/pci.h> 
    2421 
    2522#include "devices.h" 
    2623#include "dev-m25p80.h" 
     24#include "dev-ap94-pci.h" 
    2725 
    2826#define WNDR3700_GPIO_LED_WPS_ORANGE    0 
     
    3937 
    4038#define WNDR3700_BUTTONS_POLL_INTERVAL    20 
     39 
     40#define WNDR3700_WMAC0_MAC_OFFSET       0 
     41#define WNDR3700_WMAC1_MAC_OFFSET       0xc 
     42#define WNDR3700_CALDATA0_OFFSET        0x1000 
     43#define WNDR3700_CALDATA1_OFFSET        0x5000 
    4144 
    4245#ifdef CONFIG_MTD_PARTITIONS 
     
    97100}; 
    98101 
    99 #ifdef CONFIG_PCI 
    100 static struct ar71xx_pci_irq wndr3700_pci_irqs[] __initdata = { 
    101         { 
    102                 .slot   = 0, 
    103                 .pin    = 1, 
    104                 .irq    = AR71XX_PCI_IRQ_DEV0, 
    105         }, { 
    106                 .slot   = 1, 
    107                 .pin    = 1, 
    108                 .irq    = AR71XX_PCI_IRQ_DEV1, 
    109         } 
    110 }; 
    111  
    112 static struct ath9k_platform_data wndr3700_wmac0_data; 
    113 static u8 wndr3700_wmac0_macaddr[6]; 
    114 static struct ath9k_platform_data wndr3700_wmac1_data; 
    115 static u8 wndr3700_wmac1_macaddr[6]; 
    116  
    117 static void wndr3700_pci_fixup(struct pci_dev *dev) 
    118 { 
    119         void __iomem *mem; 
    120         u16 *cal_data; 
    121         u16 cmd; 
    122         u32 bar0; 
    123         u32 val; 
    124  
    125         if (ar71xx_mach != AR71XX_MACH_WNDR3700) 
    126                 return; 
    127  
    128         switch (PCI_SLOT(dev->devfn)) { 
    129         case 17: 
    130                 cal_data = wndr3700_wmac0_data.eeprom_data; 
    131                 break; 
    132         case 18: 
    133                 cal_data = wndr3700_wmac1_data.eeprom_data; 
    134                 break; 
    135         default: 
    136                 return; 
    137         } 
    138  
    139         if (*cal_data != 0xa55a) { 
    140                 printk(KERN_ERR "PCI: no calibration data found for %s\n", 
    141                        pci_name(dev)); 
    142                 return; 
    143         } 
    144  
    145         mem = ioremap(AR71XX_PCI_MEM_BASE, 0x10000); 
    146         if (!mem) { 
    147                 printk(KERN_ERR "PCI: ioremap error for device %s\n", 
    148                        pci_name(dev)); 
    149                 return; 
    150         } 
    151  
    152         printk(KERN_INFO "PCI: fixup device %s\n", pci_name(dev)); 
    153  
    154         pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); 
    155  
    156         /* Setup the PCI device to allow access to the internal registers */ 
    157         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, AR71XX_PCI_MEM_BASE); 
    158         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    159         cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    160         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    161  
    162         /* set pointer to first reg address */ 
    163         cal_data += 3; 
    164         while (*cal_data != 0xffff) { 
    165                 u32 reg; 
    166                 reg = *cal_data++; 
    167                 val = *cal_data++; 
    168                 val |= (*cal_data++) << 16; 
    169  
    170                 __raw_writel(val, mem + reg); 
    171                 udelay(100); 
    172         } 
    173  
    174         pci_read_config_dword(dev, PCI_VENDOR_ID, &val); 
    175         dev->vendor = val & 0xffff; 
    176         dev->device = (val >> 16) & 0xffff; 
    177  
    178         pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); 
    179         dev->revision = val & 0xff; 
    180         dev->class = val >> 8; /* upper 3 bytes */ 
    181  
    182         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    183         cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); 
    184         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    185  
    186         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); 
    187  
    188         iounmap(mem); 
    189 } 
    190 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, 
    191                         wndr3700_pci_fixup); 
    192  
    193 static int wndr3700_pci_plat_dev_init(struct pci_dev *dev) 
    194 { 
    195         switch (PCI_SLOT(dev->devfn)) { 
    196         case 17: 
    197                 dev->dev.platform_data = &wndr3700_wmac0_data; 
    198                 break; 
    199         case 18: 
    200                 dev->dev.platform_data = &wndr3700_wmac1_data; 
    201                 break; 
    202         } 
    203  
    204         return 0; 
    205 } 
    206  
    207 static void __init wndr3700_pci_init(void) 
    208 { 
    209         u8 *ee = (u8 *) KSEG1ADDR(0x1fff0000); 
    210  
    211         memcpy(wndr3700_wmac0_data.eeprom_data, ee + 0x1000, 
    212                sizeof(wndr3700_wmac0_data.eeprom_data)); 
    213         memcpy(wndr3700_wmac0_macaddr, ee, sizeof(wndr3700_wmac0_macaddr)); 
    214         wndr3700_wmac0_data.macaddr = wndr3700_wmac0_macaddr; 
    215  
    216         memcpy(wndr3700_wmac1_data.eeprom_data, ee + 0x5000, 
    217                sizeof(wndr3700_wmac1_data.eeprom_data)); 
    218         memcpy(wndr3700_wmac1_macaddr, ee + 12, sizeof(wndr3700_wmac1_macaddr)); 
    219         wndr3700_wmac1_data.macaddr = wndr3700_wmac1_macaddr; 
    220  
    221         ar71xx_pci_plat_dev_init = wndr3700_pci_plat_dev_init; 
    222         ar71xx_pci_init(ARRAY_SIZE(wndr3700_pci_irqs), wndr3700_pci_irqs); 
    223 } 
    224 #else 
    225 static inline void wndr3700_pci_init(void) { }; 
    226 #endif /* CONFIG_PCI */ 
    227  
    228102static struct gpio_led wndr3700_leds_gpio[] __initdata = { 
    229103        { 
     
    283157static void __init wndr3700_setup(void) 
    284158{ 
    285         u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000); 
     159        u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); 
    286160 
    287         ar71xx_set_mac_base(mac); 
     161        ar71xx_set_mac_base(art); 
    288162 
    289163        ar71xx_eth0_pll_data.pll_1000 = 0x11110000; 
     
    315189        platform_device_register(&wndr3700_rtl8366_smi_device); 
    316190        platform_device_register_simple("wndr3700-led-usb", -1, NULL, 0); 
    317         wndr3700_pci_init(); 
     191 
     192        ap94_pci_init(art + WNDR3700_CALDATA0_OFFSET, 
     193                      art + WNDR3700_WMAC0_MAC_OFFSET, 
     194                      art + WNDR3700_CALDATA1_OFFSET, 
     195                      art + WNDR3700_WMAC1_MAC_OFFSET); 
    318196} 
    319197 
Note: See TracChangeset for help on using the changeset viewer.