Commit e4d6f911 authored by Yoshinori Sato's avatar Yoshinori Sato

sh-sci: Get register size from platform device

There is much SCI of SoC having within,
and the register size is also different in everyone.
So get from platform device.
Signed-off-by: default avatarYoshinori Sato <ysato@users.sourceforge.jp>
Acked-by: default avatarby: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent ded515a4
...@@ -84,7 +84,7 @@ struct sci_port { ...@@ -84,7 +84,7 @@ struct sci_port {
int overrun_bit; int overrun_bit;
unsigned int error_mask; unsigned int error_mask;
unsigned int sampling_rate; unsigned int sampling_rate;
resource_size_t reg_size;
/* Break timer */ /* Break timer */
struct timer_list break_timer; struct timer_list break_timer;
...@@ -2073,23 +2073,9 @@ static const char *sci_type(struct uart_port *port) ...@@ -2073,23 +2073,9 @@ static const char *sci_type(struct uart_port *port)
return NULL; return NULL;
} }
static inline unsigned long sci_port_size(struct uart_port *port)
{
/*
* Pick an arbitrary size that encapsulates all of the base
* registers by default. This can be optimized later, or derived
* from platform resource data at such a time that ports begin to
* behave more erratically.
*/
if (port->type == PORT_HSCIF)
return 96;
else
return 64;
}
static int sci_remap_port(struct uart_port *port) static int sci_remap_port(struct uart_port *port)
{ {
unsigned long size = sci_port_size(port); struct sci_port *sport = to_sci_port(port);
/* /*
* Nothing to do if there's already an established membase. * Nothing to do if there's already an established membase.
...@@ -2098,7 +2084,7 @@ static int sci_remap_port(struct uart_port *port) ...@@ -2098,7 +2084,7 @@ static int sci_remap_port(struct uart_port *port)
return 0; return 0;
if (port->flags & UPF_IOREMAP) { if (port->flags & UPF_IOREMAP) {
port->membase = ioremap_nocache(port->mapbase, size); port->membase = ioremap_nocache(port->mapbase, sport->reg_size);
if (unlikely(!port->membase)) { if (unlikely(!port->membase)) {
dev_err(port->dev, "can't remap port#%d\n", port->line); dev_err(port->dev, "can't remap port#%d\n", port->line);
return -ENXIO; return -ENXIO;
...@@ -2117,23 +2103,28 @@ static int sci_remap_port(struct uart_port *port) ...@@ -2117,23 +2103,28 @@ static int sci_remap_port(struct uart_port *port)
static void sci_release_port(struct uart_port *port) static void sci_release_port(struct uart_port *port)
{ {
struct sci_port *sport = to_sci_port(port);
if (port->flags & UPF_IOREMAP) { if (port->flags & UPF_IOREMAP) {
iounmap(port->membase); iounmap(port->membase);
port->membase = NULL; port->membase = NULL;
} }
release_mem_region(port->mapbase, sci_port_size(port)); release_mem_region(port->mapbase, sport->reg_size);
} }
static int sci_request_port(struct uart_port *port) static int sci_request_port(struct uart_port *port)
{ {
unsigned long size = sci_port_size(port);
struct resource *res; struct resource *res;
struct sci_port *sport = to_sci_port(port);
int ret; int ret;
res = request_mem_region(port->mapbase, size, dev_name(port->dev)); res = request_mem_region(port->mapbase, sport->reg_size,
if (unlikely(res == NULL)) dev_name(port->dev));
if (unlikely(res == NULL)) {
dev_err(port->dev, "request_mem_region failed.");
return -EBUSY; return -EBUSY;
}
ret = sci_remap_port(port); ret = sci_remap_port(port);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
...@@ -2207,6 +2198,7 @@ static int sci_init_single(struct platform_device *dev, ...@@ -2207,6 +2198,7 @@ static int sci_init_single(struct platform_device *dev,
return -ENOMEM; return -ENOMEM;
port->mapbase = res->start; port->mapbase = res->start;
sci_port->reg_size = resource_size(res);
for (i = 0; i < ARRAY_SIZE(sci_port->irqs); ++i) for (i = 0; i < ARRAY_SIZE(sci_port->irqs); ++i)
sci_port->irqs[i] = platform_get_irq(dev, i); sci_port->irqs[i] = platform_get_irq(dev, i);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment