source: trunk/target/linux/ixp4xx/patches-3.0/110-pronghorn_series_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: 10.0 KB
  • arch/arm/configs/ixp4xx_defconfig

    a b CONFIG_ARCH_ADI_COYOTE=y 
    1515CONFIG_MACH_GATEWAY7001=y 
    1616CONFIG_MACH_WG302V1=y 
    1717CONFIG_MACH_WG302V2=y 
     18CONFIG_MACH_PRONGHORN=y 
     19CONFIG_MACH_PRONGHORNMETRO=y 
    1820CONFIG_ARCH_IXDP425=y 
    1921CONFIG_MACH_IXDPG425=y 
    2022CONFIG_MACH_IXDP465=y 
  • arch/arm/mach-ixp4xx/Kconfig

    a b config MACH_WG302V2 
    6565          WG302 v2 or WAG302 v2 Access Points. For more information 
    6666          on this platform, see http://openwrt.org 
    6767 
     68config MACH_PRONGHORN 
     69        bool "ADI Pronghorn series" 
     70        select PCI 
     71        help 
     72          Say 'Y' here if you want your kernel to support the ADI 
     73          Engineering Pronghorn series. For more 
     74          information on this platform, see http://www.adiengineering.com 
     75 
     76# 
     77# There're only minimal differences kernel-wise between the Pronghorn and 
     78# Pronghorn Metro boards - they use different chip selects to drive the 
     79# CF slot connected to the expansion bus, so we just enable them together. 
     80# 
     81config MACH_PRONGHORNMETRO 
     82        def_bool MACH_PRONGHORN 
     83 
    6884config ARCH_IXDP425 
    6985        bool "IXDP425" 
    7086        help 
  • arch/arm/mach-ixp4xx/Makefile

    a b obj-pci-$(CONFIG_MACH_WG302V1) += wg302 
    1818obj-pci-$(CONFIG_MACH_WG302V2)          += wg302v2-pci.o 
    1919obj-pci-$(CONFIG_MACH_FSG)              += fsg-pci.o 
    2020obj-pci-$(CONFIG_MACH_ARCOM_VULCAN)     += vulcan-pci.o 
     21obj-pci-$(CONFIG_MACH_PRONGHORN)        += pronghorn-pci.o 
    2122 
    2223obj-y   += common.o 
    2324 
    obj-$(CONFIG_MACH_WG302V2) += wg302v2-se 
    3536obj-$(CONFIG_MACH_FSG)          += fsg-setup.o 
    3637obj-$(CONFIG_MACH_GORAMO_MLR)   += goramo_mlr.o 
    3738obj-$(CONFIG_MACH_ARCOM_VULCAN) += vulcan-setup.o 
     39obj-$(CONFIG_MACH_PRONGHORN)    += pronghorn-setup.o 
    3840 
    3941obj-$(CONFIG_PCI)               += $(obj-pci-$(CONFIG_PCI)) common-pci.o 
    4042obj-$(CONFIG_IXP4XX_QMGR)       += ixp4xx_qmgr.o 
  • new file arch/arm/mach-ixp4xx/pronghorn-pci.c

    - +  
     1/* 
     2 * arch/arch/mach-ixp4xx/pronghorn-pci.c 
     3 * 
     4 * PCI setup routines for ADI Engineering Pronghorn series 
     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 
     28#include <asm/mach/pci.h> 
     29 
     30void __init pronghorn_pci_preinit(void) 
     31{ 
     32        irq_set_irq_type(IRQ_IXP4XX_GPIO4, IRQ_TYPE_LEVEL_LOW); 
     33        irq_set_irq_type(IRQ_IXP4XX_GPIO6, IRQ_TYPE_LEVEL_LOW); 
     34        irq_set_irq_type(IRQ_IXP4XX_GPIO11, IRQ_TYPE_LEVEL_LOW); 
     35        irq_set_irq_type(IRQ_IXP4XX_GPIO1, IRQ_TYPE_LEVEL_LOW); 
     36 
     37        ixp4xx_pci_preinit(); 
     38} 
     39 
     40static int __init pronghorn_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 
     41{ 
     42        if (slot == 13) 
     43                return IRQ_IXP4XX_GPIO4; 
     44        else if (slot == 14) 
     45                return IRQ_IXP4XX_GPIO6; 
     46        else if (slot == 15) 
     47                return IRQ_IXP4XX_GPIO11; 
     48        else if (slot == 16) 
     49                return IRQ_IXP4XX_GPIO1; 
     50        else 
     51                return -1; 
     52} 
     53 
     54struct hw_pci pronghorn_pci __initdata = { 
     55        .nr_controllers = 1, 
     56        .preinit        = pronghorn_pci_preinit, 
     57        .swizzle        = pci_std_swizzle, 
     58        .setup          = ixp4xx_setup, 
     59        .scan           = ixp4xx_scan_bus, 
     60        .map_irq        = pronghorn_map_irq, 
     61}; 
     62 
     63int __init pronghorn_pci_init(void) 
     64{ 
     65        if (machine_is_pronghorn() || machine_is_pronghorn_metro()) 
     66                pci_common_init(&pronghorn_pci); 
     67        return 0; 
     68} 
     69 
     70subsys_initcall(pronghorn_pci_init); 
  • new file arch/arm/mach-ixp4xx/pronghorn-setup.c

    - +  
     1/* 
     2 * arch/arm/mach-ixp4xx/pronghorn-setup.c 
     3 * 
     4 * Board setup for the ADI Engineering Pronghorn series 
     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/init.h> 
     16#include <linux/device.h> 
     17#include <linux/serial.h> 
     18#include <linux/tty.h> 
     19#include <linux/serial_8250.h> 
     20#include <linux/slab.h> 
     21#include <linux/types.h> 
     22#include <linux/memory.h> 
     23#include <linux/i2c-gpio.h> 
     24#include <linux/leds.h> 
     25 
     26#include <asm/setup.h> 
     27#include <mach/hardware.h> 
     28#include <asm/irq.h> 
     29#include <asm/mach-types.h> 
     30#include <asm/mach/arch.h> 
     31#include <asm/mach/flash.h> 
     32 
     33static struct flash_platform_data pronghorn_flash_data = { 
     34        .map_name       = "cfi_probe", 
     35        .width          = 2, 
     36}; 
     37 
     38static struct resource pronghorn_flash_resource = { 
     39        .flags          = IORESOURCE_MEM, 
     40}; 
     41 
     42static struct platform_device pronghorn_flash = { 
     43        .name           = "IXP4XX-Flash", 
     44        .id             = 0, 
     45        .dev            = { 
     46                .platform_data  = &pronghorn_flash_data, 
     47        }, 
     48        .num_resources  = 1, 
     49        .resource       = &pronghorn_flash_resource, 
     50}; 
     51 
     52static struct resource pronghorn_uart_resources [] = { 
     53        { 
     54                .start          = IXP4XX_UART1_BASE_PHYS, 
     55                .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff, 
     56                .flags          = IORESOURCE_MEM 
     57        }, 
     58        { 
     59                .start          = IXP4XX_UART2_BASE_PHYS, 
     60                .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff, 
     61                .flags          = IORESOURCE_MEM 
     62        } 
     63}; 
     64 
     65static struct plat_serial8250_port pronghorn_uart_data[] = { 
     66        { 
     67                .mapbase        = IXP4XX_UART1_BASE_PHYS, 
     68                .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, 
     69                .irq            = IRQ_IXP4XX_UART1, 
     70                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     71                .iotype         = UPIO_MEM, 
     72                .regshift       = 2, 
     73                .uartclk        = IXP4XX_UART_XTAL, 
     74        }, 
     75        { 
     76                .mapbase        = IXP4XX_UART2_BASE_PHYS, 
     77                .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, 
     78                .irq            = IRQ_IXP4XX_UART2, 
     79                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     80                .iotype         = UPIO_MEM, 
     81                .regshift       = 2, 
     82                .uartclk        = IXP4XX_UART_XTAL, 
     83        }, 
     84        { }, 
     85}; 
     86 
     87static struct platform_device pronghorn_uart = { 
     88        .name           = "serial8250", 
     89        .id             = PLAT8250_DEV_PLATFORM, 
     90        .dev            = { 
     91                .platform_data  = pronghorn_uart_data, 
     92        }, 
     93        .num_resources  = 2, 
     94        .resource       = pronghorn_uart_resources, 
     95}; 
     96 
     97static struct i2c_gpio_platform_data pronghorn_i2c_gpio_data = { 
     98        .sda_pin        = 9, 
     99        .scl_pin        = 10, 
     100}; 
     101 
     102static struct platform_device pronghorn_i2c_gpio = { 
     103        .name           = "i2c-gpio", 
     104        .id             = 0, 
     105        .dev            = { 
     106                .platform_data  = &pronghorn_i2c_gpio_data, 
     107        }, 
     108}; 
     109 
     110static struct gpio_led pronghorn_led_pin[] = { 
     111        { 
     112                .name           = "pronghorn:green:status", 
     113                .gpio           = 7, 
     114        } 
     115}; 
     116 
     117static struct gpio_led_platform_data pronghorn_led_data = { 
     118        .num_leds               = 1, 
     119        .leds                   = pronghorn_led_pin, 
     120}; 
     121 
     122static struct platform_device pronghorn_led = { 
     123        .name                   = "leds-gpio", 
     124        .id                     = -1, 
     125        .dev.platform_data      = &pronghorn_led_data, 
     126}; 
     127 
     128static struct resource pronghorn_pata_resources[] = { 
     129        { 
     130                .flags  = IORESOURCE_MEM 
     131        }, 
     132        { 
     133                .flags  = IORESOURCE_MEM, 
     134        }, 
     135        { 
     136                .name   = "intrq", 
     137                .start  = IRQ_IXP4XX_GPIO0, 
     138                .end    = IRQ_IXP4XX_GPIO0, 
     139                .flags  = IORESOURCE_IRQ, 
     140        }, 
     141}; 
     142 
     143static struct ixp4xx_pata_data pronghorn_pata_data = { 
     144        .cs0_bits       = 0xbfff0043, 
     145        .cs1_bits       = 0xbfff0043, 
     146}; 
     147 
     148static struct platform_device pronghorn_pata = { 
     149        .name                   = "pata_ixp4xx_cf", 
     150        .id                     = 0, 
     151        .dev.platform_data      = &pronghorn_pata_data, 
     152        .num_resources          = ARRAY_SIZE(pronghorn_pata_resources), 
     153        .resource               = pronghorn_pata_resources, 
     154}; 
     155 
     156static struct eth_plat_info pronghorn_plat_eth[] = { 
     157        { 
     158                .phy            = 0, 
     159                .rxq            = 3, 
     160                .txreadyq       = 20, 
     161        }, { 
     162                .phy            = 1, 
     163                .rxq            = 4, 
     164                .txreadyq       = 21, 
     165        } 
     166}; 
     167 
     168static struct platform_device pronghorn_eth[] = { 
     169        { 
     170                .name                   = "ixp4xx_eth", 
     171                .id                     = IXP4XX_ETH_NPEB, 
     172                .dev.platform_data      = pronghorn_plat_eth, 
     173        }, { 
     174                .name                   = "ixp4xx_eth", 
     175                .id                     = IXP4XX_ETH_NPEC, 
     176                .dev.platform_data      = pronghorn_plat_eth + 1, 
     177        } 
     178}; 
     179 
     180static struct platform_device *pronghorn_devices[] __initdata = { 
     181        &pronghorn_flash, 
     182        &pronghorn_uart, 
     183        &pronghorn_led, 
     184        &pronghorn_eth[0], 
     185        &pronghorn_eth[1], 
     186}; 
     187 
     188static void __init pronghorn_init(void) 
     189{ 
     190        ixp4xx_sys_init(); 
     191 
     192        pronghorn_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 
     193        pronghorn_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1; 
     194 
     195        *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; 
     196        *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; 
     197 
     198        platform_add_devices(pronghorn_devices, ARRAY_SIZE(pronghorn_devices)); 
     199 
     200        if (machine_is_pronghorn()) { 
     201                pronghorn_pata_resources[0].start = IXP4XX_EXP_BUS_BASE(2); 
     202                pronghorn_pata_resources[0].end = IXP4XX_EXP_BUS_END(2); 
     203 
     204                pronghorn_pata_resources[1].start = IXP4XX_EXP_BUS_BASE(3); 
     205                pronghorn_pata_resources[1].end = IXP4XX_EXP_BUS_END(3); 
     206 
     207                pronghorn_pata_data.cs0_cfg = IXP4XX_EXP_CS2; 
     208                pronghorn_pata_data.cs1_cfg = IXP4XX_EXP_CS3; 
     209        } else { 
     210                pronghorn_pata_resources[0].start = IXP4XX_EXP_BUS_BASE(3); 
     211                pronghorn_pata_resources[0].end = IXP4XX_EXP_BUS_END(3); 
     212 
     213                pronghorn_pata_resources[1].start = IXP4XX_EXP_BUS_BASE(4); 
     214                pronghorn_pata_resources[1].end = IXP4XX_EXP_BUS_END(4); 
     215 
     216                pronghorn_pata_data.cs0_cfg = IXP4XX_EXP_CS3; 
     217                pronghorn_pata_data.cs1_cfg = IXP4XX_EXP_CS4; 
     218 
     219                platform_device_register(&pronghorn_i2c_gpio); 
     220        } 
     221 
     222        platform_device_register(&pronghorn_pata); 
     223} 
     224 
     225MACHINE_START(PRONGHORN, "ADI Engineering Pronghorn") 
     226        /* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ 
     227        .map_io         = ixp4xx_map_io, 
     228        .init_irq       = ixp4xx_init_irq, 
     229        .timer          = &ixp4xx_timer, 
     230        .boot_params    = 0x0100, 
     231        .init_machine   = pronghorn_init, 
     232MACHINE_END 
     233 
     234MACHINE_START(PRONGHORNMETRO, "ADI Engineering Pronghorn Metro") 
     235        /* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ 
     236        .map_io         = ixp4xx_map_io, 
     237        .init_irq       = ixp4xx_init_irq, 
     238        .timer          = &ixp4xx_timer, 
     239        .boot_params    = 0x0100, 
     240        .init_machine   = pronghorn_init, 
     241MACHINE_END 
  • arch/arm/mach-ixp4xx/include/mach/uncompress.h

    a b static __inline__ void __arch_decomp_set 
    4141         * Some boards are using UART2 as console 
    4242         */ 
    4343        if (machine_is_adi_coyote() || machine_is_gtwx5715() || 
    44                          machine_is_gateway7001() || machine_is_wg302v2()) 
     44                         machine_is_gateway7001() || machine_is_wg302v2() || 
     45                         machine_is_pronghorn() || machine_is_pronghorn_metro()) 
    4546                uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; 
    4647        else 
    4748                uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; 
Note: See TracBrowser for help on using the repository browser.