Re: [PATCH 2/2] Use resource_size_t for serial port IO addresses

2007-02-20 Thread Alan
On Tue, 20 Feb 2007 14:19:51 +1100 (EST)
David Gibson <[EMAIL PROTECTED]> wrote:

> At present, various parts of the serial code use unsigned long to
> define resource addresses.  This is a problem, because some 32-bit
> platforms have physical addresses larger than 32-bits, and have mmio
> serial uarts located above the 4GB point.
> 
> This patch changes the type of mapbase in both struct uart_port and
> struct plat_serial8250_port to resource_size_t, which can be
> configured to be 64 bits on such platforms.  The mapbase in
> serial_struct can't safely be changed, because that structure is user
> visible.
> 
> Signed-off-by: David Gibson <[EMAIL PROTECTED]>

Acked-by: Alan Cox <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] Use resource_size_t for serial port IO addresses

2007-02-20 Thread Alan
On Tue, 20 Feb 2007 14:19:51 +1100 (EST)
David Gibson [EMAIL PROTECTED] wrote:

 At present, various parts of the serial code use unsigned long to
 define resource addresses.  This is a problem, because some 32-bit
 platforms have physical addresses larger than 32-bits, and have mmio
 serial uarts located above the 4GB point.
 
 This patch changes the type of mapbase in both struct uart_port and
 struct plat_serial8250_port to resource_size_t, which can be
 configured to be 64 bits on such platforms.  The mapbase in
 serial_struct can't safely be changed, because that structure is user
 visible.
 
 Signed-off-by: David Gibson [EMAIL PROTECTED]

Acked-by: Alan Cox [EMAIL PROTECTED]
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] Use resource_size_t for serial port IO addresses

2007-02-19 Thread David Gibson
At present, various parts of the serial code use unsigned long to
define resource addresses.  This is a problem, because some 32-bit
platforms have physical addresses larger than 32-bits, and have mmio
serial uarts located above the 4GB point.

This patch changes the type of mapbase in both struct uart_port and
struct plat_serial8250_port to resource_size_t, which can be
configured to be 64 bits on such platforms.  The mapbase in
serial_struct can't safely be changed, because that structure is user
visible.

Signed-off-by: David Gibson <[EMAIL PROTECTED]>
---

 drivers/serial/8250.c|5 +++--
 drivers/serial/8250_early.c  |   16 +---
 drivers/serial/serial_core.c |9 +
 include/linux/serial_8250.h  |2 +-
 include/linux/serial_core.h  |2 +-
 5 files changed, 19 insertions(+), 15 deletions(-)

