source: trunk/target/linux/ixp4xx/patches-3.0/115-sidewinder_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: 7.2 KB
  • arch/arm/mach-ixp4xx/Kconfig

    From 60bdaaaf3446b4237566c6e04855186fc7bd766b Mon Sep 17 00:00:00 2001
    From: Imre Kaloz <kaloz@openwrt.org>
    Date: Sun, 13 Jul 2008 22:46:45 +0200
    Subject: [PATCH] Add support for the ADI Sidewinder
    
    Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
    ---
     arch/arm/mach-ixp4xx/Kconfig            |   10 ++-
     arch/arm/mach-ixp4xx/Makefile           |    2 +
     arch/arm/mach-ixp4xx/sidewinder-pci.c   |   68 ++++++++++++++
     arch/arm/mach-ixp4xx/sidewinder-setup.c |  151 +++++++++++++++++++++++++++++++
     4 files changed, 230 insertions(+), 1 deletions(-)
     create mode 100644 arch/arm/mach-ixp4xx/sidewinder-pci.c
     create mode 100644 arch/arm/mach-ixp4xx/sidewinder-setup.c
    
    a b config MACH_PRONGHORN 
    8181config MACH_PRONGHORNMETRO 
    8282        def_bool MACH_PRONGHORN 
    8383 
     84config MACH_SIDEWINDER 
     85        bool "ADI Sidewinder" 
     86        select PCI 
     87        help 
     88          Say 'Y' here if you want your kernel to support the ADI  
     89          Engineering Sidewinder board. For more information on this 
     90          platform, see http://www.adiengineering.com 
     91 
    8492config ARCH_IXDP425 
    8593        bool "IXDP425" 
    8694        help 
    config MACH_ARCOM_VULCAN 
    177185# 
    178186config CPU_IXP46X 
    179187        bool 
    180         depends on MACH_IXDP465 
     188        depends on MACH_IXDP465 || MACH_SIDEWINDER 
    181189        default y 
    182190 
    183191config CPU_IXP43X 
  • arch/arm/mach-ixp4xx/Makefile

    a b obj-pci-$(CONFIG_MACH_WG302V2) += wg302 
    1919obj-pci-$(CONFIG_MACH_FSG)              += fsg-pci.o 
    2020obj-pci-$(CONFIG_MACH_ARCOM_VULCAN)     += vulcan-pci.o 
    2121obj-pci-$(CONFIG_MACH_PRONGHORN)        += pronghorn-pci.o 
     22obj-pci-$(CONFIG_MACH_SIDEWINDER)       += sidewinder-pci.o 
    2223 
    2324obj-y   += common.o 
    2425 
    obj-$(CONFIG_MACH_FSG) += fsg-setup.o 
    3738obj-$(CONFIG_MACH_GORAMO_MLR)   += goramo_mlr.o 
    3839obj-$(CONFIG_MACH_ARCOM_VULCAN) += vulcan-setup.o 
    3940obj-$(CONFIG_MACH_PRONGHORN)    += pronghorn-setup.o 
     41obj-$(CONFIG_MACH_SIDEWINDER)   += sidewinder-setup.o 
    4042 
    4143obj-$(CONFIG_PCI)               += $(obj-pci-$(CONFIG_PCI)) common-pci.o 
    4244obj-$(CONFIG_IXP4XX_QMGR)       += ixp4xx_qmgr.o 
  • new file arch/arm/mach-ixp4xx/sidewinder-pci.c

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

    - +  
     1/* 
     2 * arch/arm/mach-ixp4xx/sidewinder-setup.c 
     3 * 
     4 * Board setup for the ADI Engineering Sidewinder 
     5 * 
     6 * Copyright (C) 2008 Imre Kaloz <Kaloz@openwrt.org> 
     7 * 
     8 * based on coyote-setup.c: 
     9 *      Copyright (C) 2003-2005 MontaVista Software, Inc. 
     10 * 
     11 * Author: Imre Kaloz <Kaloz@openwrt.org> 
     12 */ 
     13 
     14#include <linux/kernel.h> 
     15#include <linux/serial.h> 
     16#include <linux/serial_8250.h> 
     17 
     18#include <asm/mach-types.h> 
     19#include <asm/mach/arch.h> 
     20#include <asm/mach/flash.h> 
     21 
     22static struct flash_platform_data sidewinder_flash_data = { 
     23        .map_name       = "cfi_probe", 
     24        .width          = 2, 
     25}; 
     26 
     27static struct resource sidewinder_flash_resource = { 
     28        .flags          = IORESOURCE_MEM, 
     29}; 
     30 
     31static struct platform_device sidewinder_flash = { 
     32        .name           = "IXP4XX-Flash", 
     33        .id             = 0, 
     34        .dev            = { 
     35                .platform_data = &sidewinder_flash_data, 
     36        }, 
     37        .num_resources  = 1, 
     38        .resource       = &sidewinder_flash_resource, 
     39}; 
     40 
     41static struct resource sidewinder_uart_resources[] = { 
     42        { 
     43                .start  = IXP4XX_UART1_BASE_PHYS, 
     44                .end    = IXP4XX_UART1_BASE_PHYS + 0x0fff, 
     45                .flags  = IORESOURCE_MEM, 
     46        }, 
     47        { 
     48                .start  = IXP4XX_UART2_BASE_PHYS, 
     49                .end    = IXP4XX_UART2_BASE_PHYS + 0x0fff, 
     50                .flags  = IORESOURCE_MEM, 
     51        } 
     52}; 
     53 
     54static struct plat_serial8250_port sidewinder_uart_data[] = { 
     55        { 
     56                .mapbase        = IXP4XX_UART1_BASE_PHYS, 
     57                .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, 
     58                .irq            = IRQ_IXP4XX_UART1, 
     59                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     60                .iotype         = UPIO_MEM, 
     61                .regshift       = 2, 
     62                .uartclk        = IXP4XX_UART_XTAL, 
     63        }, 
     64        { 
     65                .mapbase        = IXP4XX_UART2_BASE_PHYS, 
     66                .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, 
     67                .irq            = IRQ_IXP4XX_UART2, 
     68                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     69                .iotype         = UPIO_MEM, 
     70                .regshift       = 2, 
     71                .uartclk        = IXP4XX_UART_XTAL, 
     72        }, 
     73        { }, 
     74}; 
     75 
     76static struct platform_device sidewinder_uart = { 
     77        .name           = "serial8250", 
     78        .id             = PLAT8250_DEV_PLATFORM, 
     79        .dev            = { 
     80                .platform_data  = sidewinder_uart_data, 
     81        }, 
     82        .num_resources  = ARRAY_SIZE(sidewinder_uart_resources), 
     83        .resource       = sidewinder_uart_resources, 
     84}; 
     85 
     86static struct eth_plat_info sidewinder_plat_eth[] = { 
     87        { 
     88                .phy            = 5, 
     89                .rxq            = 3, 
     90                .txreadyq       = 20, 
     91        }, { 
     92                .phy            = IXP4XX_ETH_PHY_MAX_ADDR, 
     93                .phy_mask       = 0x1e, 
     94                .rxq            = 4, 
     95                .txreadyq       = 21, 
     96        }, { 
     97                .phy            = 31, 
     98                .rxq            = 2, 
     99                .txreadyq       = 19, 
     100        } 
     101}; 
     102 
     103static struct platform_device sidewinder_eth[] = { 
     104        { 
     105                .name                   = "ixp4xx_eth", 
     106                .id                     = IXP4XX_ETH_NPEB, 
     107                .dev.platform_data      = sidewinder_plat_eth, 
     108        }, { 
     109                .name                   = "ixp4xx_eth", 
     110                .id                     = IXP4XX_ETH_NPEC, 
     111                .dev.platform_data      = sidewinder_plat_eth + 1, 
     112        }, { 
     113                .name                   = "ixp4xx_eth", 
     114                .id                     = IXP4XX_ETH_NPEA, 
     115                .dev.platform_data      = sidewinder_plat_eth + 2, 
     116        } 
     117}; 
     118 
     119static struct platform_device *sidewinder_devices[] __initdata = { 
     120        &sidewinder_flash, 
     121        &sidewinder_uart, 
     122        &sidewinder_eth[0], 
     123        &sidewinder_eth[1], 
     124        &sidewinder_eth[2], 
     125}; 
     126 
     127static void __init sidewinder_init(void) 
     128{ 
     129        ixp4xx_sys_init(); 
     130 
     131        sidewinder_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 
     132        sidewinder_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_64M - 1; 
     133 
     134        *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; 
     135        *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; 
     136 
     137        platform_add_devices(sidewinder_devices, ARRAY_SIZE(sidewinder_devices)); 
     138} 
     139 
     140MACHINE_START(SIDEWINDER, "ADI Engineering Sidewinder") 
     141        /* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ 
     142        .map_io         = ixp4xx_map_io, 
     143        .init_irq       = ixp4xx_init_irq, 
     144        .timer          = &ixp4xx_timer, 
     145        .boot_params    = 0x0100, 
     146        .init_machine   = sidewinder_init, 
     147MACHINE_END 
Note: See TracBrowser for help on using the repository browser.