source: trunk/target/linux/ixp4xx/patches-3.0/500-usr8200_support.patch @ 27493

Last change on this file since 27493 was 27493, checked in by kaloz, 5 years ago

[ixp4xx]: add 3.0 support

File size: 8.6 KB
  • arch/arm/mach-ixp4xx/Kconfig

    a b config MACH_SIDEWINDER 
    9797          Engineering Sidewinder board. For more information on this 
    9898          platform, see http://www.adiengineering.com 
    9999 
     100config MACH_USR8200 
     101        bool "USRobotics USR8200" 
     102        select PCI 
     103        help 
     104          Say 'Y' here if you want your kernel to support the USRobotics 
     105          USR8200 router board. For more information on this platform, see 
     106          http://openwrt.org 
     107 
    100108config MACH_COMPEX 
    101109        bool "Compex WP18 / NP18A" 
    102110        select PCI 
  • arch/arm/mach-ixp4xx/Makefile

    a b obj-pci-$(CONFIG_MACH_WRT300NV2) += wrt 
    2626obj-pci-$(CONFIG_MACH_AP1000)           += ixdp425-pci.o 
    2727obj-pci-$(CONFIG_MACH_TW5334)           += tw5334-pci.o 
    2828obj-pci-$(CONFIG_MACH_MI424WR)          += mi424wr-pci.o 
     29obj-pci-$(CONFIG_MACH_USR8200)          += usr8200-pci.o 
    2930 
    3031obj-y   += common.o 
    3132 
    obj-$(CONFIG_MACH_WRT300NV2) += wrt300nv 
    5152obj-$(CONFIG_MACH_AP1000)       += ap1000-setup.o 
    5253obj-$(CONFIG_MACH_TW5334)       += tw5334-setup.o 
    5354obj-$(CONFIG_MACH_MI424WR)      += mi424wr-setup.o 
     55obj-$(CONFIG_MACH_USR8200)      += usr8200-setup.o 
    5456 
    5557obj-$(CONFIG_PCI)               += $(obj-pci-$(CONFIG_PCI)) common-pci.o 
    5658obj-$(CONFIG_IXP4XX_QMGR)       += ixp4xx_qmgr.o 
  • new file arch/arm/mach-ixp4xx/usr8200-pci.c

    - +  
     1/* 
     2 * arch/arch/mach-ixp4xx/usr8200-pci.c 
     3 * 
     4 * PCI setup routines for USRobotics USR8200 
     5 * 
     6 * Copyright (C) 2008 Peter Denison <openwrt@marshadder.org> 
     7 * 
     8 * based on pronghorn-pci.c 
     9 *      Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
     10 * based on coyote-pci.c: 
     11 *      Copyright (C) 2002 Jungo Software Technologies. 
     12 *      Copyright (C) 2003 MontaVista Softwrae, Inc. 
     13 * 
     14 * Maintainer: Peter Denison <openwrt@marshadder.org> 
     15 * 
     16 * This program is free software; you can redistribute it and/or modify 
     17 * it under the terms of the GNU General Public License version 2 as 
     18 * published by the Free Software Foundation. 
     19 * 
     20 */ 
     21 
     22#include <linux/kernel.h> 
     23#include <linux/pci.h> 
     24#include <linux/init.h> 
     25#include <linux/irq.h> 
     26 
     27#include <asm/mach-types.h> 
     28#include <mach/hardware.h> 
     29 
     30#include <asm/mach/pci.h> 
     31 
     32void __init usr8200_pci_preinit(void) 
     33{ 
     34        irq_set_irq_type(IRQ_IXP4XX_GPIO7, IRQ_TYPE_LEVEL_LOW); 
     35        irq_set_irq_type(IRQ_IXP4XX_GPIO8, IRQ_TYPE_LEVEL_LOW); 
     36        irq_set_irq_type(IRQ_IXP4XX_GPIO9, IRQ_TYPE_LEVEL_LOW); 
     37        irq_set_irq_type(IRQ_IXP4XX_GPIO10, IRQ_TYPE_LEVEL_LOW); 
     38        irq_set_irq_type(IRQ_IXP4XX_GPIO11, IRQ_TYPE_LEVEL_LOW); 
     39 
     40        ixp4xx_pci_preinit(); 
     41} 
     42 
     43static int __init usr8200_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 
     44{ 
     45        if (slot == 14) 
     46                return IRQ_IXP4XX_GPIO7; 
     47        else if (slot == 15) 
     48                return IRQ_IXP4XX_GPIO8; 
     49        else if (slot == 16) { 
     50                if (pin == 1) 
     51                        return IRQ_IXP4XX_GPIO11; 
     52                else if (pin == 2) 
     53                        return IRQ_IXP4XX_GPIO10; 
     54                else if (pin == 3) 
     55                        return IRQ_IXP4XX_GPIO9; 
     56                else 
     57                        return -1; 
     58        } else 
     59                return -1; 
     60} 
     61 
     62struct hw_pci usr8200_pci __initdata = { 
     63        .nr_controllers = 1, 
     64        .preinit        = usr8200_pci_preinit, 
     65        .swizzle        = pci_std_swizzle, 
     66        .setup          = ixp4xx_setup, 
     67        .scan           = ixp4xx_scan_bus, 
     68        .map_irq        = usr8200_map_irq, 
     69}; 
     70 
     71int __init usr8200_pci_init(void) 
     72{ 
     73        if (machine_is_usr8200()) 
     74                pci_common_init(&usr8200_pci); 
     75        return 0; 
     76} 
     77 
     78subsys_initcall(usr8200_pci_init); 
  • new file arch/arm/mach-ixp4xx/usr8200-setup.c

    - +  
     1/* 
     2 * arch/arm/mach-ixp4xx/usr8200-setup.c 
     3 * 
     4 * Board setup for the USRobotics USR8200 
     5 * 
     6 * Copyright (C) 2008 Peter Denison <openwrt@marshadder.org> 
     7 * 
     8 * based on pronghorn-setup.c: 
     9 *      Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
     10 * based on coyote-setup.c: 
     11 *      Copyright (C) 2003-2005 MontaVista Software, Inc. 
     12 * 
     13 * Author: Peter Denison <openwrt@marshadder.org> 
     14 */ 
     15 
     16#include <linux/kernel.h> 
     17#include <linux/init.h> 
     18#include <linux/device.h> 
     19#include <linux/serial.h> 
     20#include <linux/tty.h> 
     21#include <linux/serial_8250.h> 
     22#include <linux/slab.h> 
     23#include <linux/types.h> 
     24#include <linux/memory.h> 
     25#include <linux/i2c-gpio.h> 
     26#include <linux/leds.h> 
     27 
     28#include <asm/setup.h> 
     29#include <mach/hardware.h> 
     30#include <asm/irq.h> 
     31#include <asm/mach-types.h> 
     32#include <asm/mach/arch.h> 
     33#include <asm/mach/flash.h> 
     34 
     35static struct flash_platform_data usr8200_flash_data = { 
     36        .map_name       = "cfi_probe", 
     37        .width          = 2, 
     38}; 
     39 
     40static struct resource usr8200_flash_resource = { 
     41        .flags          = IORESOURCE_MEM, 
     42}; 
     43 
     44static struct platform_device usr8200_flash = { 
     45        .name           = "IXP4XX-Flash", 
     46        .id             = 0, 
     47        .dev            = { 
     48                .platform_data  = &usr8200_flash_data, 
     49        }, 
     50        .num_resources  = 1, 
     51        .resource       = &usr8200_flash_resource, 
     52}; 
     53 
     54static struct resource usr8200_uart_resources [] = { 
     55        { 
     56                .start          = IXP4XX_UART2_BASE_PHYS, 
     57                .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff, 
     58                .flags          = IORESOURCE_MEM 
     59        }, 
     60        { 
     61                .start          = IXP4XX_UART1_BASE_PHYS, 
     62                .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff, 
     63                .flags          = IORESOURCE_MEM 
     64        } 
     65}; 
     66 
     67static struct plat_serial8250_port usr8200_uart_data[] = { 
     68        { 
     69                .mapbase        = IXP4XX_UART2_BASE_PHYS, 
     70                .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, 
     71                .irq            = IRQ_IXP4XX_UART2, 
     72                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     73                .iotype         = UPIO_MEM, 
     74                .regshift       = 2, 
     75                .uartclk        = IXP4XX_UART_XTAL, 
     76        }, 
     77        { 
     78                .mapbase        = IXP4XX_UART1_BASE_PHYS, 
     79                .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, 
     80                .irq            = IRQ_IXP4XX_UART1, 
     81                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     82                .iotype         = UPIO_MEM, 
     83                .regshift       = 2, 
     84                .uartclk        = IXP4XX_UART_XTAL, 
     85        }, 
     86        { }, 
     87}; 
     88 
     89static struct platform_device usr8200_uart = { 
     90        .name           = "serial8250", 
     91        .id             = PLAT8250_DEV_PLATFORM, 
     92        .dev            = { 
     93                .platform_data  = usr8200_uart_data, 
     94        }, 
     95        .num_resources  = 2, 
     96        .resource       = usr8200_uart_resources, 
     97}; 
     98 
     99static struct gpio_led usr8200_led_pin[] = { 
     100        { 
     101                .name           = "usr8200:usb1", 
     102                .gpio           = 0, 
     103                .active_low     = 1, 
     104        }, 
     105        { 
     106                .name           = "usr8200:usb2", 
     107                .gpio           = 1, 
     108                .active_low     = 1, 
     109        }, 
     110        { 
     111                .name           = "usr8200:ieee1394", 
     112                .gpio           = 2, 
     113                .active_low     = 1, 
     114        }, 
     115        { 
     116                .name           = "usr8200:internal", 
     117                .gpio           = 3, 
     118                .active_low     = 1, 
     119        }, 
     120        { 
     121                .name           = "usr8200:power", 
     122                .gpio           = 14, 
     123        } 
     124}; 
     125 
     126static struct gpio_led_platform_data usr8200_led_data = { 
     127        .num_leds               = ARRAY_SIZE(usr8200_led_pin), 
     128        .leds                   = usr8200_led_pin, 
     129}; 
     130 
     131static struct platform_device usr8200_led = { 
     132        .name                   = "leds-gpio", 
     133        .id                     = -1, 
     134        .dev.platform_data      = &usr8200_led_data, 
     135}; 
     136 
     137static struct eth_plat_info usr8200_plat_eth[] = { 
     138        { /* NPEC - LAN with Marvell 88E6060 switch */ 
     139                .phy            = IXP4XX_ETH_PHY_MAX_ADDR, 
     140                .phy_mask       = 0x0F0000, 
     141                .rxq            = 4, 
     142                .txreadyq       = 21, 
     143        }, { /* NPEB - WAN */ 
     144                .phy            = 9, 
     145                .rxq            = 3, 
     146                .txreadyq       = 20, 
     147        } 
     148}; 
     149 
     150static struct platform_device usr8200_eth[] = { 
     151        { 
     152                .name                   = "ixp4xx_eth", 
     153                .id                     = IXP4XX_ETH_NPEC, 
     154                .dev.platform_data      = usr8200_plat_eth, 
     155        }, { 
     156                .name                   = "ixp4xx_eth", 
     157                .id                     = IXP4XX_ETH_NPEB, 
     158                .dev.platform_data      = usr8200_plat_eth + 1, 
     159        } 
     160}; 
     161 
     162static struct resource usr8200_rtc_resources = { 
     163        .flags          = IORESOURCE_MEM 
     164}; 
     165 
     166static struct platform_device usr8200_rtc = { 
     167        .name           = "rtc7301", 
     168        .id             = 0, 
     169        .num_resources  = 1, 
     170        .resource       = &usr8200_rtc_resources, 
     171}; 
     172 
     173static struct platform_device *usr8200_devices[] __initdata = { 
     174        &usr8200_flash, 
     175        &usr8200_uart, 
     176        &usr8200_led, 
     177        &usr8200_eth[0], 
     178        &usr8200_eth[1], 
     179        &usr8200_rtc, 
     180}; 
     181 
     182static void __init usr8200_init(void) 
     183{ 
     184        ixp4xx_sys_init(); 
     185 
     186        usr8200_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 
     187        usr8200_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_16M - 1; 
     188 
     189        usr8200_rtc_resources.start = IXP4XX_EXP_BUS_BASE(2); 
     190        usr8200_rtc_resources.end = IXP4XX_EXP_BUS_BASE(2) + 0x01ff; 
     191 
     192        *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; 
     193        *IXP4XX_EXP_CS2 = 0x3fff000 | IXP4XX_EXP_BUS_SIZE(0) | IXP4XX_EXP_BUS_WR_EN | 
     194                          IXP4XX_EXP_BUS_CS_EN | IXP4XX_EXP_BUS_BYTE_EN; 
     195        *IXP4XX_GPIO_GPCLKR = 0x01100000; 
     196 
     197        /* configure button as input */ 
     198        gpio_line_config(12, IXP4XX_GPIO_IN); 
     199 
     200        platform_add_devices(usr8200_devices, ARRAY_SIZE(usr8200_devices)); 
     201} 
     202 
     203MACHINE_START(USR8200, "USRobotics USR8200") 
     204        /* Maintainer: Peter Denison <openwrt@marshadder.org> */ 
     205        .map_io         = ixp4xx_map_io, 
     206        .init_irq       = ixp4xx_init_irq, 
     207        .timer          = &ixp4xx_timer, 
     208        .boot_params    = 0x0100, 
     209        .init_machine   = usr8200_init, 
     210MACHINE_END 
  • arch/arm/mach-ixp4xx/include/mach/uncompress.h

    a b static __inline__ void __arch_decomp_set 
    4343        if (machine_is_adi_coyote() || machine_is_gtwx5715() || 
    4444                         machine_is_gateway7001() || machine_is_wg302v2() || 
    4545                         machine_is_pronghorn() || machine_is_pronghorn_metro() || machine_is_wrt300nv2() || 
    46                          machine_is_tw5334()) 
     46                         machine_is_tw5334() || machine_is_usr8200()) 
    4747                uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; 
    4848        else 
    4949                uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; 
Note: See TracBrowser for help on using the repository browser.