source: trunk/target/linux/ixp4xx/patches-3.3/520-tw2662_support.patch @ 31275

Last change on this file since 31275 was 31275, checked in by nbd, 4 years ago

ixp4xx: add support for linux 3.3.1

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

    a b config ARCH_PRPMC1100 
    180180          PrPCM1100 Processor Mezanine Module. For more information on 
    181181          this platform, see <file:Documentation/arm/IXP4xx>. 
    182182 
     183config MACH_TW2662 
     184        bool "Titan Wireless TW-266-2" 
     185        select PCI 
     186        help 
     187          Say 'Y' here if you want your kernel to support the Titan 
     188          Wireless TW266-2. For more information on this platform, 
     189          see http://openwrt.org 
     190 
     191 
    183192config MACH_TW5334 
    184193        bool "Titan Wireless TW-533-4" 
    185194        select PCI 
  • arch/arm/mach-ixp4xx/Makefile

    a b obj-pci-$(CONFIG_MACH_SIDEWINDER) += sid 
    2525obj-pci-$(CONFIG_MACH_COMPEX)           += ixdp425-pci.o 
    2626obj-pci-$(CONFIG_MACH_WRT300NV2)                += wrt300nv2-pci.o 
    2727obj-pci-$(CONFIG_MACH_AP1000)           += ixdp425-pci.o 
     28obj-pci-$(CONFIG_MACH_TW2662)           += tw2662-pci.o 
    2829obj-pci-$(CONFIG_MACH_TW5334)           += tw5334-pci.o 
    2930obj-pci-$(CONFIG_MACH_MI424WR)          += mi424wr-pci.o 
    3031obj-pci-$(CONFIG_MACH_USR8200)          += usr8200-pci.o 
    obj-$(CONFIG_MACH_SIDEWINDER) += sidewin 
    5455obj-$(CONFIG_MACH_COMPEX)       += compex-setup.o 
    5556obj-$(CONFIG_MACH_WRT300NV2)    += wrt300nv2-setup.o 
    5657obj-$(CONFIG_MACH_AP1000)       += ap1000-setup.o 
     58obj-$(CONFIG_MACH_TW2662)       += tw2662-setup.o 
    5759obj-$(CONFIG_MACH_TW5334)       += tw5334-setup.o 
    5860obj-$(CONFIG_MACH_MI424WR)      += mi424wr-setup.o 
    5961obj-$(CONFIG_MACH_USR8200)      += usr8200-setup.o 
  • arch/arm/mach-ixp4xx/include/mach/uncompress.h

    a b static __inline__ void __arch_decomp_set 
    4545            machine_is_devixp() || machine_is_miccpt() || machine_is_mic256() || 
    4646            machine_is_pronghorn() || machine_is_pronghorn_metro() || 
    4747            machine_is_wrt300nv2() || machine_is_tw5334() || 
    48             machine_is_usr8200()) 
     48            machine_is_usr8200() || machine_is_tw2662()) 
    4949                uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; 
    5050        else 
    5151                uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; 
  • new file arch/arm/mach-ixp4xx/tw2662-pci.c

    - +  
     1/* 
     2 * arch/arm/mach-ixp4xx/tw2662-pci.c 
     3 * 
     4 * PCI setup routines for Tiran Wireless TW-266-2 platform 
     5 * 
     6 * Copyright (C) 2002 Jungo Software Technologies. 
     7 * Copyright (C) 2003 MontaVista Softwrae, Inc. 
     8 * Copyright (C) 2010 Alexandros C. Couloumbis <alex@ozo.com> 
     9 * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org> 
     10 * 
     11 * Maintainer: Deepak Saxena <dsaxena@mvista.com> 
     12 * Maintainer: Alexandros C. Couloumbis <alex@ozo.com> 
     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#include <asm/mach-types.h> 
     25#include <mach/hardware.h> 
     26#include <asm/irq.h> 
     27#include <asm/mach/pci.h> 
     28 
     29#define SLOT0_DEVID     1 
     30#define SLOT1_DEVID     3 
     31 
     32/* PCI controller GPIO to IRQ pin mappings */ 
     33#define SLOT0_INTA      11 
     34#define SLOT1_INTA      9 
     35 
     36void __init tw2662_pci_preinit(void) 
     37{ 
     38        irq_set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW); 
     39        irq_set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW); 
     40        ixp4xx_pci_preinit(); 
     41} 
     42 
     43static int __init tw2662_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 
     44{ 
     45        if (slot == SLOT0_DEVID) 
     46                return IXP4XX_GPIO_IRQ(SLOT0_INTA); 
     47        else if (slot == SLOT1_DEVID) 
     48                return IXP4XX_GPIO_IRQ(SLOT1_INTA); 
     49        else return -1; 
     50} 
     51 
     52struct hw_pci tw2662_pci __initdata = { 
     53        .nr_controllers = 1, 
     54        .preinit =        tw2662_pci_preinit, 
     55        .swizzle =        pci_std_swizzle, 
     56        .setup =          ixp4xx_setup, 
     57        .scan =           ixp4xx_scan_bus, 
     58        .map_irq =        tw2662_map_irq, 
     59}; 
     60 
     61int __init tw2662_pci_init(void) 
     62{ 
     63        if (machine_is_tw2662()) 
     64                pci_common_init(&tw2662_pci); 
     65        return 0; 
     66} 
     67 
     68subsys_initcall(tw2662_pci_init); 
  • new file arch/arm/mach-ixp4xx/tw2662-setup.c

    - +  
     1/* 
     2 * arch/arm/mach-ixp4xx/tw2662-setup.c 
     3 * 
     4 * Titan Wireless TW-266-2 
     5 * 
     6 * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org> 
     7 * Copyright (C) 2010 Alexandros C. Couloumbis <alex@ozo.com> 
     8 * 
     9 * based on ap1000-setup.c: 
     10 *      Author: Imre Kaloz <Kaloz@openwrt.org> 
     11 */ 
     12 
     13#include <linux/if_ether.h> 
     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/netdevice.h> 
     22#include <linux/etherdevice.h> 
     23#include <linux/platform_device.h> 
     24 
     25#include <asm/io.h> 
     26#include <asm/types.h> 
     27#include <asm/setup.h> 
     28#include <asm/memory.h> 
     29#include <mach/hardware.h> 
     30#include <asm/mach-types.h> 
     31#include <asm/irq.h> 
     32#include <asm/mach/arch.h> 
     33#include <asm/mach/flash.h> 
     34 
     35/* gpio mask used by platform device */ 
     36#define TW2662_GPIO_MASK        (1 << 1) | (1 << 3) | (1 << 5) | (1 << 7) 
     37 
     38static struct flash_platform_data tw2662_flash_data = { 
     39        .map_name       = "cfi_probe", 
     40        .width          = 2, 
     41}; 
     42 
     43static struct resource tw2662_flash_resource = { 
     44        .flags          = IORESOURCE_MEM, 
     45}; 
     46 
     47static struct platform_device tw2662_flash = { 
     48        .name           = "IXP4XX-Flash", 
     49        .id             = 0, 
     50        .dev            = { 
     51                .platform_data = &tw2662_flash_data, 
     52        }, 
     53        .num_resources  = 1, 
     54        .resource       = &tw2662_flash_resource, 
     55}; 
     56 
     57static struct resource tw2662_gpio_resources[] = { 
     58        { 
     59                .name   = "gpio", 
     60                /* FIXME: gpio mask should be model specific */ 
     61                .start  = TW2662_GPIO_MASK, 
     62                .end    = TW2662_GPIO_MASK, 
     63                .flags  = 0, 
     64        }, 
     65}; 
     66 
     67static struct platform_device tw2662_gpio = { 
     68        .name                   = "GPIODEV", 
     69        .id                     = -1, 
     70        .num_resources          = ARRAY_SIZE(tw2662_gpio_resources), 
     71        .resource               = tw2662_gpio_resources, 
     72}; 
     73 
     74static struct resource tw2662_uart_resources[] = { 
     75        { 
     76                .start          = IXP4XX_UART1_BASE_PHYS, 
     77                .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff, 
     78                .flags          = IORESOURCE_MEM 
     79        }, 
     80        { 
     81                .start          = IXP4XX_UART2_BASE_PHYS, 
     82                .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff, 
     83                .flags          = IORESOURCE_MEM 
     84        } 
     85}; 
     86 
     87static struct plat_serial8250_port tw2662_uart_data[] = { 
     88        { 
     89                .mapbase        = IXP4XX_UART1_BASE_PHYS, 
     90                .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, 
     91                .irq            = IRQ_IXP4XX_UART1, 
     92                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     93                .iotype         = UPIO_MEM, 
     94                .regshift       = 2, 
     95                .uartclk        = IXP4XX_UART_XTAL, 
     96        }, 
     97        { 
     98                .mapbase        = IXP4XX_UART2_BASE_PHYS, 
     99                .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, 
     100                .irq            = IRQ_IXP4XX_UART2, 
     101                .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 
     102                .iotype         = UPIO_MEM, 
     103                .regshift       = 2, 
     104                .uartclk        = IXP4XX_UART_XTAL, 
     105        }, 
     106        { }, 
     107}; 
     108 
     109static struct platform_device tw2662_uart = { 
     110        .name                   = "serial8250", 
     111        .id                     = PLAT8250_DEV_PLATFORM, 
     112        .dev.platform_data      = tw2662_uart_data, 
     113        .num_resources          = 2, 
     114        .resource               = tw2662_uart_resources 
     115}; 
     116 
     117/* Built-in 10/100 Ethernet MAC interfaces */ 
     118static struct eth_plat_info tw2662_plat_eth[] = { 
     119        { 
     120                .phy            = 3, 
     121                .rxq            = 3, 
     122                .txreadyq       = 20, 
     123        }, { 
     124                .phy            = 1, 
     125                .rxq            = 4, 
     126                .txreadyq       = 21, 
     127        } 
     128}; 
     129 
     130static struct platform_device tw2662_eth[] = { 
     131        { 
     132                .name                   = "ixp4xx_eth", 
     133                .id                     = IXP4XX_ETH_NPEB, 
     134                .dev.platform_data      = tw2662_plat_eth, 
     135        }, { 
     136                .name                   = "ixp4xx_eth", 
     137                .id                     = IXP4XX_ETH_NPEC, 
     138                .dev.platform_data      = tw2662_plat_eth + 1, 
     139        } 
     140}; 
     141 
     142 
     143static struct platform_device *tw2662_devices[] __initdata = { 
     144        &tw2662_flash, 
     145        &tw2662_uart, 
     146        &tw2662_gpio, 
     147        &tw2662_eth[0], 
     148        &tw2662_eth[1], 
     149}; 
     150 
     151static char tw2662_mem_fixup[] __initdata = "mem=64M "; 
     152 
     153static void __init tw2662_fixup(struct tag *tags, char **cmdline, 
     154                                struct meminfo *mi) 
     155{ 
     156        struct tag *t = tags; 
     157        char *p = *cmdline; 
     158 
     159        /* Find the end of the tags table, taking note of any cmdline tag. */ 
     160        for (; t->hdr.size; t = tag_next(t)) { 
     161                if (t->hdr.tag == ATAG_CMDLINE) { 
     162                        p = t->u.cmdline.cmdline; 
     163                } 
     164        } 
     165 
     166        /* Overwrite the end of the table with a new cmdline tag. */ 
     167        t->hdr.tag = ATAG_CMDLINE; 
     168        t->hdr.size = (sizeof (struct tag_header) + 
     169                strlen(tw2662_mem_fixup) + strlen(p) + 1 + 4) >> 2; 
     170        strlcpy(t->u.cmdline.cmdline, tw2662_mem_fixup, COMMAND_LINE_SIZE); 
     171        strlcpy(t->u.cmdline.cmdline + strlen(tw2662_mem_fixup), p, 
     172                COMMAND_LINE_SIZE - strlen(tw2662_mem_fixup)); 
     173 
     174        /* Terminate the table. */ 
     175        t = tag_next(t); 
     176        t->hdr.tag = ATAG_NONE; 
     177        t->hdr.size = 0; 
     178} 
     179 
     180static void __init tw2662_init(void) 
     181{ 
     182        ixp4xx_sys_init(); 
     183 
     184        tw2662_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 
     185        tw2662_flash_resource.end = 
     186                IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 
     187 
     188        platform_add_devices(tw2662_devices, ARRAY_SIZE(tw2662_devices)); 
     189 
     190        if (!(is_valid_ether_addr(tw2662_plat_eth[0].hwaddr))) 
     191                random_ether_addr(tw2662_plat_eth[0].hwaddr); 
     192        if (!(is_valid_ether_addr(tw2662_plat_eth[1].hwaddr))) { 
     193                memcpy(tw2662_plat_eth[1].hwaddr, tw2662_plat_eth[0].hwaddr, ETH_ALEN); 
     194                tw2662_plat_eth[1].hwaddr[5] = (tw2662_plat_eth[0].hwaddr[5] + 1); 
     195        } 
     196 
     197} 
     198 
     199#ifdef CONFIG_MACH_TW2662 
     200MACHINE_START(TW2662, "Titan Wireless TW-266-2") 
     201        /* Maintainer: Alexandros C. Couloumbis <alex@ozo.com> */ 
     202        .fixup          = tw2662_fixup, 
     203        .map_io         = ixp4xx_map_io, 
     204        .init_irq       = ixp4xx_init_irq, 
     205        .timer          = &ixp4xx_timer, 
     206        .atag_offset    = 0x0100, 
     207        .init_machine   = tw2662_init, 
     208#if defined(CONFIG_PCI) 
     209        .dma_zone_size  = SZ_64M, 
     210#endif 
     211MACHINE_END 
     212#endif 
Note: See TracBrowser for help on using the repository browser.