Index: working-2.6/include/linux/serial_core.h
===
--- working-2.6.orig/include/linux/serial_core.h2007-02-19 
11:07:42.0 +1100
+++ working-2.6/include/linux/serial_core.h 2007-02-19 11:07:43.0 
+1100
@@ -273,7 +273,7 @@ struct uart_port {
const struct uart_ops   *ops;
unsigned intcustom_divisor;
unsigned intline;   /* port index */
-   unsigned long   mapbase;/* for ioremap */
+   resource_size_t mapbase;/* for ioremap */
struct device   *dev;   /* parent device */
unsigned char   hub6;   /* this should be in 
the 8250 driver */
unsigned char   unused[3];
Index: working-2.6/drivers/serial/serial_core.c
===
--- working-2.6.orig/drivers/serial/serial_core.c   2007-02-19 
11:07:42.0 +1100
+++ working-2.6/drivers/serial/serial_core.c2007-02-19 11:07:43.0 
+1100
@@ -633,7 +633,7 @@ static int uart_get_info(struct uart_sta
tmp.hub6= port->hub6;
tmp.io_type = port->iotype;
tmp.iomem_reg_shift = port->regshift;
-   tmp.iomem_base  = (void *)port->mapbase;
+   tmp.iomem_base  = (void *)(unsigned long)port->mapbase;
 
if (copy_to_user(retinfo, , sizeof(*retinfo)))
return -EFAULT;
@@ -1673,10 +1673,11 @@ static int uart_line_info(char *buf, str
return 0;
 
mmio = port->iotype >= UPIO_MEM;
-   ret = sprintf(buf, "%d: uart:%s %s%08lX irq:%d",
+   ret = sprintf(buf, "%d: uart:%s %s%08llX irq:%d",
port->line, uart_type(port),
mmio ? "mmio:0x" : "port:",
-   mmio ? port->mapbase : (unsigned long) port->iobase,
+   mmio ? (unsigned long long)port->mapbase
+: (unsigned long long) port->iobase,
port->irq);
 
if (port->type == PORT_UNKNOWN) {
@@ -2069,7 +2070,7 @@ uart_report_port(struct uart_driver *drv
case UPIO_AU:
case UPIO_TSI:
snprintf(address, sizeof(address),
-"MMIO 0x%lx", port->mapbase);
+"MMIO 0x%llx", (unsigned long long)port->mapbase);
break;
default:
strlcpy(address, "*unknown*", sizeof(address));
Index: working-2.6/drivers/serial/8250_early.c
===
--- working-2.6.orig/drivers/serial/8250_early.c2007-02-19 
11:07:40.0 +1100
+++ working-2.6/drivers/serial/8250_early.c 2007-02-19 11:07:43.0 
+1100
@@ -145,8 +145,9 @@ static int __init parse_options(struct e
port->mapbase = simple_strtoul(options + 5, , 0);
port->membase = ioremap(port->mapbase, mapsize);
if (!port->membase) {
-   printk(KERN_ERR "%s: Couldn't ioremap 0x%lx\n",
-   __FUNCTION__, port->mapbase);
+   printk(KERN_ERR "%s: Couldn't ioremap 0x%llx\n",
+   __FUNCTION__,
+  (unsigned long long)port->mapbase);
return -ENOMEM;
}
mmio = 1;
@@ -168,9 +169,10 @@ static int __init parse_options(struct e
device->baud);
}
 
-   printk(KERN_INFO "Early serial console at %s 0x%lx (options '%s')\n",
+   printk(KERN_INFO "Early serial console at %s 0x%llx (options '%s')\n",
mmio ? "MMIO" : "I/O port",
-   mmio ? port->mapbase : (unsigned long) port->iobase,
+   mmio ? (unsigned long long) port->mapbase
+: (unsigned long long) port->iobase,
device->options);
return 0;
 }
@@ -236,10 +238,10 @@ static int __init early_uart_console_swi
mmio = 

[PATCH 2/2] Use resource_size_t for serial port IO addresses

2007-02-19 Thread David Gibson
At present, various parts of the serial code use unsigned long to
define resource addresses.  This is a problem, because some 32-bit
platforms have physical addresses larger than 32-bits, and have mmio
serial uarts located above the 4GB point.

This patch changes the type of mapbase in both struct uart_port and
struct plat_serial8250_port to resource_size_t, which can be
configured to be 64 bits on such platforms.  The mapbase in
serial_struct can't safely be changed, because that structure is user
visible.

Signed-off-by: David Gibson [EMAIL PROTECTED]
---

 drivers/serial/8250.c|5 +++--
 drivers/serial/8250_early.c  |   16 +---
 drivers/serial/serial_core.c |9 +
 include/linux/serial_8250.h  |2 +-
 include/linux/serial_core.h  |2 +-
 5 files changed, 19 insertions(+), 15 deletions(-)

Index: working-2.6/include/linux/serial_core.h
===
--- working-2.6.orig/include/linux/serial_core.h2007-02-19 
11:07:42.0 +1100
+++ working-2.6/include/linux/serial_core.h 2007-02-19 11:07:43.0 
+1100
@@ -273,7 +273,7 @@ struct uart_port {
const struct uart_ops   *ops;
unsigned intcustom_divisor;
unsigned intline;   /* port index */
-   unsigned long   mapbase;/* for ioremap */
+   resource_size_t mapbase;/* for ioremap */
struct device   *dev;   /* parent device */
unsigned char   hub6;   /* this should be in 
the 8250 driver */
unsigned char   unused[3];
Index: working-2.6/drivers/serial/serial_core.c
===
--- working-2.6.orig/drivers/serial/serial_core.c   2007-02-19 
11:07:42.0 +1100
+++ working-2.6/drivers/serial/serial_core.c2007-02-19 11:07:43.0 
+1100
@@ -633,7 +633,7 @@ static int uart_get_info(struct uart_sta
tmp.hub6= port-hub6;
tmp.io_type = port-iotype;
tmp.iomem_reg_shift = port-regshift;
-   tmp.iomem_base  = (void *)port-mapbase;
+   tmp.iomem_base  = (void *)(unsigned long)port-mapbase;
 
if (copy_to_user(retinfo, tmp, sizeof(*retinfo)))
return -EFAULT;
@@ -1673,10 +1673,11 @@ static int uart_line_info(char *buf, str
return 0;
 
mmio = port-iotype = UPIO_MEM;
-   ret = sprintf(buf, %d: uart:%s %s%08lX irq:%d,
+   ret = sprintf(buf, %d: uart:%s %s%08llX irq:%d,
port-line, uart_type(port),
mmio ? mmio:0x : port:,
-   mmio ? port-mapbase : (unsigned long) port-iobase,
+   mmio ? (unsigned long long)port-mapbase
+: (unsigned long long) port-iobase,
port-irq);
 
if (port-type == PORT_UNKNOWN) {
@@ -2069,7 +2070,7 @@ uart_report_port(struct uart_driver *drv
case UPIO_AU:
case UPIO_TSI:
snprintf(address, sizeof(address),
-MMIO 0x%lx, port-mapbase);
+MMIO 0x%llx, (unsigned long long)port-mapbase);
break;
default:
strlcpy(address, *unknown*, sizeof(address));
Index: working-2.6/drivers/serial/8250_early.c
===
--- working-2.6.orig/drivers/serial/8250_early.c2007-02-19 
11:07:40.0 +1100
+++ working-2.6/drivers/serial/8250_early.c 2007-02-19 11:07:43.0 
+1100
@@ -145,8 +145,9 @@ static int __init parse_options(struct e
port-mapbase = simple_strtoul(options + 5, options, 0);
port-membase = ioremap(port-mapbase, mapsize);
if (!port-membase) {
-   printk(KERN_ERR %s: Couldn't ioremap 0x%lx\n,
-   __FUNCTION__, port-mapbase);
+   printk(KERN_ERR %s: Couldn't ioremap 0x%llx\n,
+   __FUNCTION__,
+  (unsigned long long)port-mapbase);
return -ENOMEM;
}
mmio = 1;
@@ -168,9 +169,10 @@ static int __init parse_options(struct e
device-baud);
}
 
-   printk(KERN_INFO Early serial console at %s 0x%lx (options '%s')\n,
+   printk(KERN_INFO Early serial console at %s 0x%llx (options '%s')\n,
mmio ? MMIO : I/O port,
-   mmio ? port-mapbase : (unsigned long) port-iobase,
+   mmio ? (unsigned long long) port-mapbase
+: (unsigned long long) port-iobase,
device-options);
return 0;
 }
@@ -236,10 +238,10 @@ static int __init early_uart_console_swi
mmio = (port-iotype == UPIO_MEM);
line =