Changeset 19013


Ignore:
Timestamp:
2010-01-03T00:08:15+01:00 (8 years ago)
Author:
hauke
Message:

amazon: work on pci controller

Location:
trunk/target/linux/amazon
Files:
1 deleted
5 edited

Legend:

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

    r18989 r19013  
    139139# CONFIG_SIBYTE_SWARM is not set 
    140140# CONFIG_SLOW_WORK is not set 
     141CONFIG_SWAP_IO_SPACE=y 
    141142CONFIG_SYS_HAS_CPU_MIPS32_R1=y 
    142143CONFIG_SYS_HAS_CPU_MIPS32_R2=y 
  • trunk/target/linux/amazon/files/arch/mips/amazon/pci.c

    r18933 r19013  
    3737#define AMAZON_PCI_MEM_SIZE    0x00400000 
    3838#define AMAZON_PCI_IO_BASE     0xb2400000 
    39 #define AMAZON_PCI_IO_SIZE     0x00002000 
     39#define AMAZON_PCI_IO_SIZE     0x00200000 
    4040 
    4141#define AMAZON_PCI_CFG_BUSNUM_SHF 16 
     
    4646#define PCI_ACCESS_WRITE 1 
    4747 
    48 static inline u32 amazon_r32(u32 addr) 
    49 { 
    50         u32 *ptr = (u32 *) addr; 
    51         return __raw_readl(ptr); 
    52 } 
    53  
    54 static inline void amazon_w32(u32 addr, u32 val) 
    55 { 
    56         u32 *ptr = (u32 *) addr; 
    57         __raw_writel(val, ptr); 
    58 } 
    59  
    60  
    6148static struct resource pci_io_resource = { 
    6249        .name = "io pci IO space", 
    63 #if 0 
     50#if 1 
    6451        .start = AMAZON_PCI_IO_BASE, 
    6552        .end = AMAZON_PCI_IO_BASE + AMAZON_PCI_IO_SIZE - 1, 
    66 #endif 
     53#else 
    6754        .start = 0, 
    68         .end = AMAZON_PCI_IO_SIZE - 1, 
     55        .end = 0x00002000 - 1, 
     56#endif 
    6957        .flags = IORESOURCE_IO 
    7058}; 
     
    7765}; 
    7866 
    79 static inline u32 amazon_pci_swap(u32 val) 
    80 { 
    81 #ifdef CONFIG_AMAZON_PCI_HW_SWAP 
    82         return swab32(val); 
    83 #else 
    84         return val; 
    85 #endif 
    86 } 
    87  
    8867static int amazon_pci_config_access(unsigned char access_type, 
    8968        struct pci_bus *bus, unsigned int devfn, unsigned int where, u32 *data) 
     
    9372        u32 val; 
    9473        int ret; 
    95     
     74 
    9675        /* Amazon support slot from 0 to 15 */ 
    9776        /* devfn 0 & 0x20 is itself */ 
    98         if ((bus->number != 0) || (devfn == 0) || (devfn == 0x20)) 
     77        if ((bus->number != 0) || (devfn > 0x7f) || (devfn == 0) || (devfn == 0x20)) 
    9978                return 1; 
    10079 
    101         pci_addr=AMAZON_PCI_CFG_BASE | 
     80        local_irq_save(flags); 
     81 
     82        pci_addr = AMAZON_PCI_CFG_BASE | 
    10283                bus->number << AMAZON_PCI_CFG_BUSNUM_SHF | 
    10384                devfn << AMAZON_PCI_CFG_FUNNUM_SHF | 
    10485                (where & ~0x3); 
    105      
    106         local_irq_save(flags); 
    107         if (access_type == PCI_ACCESS_WRITE) { 
    108                 val = amazon_pci_swap(*data); 
     86 
     87        if (access_type == PCI_ACCESS_WRITE) 
     88        { 
     89#ifdef CONFIG_SWAP_IO_SPACE 
     90                val = swab32(*data); 
     91#endif 
    10992                ret = put_dbe(val, (u32 *)pci_addr); 
    11093        } else { 
    11194                ret = get_dbe(val, (u32 *)pci_addr); 
    112                 *data = amazon_pci_swap(val); 
    113         } 
    114  
    115         amazon_w32(PCI_MODE, amazon_r32(PCI_MODE) & (~(1<<PCI_MODE_cfgok_bit))); 
    116         amazon_w32(STATUS_COMMAND_ADDR, amazon_r32(STATUS_COMMAND_ADDR)); 
    117         amazon_w32(PCI_MODE, amazon_r32(PCI_MODE) | (~(1<<PCI_MODE_cfgok_bit))); 
     95#ifdef CONFIG_SWAP_IO_SPACE 
     96                *data = swab32(val); 
     97#else 
     98                *data = val; 
     99#endif 
     100        } 
     101 
     102        amazon_writel(amazon_readl(PCI_MODE) & (~(1<<PCI_MODE_cfgok_bit)), PCI_MODE); 
     103        amazon_writel(amazon_readl(STATUS_COMMAND_ADDR), STATUS_COMMAND_ADDR); 
     104        amazon_writel(amazon_readl(PCI_MODE) | (~(1<<PCI_MODE_cfgok_bit)), PCI_MODE); 
     105        mb(); 
    118106        local_irq_restore(flags); 
     107 
     108        if (((*data) == 0xffffffff) && (access_type == PCI_ACCESS_READ)) 
     109                return 1; 
    119110 
    120111        return ret;  
     
    173164        .pci_ops = &amazon_pci_ops, 
    174165        .mem_resource = &pci_mem_resource, 
    175         .io_resource = &pci_io_resource 
     166        .mem_offset     = 0x00000000UL, 
     167        .io_resource = &pci_io_resource, 
     168        .io_offset      = 0x00000000UL, 
    176169}; 
    177170 
     
    238231        u32 temp_buffer; 
    239232 
    240 #ifdef CONFIG_AMAZON_PCI_HW_SWAP 
     233#ifdef CONFIG_SWAP_IO_SPACE 
    241234        AMAZON_PCI_REG32(IRM) = AMAZON_PCI_REG32(IRM) | (1<<27) | (1<<28); 
    242235        wmb(); 
     
    244237 
    245238        AMAZON_PCI_REG32(CLOCK_CONTROL) = AMAZON_PCI_REG32(CLOCK_CONTROL) | (1<<ARB_CTRL_bit); 
    246         amazon_w32(PCI_MODE, amazon_r32(PCI_MODE) & (~(1<<PCI_MODE_cfgok_bit))); 
     239        amazon_writel(amazon_readl(PCI_MODE) & (~(1<<PCI_MODE_cfgok_bit)), PCI_MODE); 
    247240 
    248241        AMAZON_PCI_REG32(STATUS_COMMAND_ADDR) = AMAZON_PCI_REG32(STATUS_COMMAND_ADDR) | (1<<BUS_MASTER_ENABLE_BIT) |(1<<MEM_SPACE_ENABLE_BIT); 
     
    272265        AMAZON_PCI_REG32(FPI_ADDRESS_MAP_6) = 0xb2600000; 
    273266        AMAZON_PCI_REG32(FPI_ADDRESS_MAP_7) = 0xb2700000; 
    274             
    275         AMAZON_PCI_REG32(BAR11_MASK) = 0x0f000008; 
     267 
     268        AMAZON_PCI_REG32(BAR11_MASK) = 0x0c000008; 
    276269        AMAZON_PCI_REG32(PCI_ADDRESS_MAP_11) = 0x0; 
    277270        AMAZON_PCI_REG32(BAR1_ADDR) = 0x0; 
    278         amazon_w32(PCI_MODE, amazon_r32(PCI_MODE) | (~(1<<PCI_MODE_cfgok_bit))); 
     271        amazon_writel(amazon_readl(PCI_MODE) | (~(1<<PCI_MODE_cfgok_bit)), PCI_MODE); 
    279272        //use 8 dw burse length 
    280273        AMAZON_PCI_REG32(FPI_BURST_LENGTH) = 0x303; 
    281274 
    282         amazon_pci_controller.io_map_base = (unsigned long)ioremap(AMAZON_PCI_IO_BASE, AMAZON_PCI_IO_SIZE); 
     275        amazon_pci_controller.io_map_base = (unsigned long)ioremap(AMAZON_PCI_IO_BASE, AMAZON_PCI_IO_SIZE - 1); 
    283276        register_pci_controller(&amazon_pci_controller); 
    284277        return 0; 
  • trunk/target/linux/amazon/files/arch/mips/amazon/setup.c

    r8334 r19013  
    156156        //reenable trace capability 
    157157        part_no = readl(AMAZON_BCU_ECON); 
     158 
     159        ioport_resource.start = IOPORT_RESOURCE_START; 
     160        ioport_resource.end = IOPORT_RESOURCE_END; 
     161        iomem_resource.start = IOMEM_RESOURCE_START; 
     162        iomem_resource.end = IOMEM_RESOURCE_END; 
    158163} 
    159164 
  • trunk/target/linux/amazon/files/include/asm-mips/amazon/amazon.h

    r16118 r19013  
    2626******************************************************************************/ 
    2727 
    28 #define amazon_readl(a)                                 readl(((u32*)(a))) 
    29 #define amazon_writel(a,b)                              writel(a, ((u32*)(b))) 
    30 #define amazon_writel_masked(a,b,c)             writel((readl(((u32*)(a))) & ~b) | (c & b), ((u32*)(a))) 
     28#define amazon_readl(a)                                 __raw_readl(((u32*)(a))) 
     29#define amazon_writel(a,b)                              __raw_writel(a, ((u32*)(b))) 
     30#define amazon_writel_masked(a,b,c)             __raw_writel((__raw_readl(((u32*)(a))) & ~b) | (c & b), ((u32*)(a))) 
     31 
     32#define IOPORT_RESOURCE_START           0x10000000 
     33#define IOPORT_RESOURCE_END             0xffffffff 
     34#define IOMEM_RESOURCE_START            0x10000000 
     35#define IOMEM_RESOURCE_END              0xffffffff 
    3136 
    3237/* check ADSL link status */ 
  • trunk/target/linux/amazon/patches-2.6.30/100-board.patch

    r18589 r19013  
    11--- a/arch/mips/Kconfig 
    22+++ b/arch/mips/Kconfig 
    3 @@ -60,6 +60,21 @@ config BCM47XX 
     3@@ -60,6 +60,22 @@ config BCM47XX 
    44        help 
    55         Support for BCM47XX based boards 
     
    1919+       select SYS_HAS_EARLY_PRINTK 
    2020+       select HW_HAS_PCI 
     21+       select SWAP_IO_SPACE 
    2122+ 
    2223 config MIPS_COBALT 
    2324        bool "Cobalt Server" 
    2425        select CEVT_R4K 
    25 @@ -633,6 +648,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD 
     26@@ -633,6 +649,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD 
    2627  
    2728 endchoice 
Note: See TracChangeset for help on using the changeset viewer.