Skip to content

Commit

Permalink
Davinci: serial - use ioremap()
Browse files Browse the repository at this point in the history
This patch implements davinci serial cleanups towards having this code
reusable on tnetv107x.

The change reuses the platform data membase field to hold the remapped space.
By disabling the UPF_IOREMAP flag in the platform data, we prevent
the 8250 driver from repeating the ioremap.

Signed-off-by: Cyril Chemparathy <cyril@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
  • Loading branch information
Cyril Chemparathy authored and Kevin Hilman committed May 6, 2010
1 parent da0122c commit 9ee1ace
Showing 1 changed file with 25 additions and 7 deletions.
32 changes: 25 additions & 7 deletions arch/arm/mach-davinci/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,20 @@ static inline unsigned int serial_read_reg(struct plat_serial8250_port *up,
int offset)
{
offset <<= up->regshift;
return (unsigned int)__raw_readl(IO_ADDRESS(up->mapbase) + offset);

WARN_ONCE(!up->membase, "unmapped read: uart[%d]\n", offset);

return (unsigned int)__raw_readl(up->membase + offset);
}

static inline void serial_write_reg(struct plat_serial8250_port *p, int offset,
int value)
{
offset <<= p->regshift;
__raw_writel(value, IO_ADDRESS(p->mapbase) + offset);

WARN_ONCE(!p->membase, "unmapped write: uart[%d]\n", offset);

__raw_writel(value, p->membase + offset);
}

static void __init davinci_serial_reset(struct plat_serial8250_port *p)
Expand Down Expand Up @@ -83,14 +89,26 @@ int __init davinci_serial_init(struct davinci_uart_config *info)

sprintf(name, "uart%d", i);
uart_clk = clk_get(dev, name);
if (IS_ERR(uart_clk))
if (IS_ERR(uart_clk)) {
printk(KERN_ERR "%s:%d: failed to get UART%d clock\n",
__func__, __LINE__, i);
else {
clk_enable(uart_clk);
p->uartclk = clk_get_rate(uart_clk);
davinci_serial_reset(p);
continue;
}

clk_enable(uart_clk);
p->uartclk = clk_get_rate(uart_clk);

if (!p->membase && p->mapbase) {
p->membase = ioremap(p->mapbase, SZ_4K);

if (p->membase)
p->flags &= ~UPF_IOREMAP;
else
pr_err("uart regs ioremap failed\n");
}

if (p->membase)
davinci_serial_reset(p);
}

return platform_device_register(soc_info->serial_dev);
Expand Down

0 comments on commit 9ee1ace

Please sign in to comment.