source: trunk/target/linux/ixp4xx/patches-2.6.38/191-cambria_optional_uart.patch @ 26268

Last change on this file since 26268 was 26268, checked in by kaloz, 6 years ago

[ixp4xx]: add 2.6.38 support

File size: 6.7 KB
  • arch/arm/mach-ixp4xx/cambria-setup.c

    a b  
    3434#include <asm/mach/arch.h> 
    3535#include <asm/mach/flash.h> 
    3636#include <asm/setup.h> 
     37#include <linux/irq.h> 
    3738 
    3839struct cambria_board_info { 
    3940        unsigned char   *model; 
    static struct platform_device cambria_ua 
    127128        .resource       = &cambria_uart_resource, 
    128129}; 
    129130 
     131static struct resource cambria_optional_uart_resources[] = { 
     132        { 
     133                .start  = 0x52000000, 
     134                .end    = 0x52000fff, 
     135                .flags  = IORESOURCE_MEM 
     136        }, 
     137        { 
     138                .start  = 0x53000000, 
     139                .end    = 0x53000fff, 
     140                .flags  = IORESOURCE_MEM 
     141        } 
     142}; 
     143 
     144static struct plat_serial8250_port cambria_optional_uart_data[] = { 
     145        { 
     146                .flags          = UPF_BOOT_AUTOCONF, 
     147                .iotype         = UPIO_MEM_DELAY, 
     148                .regshift       = 0, 
     149                .uartclk        = 1843200, 
     150                .rw_delay       = 2, 
     151        }, 
     152        { 
     153                .flags          = UPF_BOOT_AUTOCONF, 
     154                .iotype         = UPIO_MEM_DELAY, 
     155                .regshift       = 0, 
     156                .uartclk        = 1843200, 
     157                .rw_delay       = 2, 
     158        }, 
     159  { }, 
     160}; 
     161 
     162static struct platform_device cambria_optional_uart = { 
     163        .name           = "serial8250", 
     164        .id             = PLAT8250_DEV_PLATFORM1, 
     165        .dev.platform_data      = cambria_optional_uart_data, 
     166        .num_resources  = 2, 
     167        .resource       = cambria_optional_uart_resources, 
     168}; 
     169 
    130170static struct resource cambria_pata_resources[] = { 
    131171        { 
    132172                .flags  = IORESOURCE_MEM 
    static void __init cambria_gw23xx_setup( 
    283323 
    284324static void __init cambria_gw2350_setup(void) 
    285325{ 
     326        *IXP4XX_EXP_CS2 = 0xBFFF3C43; 
     327        set_irq_type(IRQ_IXP4XX_GPIO3, IRQ_TYPE_EDGE_RISING); 
     328        cambria_optional_uart_data[0].mapbase   = 0x52FF0000; 
     329        cambria_optional_uart_data[0].membase   = (void __iomem *)ioremap(0x52FF0000, 0x0fff); 
     330        cambria_optional_uart_data[0].irq               = IRQ_IXP4XX_GPIO3; 
     331 
     332        *IXP4XX_EXP_CS3 = 0xBFFF3C43; 
     333        set_irq_type(IRQ_IXP4XX_GPIO4, IRQ_TYPE_EDGE_RISING); 
     334        cambria_optional_uart_data[1].mapbase   = 0x53FF0000; 
     335        cambria_optional_uart_data[1].membase   = (void __iomem *)ioremap(0x53FF0000, 0x0fff); 
     336        cambria_optional_uart_data[1].irq               = IRQ_IXP4XX_GPIO4; 
     337 
     338        platform_device_register(&cambria_optional_uart); 
    286339        platform_device_register(&cambria_npec_device); 
    287340        platform_device_register(&cambria_npea_device); 
    288341 
    static void __init cambria_gw2350_setup( 
    294347 
    295348static void __init cambria_gw2358_setup(void) 
    296349{ 
     350        *IXP4XX_EXP_CS3 = 0xBFFF3C43; 
     351        set_irq_type(IRQ_IXP4XX_GPIO3, IRQ_TYPE_EDGE_RISING); 
     352        cambria_optional_uart_data[0].mapbase   = 0x53FC0000; 
     353        cambria_optional_uart_data[0].membase   = (void __iomem *)ioremap(0x53FC0000, 0x0fff); 
     354        cambria_optional_uart_data[0].irq               = IRQ_IXP4XX_GPIO3; 
     355 
     356        set_irq_type(IRQ_IXP4XX_GPIO4, IRQ_TYPE_EDGE_RISING); 
     357        cambria_optional_uart_data[1].mapbase   = 0x53F80000; 
     358        cambria_optional_uart_data[1].membase   = (void __iomem *)ioremap(0x53F80000, 0x0fff); 
     359        cambria_optional_uart_data[1].irq               = IRQ_IXP4XX_GPIO4; 
     360 
     361        platform_device_register(&cambria_optional_uart); 
     362 
    297363        platform_device_register(&cambria_npec_device); 
    298364        platform_device_register(&cambria_npea_device); 
    299365 
  • include/linux/serial_8250.h

    a b struct plat_serial8250_port { 
    2727        void            *private_data; 
    2828        unsigned char   regshift;       /* register shift */ 
    2929        unsigned char   iotype;         /* UPIO_* */ 
     30        unsigned int rw_delay;  /* udelay for slower busses IXP4XX Expansion Bus */ 
    3031        unsigned char   hub6; 
    3132        upf_t           flags;          /* UPF_* flags */ 
    3233        unsigned int    type;           /* If UPF_FIXED_TYPE */ 
  • include/linux/serial_core.h

    a b struct uart_port { 
    316316#define UPIO_DWAPB              (6)                     /* DesignWare APB UART */ 
    317317#define UPIO_RM9000             (7)                     /* RM9000 type IO */ 
    318318#define UPIO_DWAPB32            (8)                     /* DesignWare APB UART (32 bit accesses) */ 
     319#define UPIO_MEM_DELAY          (9) 
    319320 
    320321        unsigned int            read_status_mask;       /* driver specific */ 
    321322        unsigned int            ignore_status_mask;     /* driver specific */ 
    struct uart_port { 
    358359 
    359360        unsigned int            mctrl;                  /* current modem ctrl settings */ 
    360361        unsigned int            timeout;                /* character-based timeout */ 
     362        unsigned int            rw_delay;               /* udelay for slow busses, IXP4XX Expansion Bus */ 
    361363        unsigned int            type;                   /* port type */ 
    362364        const struct uart_ops   *ops; 
    363365        unsigned int            custom_divisor; 
  • drivers/tty/serial/8250.c

    a b static void mem_serial_out(struct uart_p 
    413413        writeb(value, p->membase + offset); 
    414414} 
    415415 
     416static unsigned int memdelay_serial_in(struct uart_port *p, int offset) 
     417{ 
     418        struct uart_8250_port *up = (struct uart_8250_port *)p; 
     419        udelay(up->port.rw_delay); 
     420        return mem_serial_in(p, offset); 
     421} 
     422 
     423static void memdelay_serial_out(struct uart_port *p, int offset, int value) 
     424{ 
     425        struct uart_8250_port *up = (struct uart_8250_port *)p; 
     426        udelay(up->port.rw_delay); 
     427        mem_serial_out(p, offset, value); 
     428} 
     429 
    416430static void mem32_serial_out(struct uart_port *p, int offset, int value) 
    417431{ 
    418432        offset = map_8250_out_reg(p, offset) << p->regshift; 
    static void set_io_from_upio(struct uart 
    524538                p->serial_out = mem32_serial_out; 
    525539                break; 
    526540 
     541        case UPIO_MEM_DELAY: 
     542                p->serial_in = memdelay_serial_in; 
     543                p->serial_out = memdelay_serial_out; 
     544                break; 
     545 
    527546        case UPIO_AU: 
    528547                p->serial_in = au_serial_in; 
    529548                p->serial_out = au_serial_out; 
    serial_out_sync(struct uart_8250_port *u 
    560579        switch (p->iotype) { 
    561580        case UPIO_MEM: 
    562581        case UPIO_MEM32: 
     582        case UPIO_MEM_DELAY: 
    563583        case UPIO_AU: 
    564584        case UPIO_DWAPB: 
    565585        case UPIO_DWAPB32: 
    static int serial8250_request_std_resour 
    25212541        case UPIO_MEM: 
    25222542        case UPIO_DWAPB: 
    25232543        case UPIO_DWAPB32: 
     2544        case UPIO_MEM_DELAY: 
    25242545                if (!up->port.mapbase) 
    25252546                        break; 
    25262547 
    static void serial8250_release_std_resou 
    25592580        case UPIO_MEM: 
    25602581        case UPIO_DWAPB: 
    25612582        case UPIO_DWAPB32: 
     2583        case UPIO_MEM_DELAY: 
    25622584                if (!up->port.mapbase) 
    25632585                        break; 
    25642586 
    static int __devinit serial8250_probe(st 
    30743096                port.set_termios        = p->set_termios; 
    30753097                port.pm                 = p->pm; 
    30763098                port.dev                = &dev->dev; 
     3099                port.rw_delay           = p->rw_delay; 
    30773100                port.irqflags           |= irqflag; 
    30783101                ret = serial8250_register_port(&port); 
    30793102                if (ret < 0) { 
    int serial8250_register_port(struct uart 
    32233246                uart->port.iotype       = port->iotype; 
    32243247                uart->port.flags        = port->flags | UPF_BOOT_AUTOCONF; 
    32253248                uart->port.mapbase      = port->mapbase; 
     3249                uart->port.rw_delay                     = port->rw_delay; 
    32263250                uart->port.private_data = port->private_data; 
    32273251                if (port->dev) 
    32283252                        uart->port.dev = port->dev; 
  • drivers/tty/serial/serial_core.c

    a b uart_report_port(struct uart_driver *drv 
    21332133                snprintf(address, sizeof(address), 
    21342134                         "I/O 0x%lx offset 0x%x", port->iobase, port->hub6); 
    21352135                break; 
     2136        case UPIO_MEM_DELAY: 
    21362137        case UPIO_MEM: 
    21372138        case UPIO_MEM32: 
    21382139        case UPIO_AU: 
    int uart_match_port(struct uart_port *po 
    25542555        case UPIO_HUB6: 
    25552556                return (port1->iobase == port2->iobase) && 
    25562557                       (port1->hub6   == port2->hub6); 
     2558        case UPIO_MEM_DELAY: 
    25572559        case UPIO_MEM: 
    25582560        case UPIO_MEM32: 
    25592561        case UPIO_AU: 
Note: See TracBrowser for help on using the repository browser.