lkml.org 
[lkml]   [2012]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 03/06] serial8250: Use dl_read()/dl_write() on RM9K
    From: Magnus Damm <damm@opensource.se>

    Convert the 8250 RM9K support code to make
    use of the new dl_read()/dl_write() callbacks.

    Signed-off-by: Magnus Damm <damm@opensource.se>
    ---

    drivers/tty/serial/8250/8250.c | 62 ++++++++++++++++++----------------------
    1 file changed, 29 insertions(+), 33 deletions(-)

    --- 0006/drivers/tty/serial/8250/8250.c
    +++ work/drivers/tty/serial/8250/8250.c 2012-05-01 22:51:42.000000000 +0900
    @@ -297,25 +297,6 @@ static void default_dl_write(struct uart
    serial_out(up, UART_DLM, value >> 8 & 0xff);
    }

    -#if defined(CONFIG_SERIAL_8250_RM9K)
    -static int _serial_dl_read(struct uart_8250_port *up)
    -{
    - return (up->port.iotype == UPIO_RM9000) ?
    - (((__raw_readl(up->port.membase + 0x10) << 8) |
    - (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff) :
    - default_dl_read(up);
    -}
    -
    -static void _serial_dl_write(struct uart_8250_port *up, int value)
    -{
    - if (up->port.iotype == UPIO_RM9000) {
    - __raw_writel(value, up->port.membase + 0x08);
    - __raw_writel(value >> 8, up->port.membase + 0x10);
    - } else {
    - default_dl_write(up, value);
    - }
    -}
    -#else
    static int _serial_dl_read(struct uart_8250_port *up)
    {
    return default_dl_read(up);
    @@ -325,7 +306,6 @@ static void _serial_dl_write(struct uart
    {
    default_dl_write(up, value);
    }
    -#endif

    #ifdef CONFIG_MIPS_ALCHEMY

    @@ -373,7 +353,7 @@ static void au_serial_dl_write(struct ua

    #endif

    -#if defined(CONFIG_SERIAL_8250_RM9K)
    +#ifdef CONFIG_SERIAL_8250_RM9K

    static const u8
    regmap_in[8] = {
    @@ -397,28 +377,36 @@ static const u8
    [UART_SCR] = 0x2c
    };

    -static inline int map_8250_in_reg(struct uart_port *p, int offset)
    +static unsigned int rm9k_serial_in(struct uart_port *p, int offset)
    +{
    + offset = regmap_in[offset] << p->regshift;
    + return readl(p->membase + offset);
    +}
    +
    +static void rm9k_serial_out(struct uart_port *p, int offset, int value)
    {
    - if (p->iotype != UPIO_RM9000)
    - return offset;
    - return regmap_in[offset];
    + offset = regmap_out[offset] << p->regshift;
    + writel(value, p->membase + offset);
    +}
    +
    +static int rm9k_serial_dl_read(struct uart_8250_port *up)
    +{
    + return ((__raw_readl(up->port.membase + 0x10) << 8) |
    + (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff;
    }

    -static inline int map_8250_out_reg(struct uart_port *p, int offset)
    +static void rm9k_serial_dl_write(struct uart_8250_port *up, int value)
    {
    - if (p->iotype != UPIO_RM9000)
    - return offset;
    - return regmap_out[offset];
    + __raw_writel(value, up->port.membase + 0x08);
    + __raw_writel(value >> 8, up->port.membase + 0x10);
    }

    -#else
    +#endif

    /* sane hardware needs no mapping */
    #define map_8250_in_reg(up, offset) (offset)
    #define map_8250_out_reg(up, offset) (offset)

    -#endif
    -
    static unsigned int hub6_serial_in(struct uart_port *p, int offset)
    {
    offset = map_8250_in_reg(p, offset) << p->regshift;
    @@ -490,12 +478,20 @@ static void set_io_from_upio(struct uart
    p->serial_out = mem_serial_out;
    break;

    - case UPIO_RM9000:
    case UPIO_MEM32:
    p->serial_in = mem32_serial_in;
    p->serial_out = mem32_serial_out;
    break;

    +#ifdef CONFIG_SERIAL_8250_RM9K
    + case UPIO_RM9000:
    + p->serial_in = rm9k_serial_in;
    + p->serial_out = rm9k_serial_out;
    + up->dl_read = rm9k_serial_dl_read;
    + up->dl_write = rm9k_serial_dl_write;
    + break;
    +#endif
    +
    #ifdef CONFIG_MIPS_ALCHEMY
    case UPIO_AU:
    p->serial_in = au_serial_in;

    \
     
     \ /
      Last update: 2012-05-02 15:01    [W:0.028 / U:29.692 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site