Changeset 23131


Ignore:
Timestamp:
2010-09-27T16:53:46+02:00 (6 years ago)
Author:
juhosg
Message:

ar71xx: move ath9k specific PCI fixup into a separate file

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

Legend:

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

    r23125 r23131  
    4949CONFIG_AR71XX_MACH_ZCN_1523H=y 
    5050CONFIG_AR71XX_NVRAM=y 
     51CONFIG_AR71XX_PCI_ATH9K_FIXUP=y 
    5152CONFIG_AR71XX_WDT=y 
    5253CONFIG_AR8216_PHY=y 
  • trunk/target/linux/ar71xx/config-2.6.33

    r23125 r23131  
    4848CONFIG_AR71XX_MACH_WZR_HP_G300NH=y 
    4949CONFIG_AR71XX_MACH_ZCN_1523H=y 
     50CONFIG_AR71XX_PCI_ATH9K_FIXUP=y 
    5051CONFIG_AR71XX_NVRAM=y 
    5152CONFIG_AR71XX_WDT=y 
  • trunk/target/linux/ar71xx/config-2.6.34

    r23125 r23131  
    4949CONFIG_AR71XX_MACH_ZCN_1523H=y 
    5050CONFIG_AR71XX_NVRAM=y 
     51CONFIG_AR71XX_PCI_ATH9K_FIXUP=y 
    5152CONFIG_AR71XX_WDT=y 
    5253CONFIG_AR8216_PHY=y 
  • trunk/target/linux/ar71xx/config-2.6.35

    r23125 r23131  
    4949CONFIG_AR71XX_MACH_ZCN_1523H=y 
    5050CONFIG_AR71XX_NVRAM=y 
     51CONFIG_AR71XX_PCI_ATH9K_FIXUP=y 
    5152CONFIG_AR71XX_WDT=y 
    5253CONFIG_AR8216_PHY=y 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig

    r23125 r23131  
    262262 
    263263config AR71XX_DEV_AP91_PCI 
     264        select AR71XX_PCI_ATH9K_FIXUP 
    264265        def_bool n 
    265266 
     
    269270 
    270271config AR71XX_DEV_AP94_PCI 
     272        select AR71XX_PCI_ATH9K_FIXUP 
    271273        def_bool n 
    272274 
     
    295297        def_bool n 
    296298 
     299config AR71XX_PCI_ATH9K_FIXUP 
     300        def_bool n 
     301 
    297302endif 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile

    r23125 r23131  
    2727 
    2828obj-$(CONFIG_AR71XX_NVRAM)              += nvram.o 
     29obj-$(CONFIG_AR71XX_PCI_ATH9K_FIXUP)    += pci-ath9k-fixup.o 
    2930 
    3031obj-$(CONFIG_AR71XX_MACH_AP81)          += mach-ap81.o 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c

    r23130 r23131  
    1717 
    1818#include "dev-ap91-pci.h" 
     19#include "pci-ath9k-fixup.h" 
    1920 
    2021static struct ath9k_platform_data ap91_wmac_data; 
    2122static char ap91_wmac_mac[6]; 
    22 static int ap91_pci_fixup_enabled; 
    2323 
    2424static struct ar71xx_pci_irq ap91_pci_irqs[] __initdata = { 
     
    4141} 
    4242 
    43 static void ap91_pci_fixup(struct pci_dev *dev) 
    44 { 
    45         void __iomem *mem; 
    46         u16 *cal_data; 
    47         u16 cmd; 
    48         u32 val; 
    49  
    50         if (!ap91_pci_fixup_enabled) 
    51                 return; 
    52  
    53         printk(KERN_INFO "PCI: fixup device %s\n", pci_name(dev)); 
    54  
    55         cal_data = ap91_wmac_data.eeprom_data; 
    56         if (*cal_data != 0xa55a) { 
    57                 printk(KERN_ERR "PCI: no calibration data found for %s\n", 
    58                        pci_name(dev)); 
    59                 return; 
    60         } 
    61  
    62         mem = ioremap(AR71XX_PCI_MEM_BASE, 0x10000); 
    63         if (!mem) { 
    64                 printk(KERN_ERR "PCI: ioremap error for device %s\n", 
    65                        pci_name(dev)); 
    66                 return; 
    67         } 
    68  
    69         /* Setup the PCI device to allow access to the internal registers */ 
    70         switch (ar71xx_soc) { 
    71         case AR71XX_SOC_AR7240: 
    72                 pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0xffff); 
    73                 break; 
    74  
    75         case AR71XX_SOC_AR7241: 
    76         case AR71XX_SOC_AR7242: 
    77                 pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0x1000ffff); 
    78                 break; 
    79  
    80         default: 
    81                 BUG(); 
    82         } 
    83  
    84         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    85         cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    86         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    87  
    88         /* set pointer to first reg address */ 
    89         cal_data += 3; 
    90         while (*cal_data != 0xffff) { 
    91                 u32 reg; 
    92                 reg = *cal_data++; 
    93                 val = *cal_data++; 
    94                 val |= (*cal_data++) << 16; 
    95  
    96                 __raw_writel(val, mem + reg); 
    97                 udelay(100); 
    98         } 
    99  
    100         pci_read_config_dword(dev, PCI_VENDOR_ID, &val); 
    101         dev->vendor = val & 0xffff; 
    102         dev->device = (val >> 16) & 0xffff; 
    103  
    104         pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); 
    105         dev->revision = val & 0xff; 
    106         dev->class = val >> 8; /* upper 3 bytes */ 
    107  
    108         iounmap(mem); 
    109 } 
    110 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ap91_pci_fixup); 
    111  
    11243void __init ap91_pci_init(u8 *cal_data, u8 *mac_addr) 
    11344{ 
     
    12455        ar71xx_pci_init(ARRAY_SIZE(ap91_pci_irqs), ap91_pci_irqs); 
    12556 
    126         ap91_pci_fixup_enabled = 1; 
     57        pci_enable_ath9k_fixup(0, ap91_wmac_data.eeprom_data); 
    12758} 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c

    r19565 r23131  
    1717 
    1818#include "dev-ap94-pci.h" 
     19#include "pci-ath9k-fixup.h" 
    1920 
    2021static struct ath9k_platform_data ap94_wmac0_data; 
     
    2223static char ap94_wmac0_mac[6]; 
    2324static char ap94_wmac1_mac[6]; 
    24 static int ap94_pci_fixup_enabled; 
    2525 
    2626static struct ar71xx_pci_irq ap94_pci_irqs[] __initdata = { 
     
    5050        return 0; 
    5151} 
    52  
    53 static void ap94_pci_fixup(struct pci_dev *dev) 
    54 { 
    55         void __iomem *mem; 
    56         u16 *cal_data; 
    57         u16 cmd; 
    58         u32 bar0; 
    59         u32 val; 
    60  
    61         if (!ap94_pci_fixup_enabled) 
    62                 return; 
    63  
    64         switch (PCI_SLOT(dev->devfn)) { 
    65         case 17: 
    66                 cal_data = ap94_wmac0_data.eeprom_data; 
    67                 break; 
    68         case 18: 
    69                 cal_data = ap94_wmac1_data.eeprom_data; 
    70                 break; 
    71         default: 
    72                 return; 
    73         } 
    74  
    75         if (*cal_data != 0xa55a) { 
    76                 printk(KERN_ERR "PCI: no calibration data found for %s\n", 
    77                        pci_name(dev)); 
    78                 return; 
    79         } 
    80  
    81         mem = ioremap(AR71XX_PCI_MEM_BASE, 0x10000); 
    82         if (!mem) { 
    83                 printk(KERN_ERR "PCI: ioremap error for device %s\n", 
    84                        pci_name(dev)); 
    85                 return; 
    86         } 
    87  
    88         printk(KERN_INFO "PCI: fixup device %s\n", pci_name(dev)); 
    89  
    90         pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); 
    91  
    92         /* Setup the PCI device to allow access to the internal registers */ 
    93         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, AR71XX_PCI_MEM_BASE); 
    94         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    95         cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    96         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    97  
    98         /* set pointer to first reg address */ 
    99         cal_data += 3; 
    100         while (*cal_data != 0xffff) { 
    101                 u32 reg; 
    102                 reg = *cal_data++; 
    103                 val = *cal_data++; 
    104                 val |= (*cal_data++) << 16; 
    105  
    106                 __raw_writel(val, mem + reg); 
    107                 udelay(100); 
    108         } 
    109  
    110         pci_read_config_dword(dev, PCI_VENDOR_ID, &val); 
    111         dev->vendor = val & 0xffff; 
    112         dev->device = (val >> 16) & 0xffff; 
    113  
    114         pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); 
    115         dev->revision = val & 0xff; 
    116         dev->class = val >> 8; /* upper 3 bytes */ 
    117  
    118         pci_read_config_word(dev, PCI_COMMAND, &cmd); 
    119         cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); 
    120         pci_write_config_word(dev, PCI_COMMAND, cmd); 
    121  
    122         pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); 
    123  
    124         iounmap(mem); 
    125 } 
    126 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ap94_pci_fixup); 
    12752 
    12853void __init ap94_pci_enable_quirk_wndr3700(void) 
     
    15681        ar71xx_pci_init(ARRAY_SIZE(ap94_pci_irqs), ap94_pci_irqs); 
    15782 
    158         ap94_pci_fixup_enabled = 1; 
     83        pci_enable_ath9k_fixup(17, ap94_wmac0_data.eeprom_data); 
     84        pci_enable_ath9k_fixup(18, ap94_wmac1_data.eeprom_data); 
    15985} 
Note: See TracChangeset for help on using the changeset viewer.