Re: [PATCH] Serial updates

From: Benjamin Herrenschmidt
Date: Mon Nov 01 2004 - 23:37:48 EST


And here's another one that also fixes a little bug in the
default console selection code ...

--- linux-work.orig/arch/ppc64/kernel/setup.c 2004-10-27 13:05:41.000000000 +1000
+++ linux-work/arch/ppc64/kernel/setup.c 2004-11-02 15:18:26.707500208 +1100
@@ -31,7 +31,7 @@
#include <linux/cpu.h>
#include <linux/unistd.h>
#include <linux/serial.h>
-#include <linux/8250.h>
+#include <linux/serial_8250.h>
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/processor.h>
@@ -901,7 +901,7 @@
DBG("Found serial console at ttyS%d\n", offset);

if (spd) {
- char opt[16];
+ static char __initdata opt[16];
sprintf(opt, "%d", *spd);
return add_preferred_console("ttyS", offset, opt);
} else
@@ -1123,8 +1123,8 @@
*/

#define MAX_LEGACY_SERIAL_PORTS 8
-static struct old_serial_port old_serial_ports[MAX_LEGACY_SERIAL_PORTS];
-static unsigned int old_serial_count;
+static struct plat_serial8250_port serial_ports[MAX_LEGACY_SERIAL_PORTS+1];
+static unsigned int old_serial_count;

void __init generic_find_legacy_serial_ports(unsigned int *default_speed)
{
@@ -1202,13 +1202,13 @@
if (index >= old_serial_count)
old_serial_count = index + 1;
/* Check if there is a port who already claimed our slot */
- if (old_serial_ports[index].port != 0) {
+ if (serial_ports[index].iobase != 0) {
/* if we still have some room, move it, else override */
if (old_serial_count < MAX_LEGACY_SERIAL_PORTS) {
DBG("Moved legacy port %d -> %d\n", index,
old_serial_count);
- old_serial_ports[old_serial_count++] =
- old_serial_ports[index];
+ serial_ports[old_serial_count++] =
+ serial_ports[index];
} else {
DBG("Replacing legacy port %d\n", index);
}
@@ -1220,18 +1220,17 @@
old_serial_count = index + 1;

/* Now fill the entry */
- memset(&old_serial_ports[index], 0, sizeof(struct old_serial_port));
- old_serial_ports[index].uart = 0;
- old_serial_ports[index].baud_base = clk ? (*clk / 16) : BASE_BAUD;
- old_serial_ports[index].port = reg->address;
- old_serial_ports[index].irq = interrupts ? interrupts[0] : 0;
- old_serial_ports[index].flags = ASYNC_BOOT_AUTOCONF;
+ memset(&serial_ports[index], 0, sizeof(struct plat_serial8250_port));
+ serial_ports[index].uartclk = clk ? *clk : BASE_BAUD * 16;
+ serial_ports[index].iobase = reg->address;
+ serial_ports[index].irq = interrupts ? interrupts[0] : 0;
+ serial_ports[index].flags = ASYNC_BOOT_AUTOCONF;

DBG("Added legacy port, index: %d, port: %x, irq: %d, clk: %d\n",
index,
- old_serial_ports[index].port,
- old_serial_ports[index].irq,
- old_serial_ports[index].baud_base * 16);
+ serial_ports[index].iobase,
+ serial_ports[index].irq,
+ serial_ports[index].uartclk);

/* Get phys address of IO reg for port 1 */
if (index != 0)
@@ -1279,19 +1278,21 @@
DBG(" <- generic_find_legacy_serial_port()\n");
}

-struct old_serial_port *get_legacy_serial_ports(unsigned int *count)
-{
- *count = old_serial_count;
- return old_serial_ports;
-}
-#else
-struct old_serial_port *get_legacy_serial_ports(unsigned int *count)
+static struct platform_device serial_device = {
+ .name = "serial8250",
+ .id = 0,
+ .dev = {
+ .platform_data = serial_ports,
+ },
+};
+
+static int __init serial_dev_init(void)
{
- *count = 0;
- return 0;
+ return platform_device_register(&serial_device);
}
+arch_initcall(serial_dev_init);
+
#endif /* CONFIG_PPC_ISERIES */
-EXPORT_SYMBOL(get_legacy_serial_ports);

int check_legacy_ioport(unsigned long base_port)
{
Index: linux-work/include/asm-ppc64/serial.h
===================================================================
--- linux-work.orig/include/asm-ppc64/serial.h 2004-10-26 08:30:21.000000000 +1000
+++ linux-work/include/asm-ppc64/serial.h 2004-11-02 15:17:27.620482800 +1100
@@ -4,8 +4,6 @@
#ifndef _PPC64_SERIAL_H
#define _PPC64_SERIAL_H

-#include <linux/config.h>
-
/*
* This assumes you have a 1.8432 MHz clock for your UART.
*
@@ -22,9 +20,4 @@
/* Default baud base if not found in device-tree */
#define BASE_BAUD ( 1843200 / 16 )

-#define ARCH_HAS_GET_LEGACY_SERIAL_PORTS
-struct old_serial_port;
-extern struct old_serial_port *get_legacy_serial_ports(unsigned int *count);
-#define UART_NR (8 + CONFIG_SERIAL_8250_NR_UARTS)
-
#endif /* _PPC64_SERIAL_H */


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/