Commit 23340580 authored by Pete Zaitcev's avatar Pete Zaitcev Committed by David S. Miller

[SPARC] sparc 2.5.x again

- Little woops in the new PCI configuration routines
- Removal of last CONFIG_SUN_SERIAL occurances
- sunzilog initialized itself even if obio is not present,
also remove pointless goto
- sunru oopsed outright trying to use iobase
parent 68ea0492
...@@ -248,7 +248,7 @@ static int pcic_read_config(struct pci_bus *bus, unsigned int devfn, ...@@ -248,7 +248,7 @@ static int pcic_read_config(struct pci_bus *bus, unsigned int devfn,
return 0; return 0;
case 4: case 4:
if (where&3) return -EINVAL; if (where&3) return -EINVAL;
pcic_read_config_dword(bus->number, devfn, where&~3, &v); pcic_read_config_dword(bus->number, devfn, where&~3, val);
return 0; return 0;
} }
return -EINVAL; return -EINVAL;
...@@ -425,7 +425,7 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic) ...@@ -425,7 +425,7 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
/* /*
* Main entry point from the PCI subsystem. * Main entry point from the PCI subsystem.
*/ */
static int __init pcibios_init(void) static int __init pcic_init(void)
{ {
struct linux_pcic *pcic; struct linux_pcic *pcic;
...@@ -1030,4 +1030,4 @@ void insl(unsigned long addr, void *dst, unsigned long count) { ...@@ -1030,4 +1030,4 @@ void insl(unsigned long addr, void *dst, unsigned long count) {
#endif #endif
subsys_initcall(pcibios_init); subsys_initcall(pcic_init);
...@@ -339,40 +339,38 @@ void __init setup_arch(char **cmdline_p) ...@@ -339,40 +339,38 @@ void __init setup_arch(char **cmdline_p)
prom_setsync(prom_sync_me); prom_setsync(prom_sync_me);
{ #ifndef CONFIG_SERIAL_CONSOLE /* Not CONFIG_SERIAL_SUNCORE: to be gone. */
#if !CONFIG_SUN_SERIAL serial_console = 0;
serial_console = 0;
#else #else
switch (console_fb) { switch (console_fb) {
case 0: /* Let get our io devices from prom */ case 0: /* Let get our io devices from prom */
{ {
int idev = prom_query_input_device(); int idev = prom_query_input_device();
int odev = prom_query_output_device(); int odev = prom_query_output_device();
if (idev == PROMDEV_IKBD && odev == PROMDEV_OSCREEN) { if (idev == PROMDEV_IKBD && odev == PROMDEV_OSCREEN) {
serial_console = 0; serial_console = 0;
} else if (idev == PROMDEV_ITTYA && odev == PROMDEV_OTTYA) { } else if (idev == PROMDEV_ITTYA && odev == PROMDEV_OTTYA) {
serial_console = 1; serial_console = 1;
} else if (idev == PROMDEV_ITTYB && odev == PROMDEV_OTTYB) { } else if (idev == PROMDEV_ITTYB && odev == PROMDEV_OTTYB) {
serial_console = 2; serial_console = 2;
} else if (idev == PROMDEV_I_UNK && odev == PROMDEV_OTTYA) { } else if (idev == PROMDEV_I_UNK && odev == PROMDEV_OTTYA) {
prom_printf("MrCoffee ttya\n"); prom_printf("MrCoffee ttya\n");
serial_console = 1; serial_console = 1;
} else if (idev == PROMDEV_I_UNK && odev == PROMDEV_OSCREEN) { } else if (idev == PROMDEV_I_UNK && odev == PROMDEV_OSCREEN) {
serial_console = 0; serial_console = 0;
prom_printf("MrCoffee keyboard\n"); prom_printf("MrCoffee keyboard\n");
} else { } else {
prom_printf("Inconsistent or unknown console\n"); prom_printf("Inconsistent or unknown console\n");
prom_printf("You cannot mix serial and non serial input/output devices\n"); prom_printf("You cannot mix serial and non serial input/output devices\n");
prom_halt(); prom_halt();
}
} }
break;
case 1: serial_console = 0; break; /* Force one of the framebuffers as console */
case 2: serial_console = 1; break; /* Force ttya as console */
case 3: serial_console = 2; break; /* Force ttyb as console */
} }
#endif break;
case 1: serial_console = 0; break; /* Force one of the framebuffers as console */
case 2: serial_console = 1; break; /* Force ttya as console */
case 3: serial_console = 2; break; /* Force ttyb as console */
} }
#endif
if((boot_flags&BOOTME_DEBUG) && (linux_dbvec!=0) && if((boot_flags&BOOTME_DEBUG) && (linux_dbvec!=0) &&
((*(short *)linux_dbvec) != -1)) { ((*(short *)linux_dbvec) != -1)) {
...@@ -383,9 +381,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -383,9 +381,6 @@ void __init setup_arch(char **cmdline_p)
init_mm.context = (unsigned long) NO_CONTEXT; init_mm.context = (unsigned long) NO_CONTEXT;
init_task.thread.kregs = &fake_swapper_regs; init_task.thread.kregs = &fake_swapper_regs;
if (serial_console)
conswitchp = NULL;
paging_init(); paging_init();
} }
......
...@@ -314,12 +314,9 @@ int prom_callback(long *args) ...@@ -314,12 +314,9 @@ int prom_callback(long *args)
return 0; return 0;
} }
extern void rs_kgdb_hook(int tty_num); /* sparc/serial.c */
unsigned int boot_flags = 0; unsigned int boot_flags = 0;
#define BOOTME_DEBUG 0x1 #define BOOTME_DEBUG 0x1
#define BOOTME_SINGLE 0x2 #define BOOTME_SINGLE 0x2
#define BOOTME_KGDB 0x4
static int console_fb __initdata = 0; static int console_fb __initdata = 0;
...@@ -389,26 +386,6 @@ static void __init boot_flags_init(char *commands) ...@@ -389,26 +386,6 @@ static void __init boot_flags_init(char *commands)
commands++; commands++;
while (*commands && *commands != ' ') while (*commands && *commands != ' ')
process_switch(*commands++); process_switch(*commands++);
} else if (strlen(commands) >= 9
&& !strncmp(commands, "kgdb=tty", 8)) {
boot_flags |= BOOTME_KGDB;
switch (commands[8]) {
#ifdef CONFIG_SUN_SERIAL
case 'a':
rs_kgdb_hook(0);
prom_printf("KGDB: Using serial line /dev/ttya.\n");
break;
case 'b':
rs_kgdb_hook(1);
prom_printf("KGDB: Using serial line /dev/ttyb.\n");
break;
#endif
default:
printk("KGDB: Unknown tty line.\n");
boot_flags &= ~BOOTME_KGDB;
break;
}
commands += 9;
} else { } else {
if (!strncmp(commands, "console=", 8)) { if (!strncmp(commands, "console=", 8)) {
commands += 8; commands += 8;
...@@ -567,7 +544,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -567,7 +544,6 @@ void __init setup_arch(char **cmdline_p)
} }
#endif #endif
#ifdef CONFIG_SUN_SERIAL
switch (console_fb) { switch (console_fb) {
case 0: /* Let's get our io devices from prom */ case 0: /* Let's get our io devices from prom */
{ {
...@@ -596,10 +572,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -596,10 +572,7 @@ void __init setup_arch(char **cmdline_p)
case 3: /* Force ttyb as console */ case 3: /* Force ttyb as console */
serial_console = 2; serial_console = 2;
break; break;
} };
#else
serial_console = 0;
#endif
if (serial_console) if (serial_console)
conswitchp = NULL; conswitchp = NULL;
......
...@@ -1515,14 +1515,6 @@ void __init paging_init(void) ...@@ -1515,14 +1515,6 @@ void __init paging_init(void)
pages_avail = 0; pages_avail = 0;
last_valid_pfn = end_pfn = bootmem_init(&pages_avail); last_valid_pfn = end_pfn = bootmem_init(&pages_avail);
#ifdef CONFIG_SUN_SERIAL
/* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup();
#endif
/* Inherit non-locked OBP mappings. */ /* Inherit non-locked OBP mappings. */
inherit_prom_mappings(); inherit_prom_mappings();
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/serio.h> #include <linux/serio.h>
#endif #endif
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -1019,6 +1020,8 @@ static void sunsu_autoconfig(struct uart_sunsu_port *up) ...@@ -1019,6 +1020,8 @@ static void sunsu_autoconfig(struct uart_sunsu_port *up)
if (!up->port_node || !up->su_type) if (!up->port_node || !up->su_type)
return; return;
up->port.iotype = SERIAL_IO_MEM;
/* /*
* First we look for Ebus-bases su's * First we look for Ebus-bases su's
*/ */
......
...@@ -1642,13 +1642,10 @@ static int __init sunzilog_init(void) ...@@ -1642,13 +1642,10 @@ static int __init sunzilog_init(void)
/* Sun4 Zilog setup is hard coded, no probing to do. */ /* Sun4 Zilog setup is hard coded, no probing to do. */
if (sparc_cpu_model == sun4) { if (sparc_cpu_model == sun4) {
NUM_SUNZILOG = 2; NUM_SUNZILOG = 2;
goto no_probe; } else if (sparc_cpu_model == sun4d) {
}
node = prom_getchild(prom_root_node);
if (sparc_cpu_model == sun4d) {
int bbnode; int bbnode;
node = prom_getchild(prom_root_node);
NUM_SUNZILOG = 0; NUM_SUNZILOG = 0;
while (node && while (node &&
(node = prom_searchsiblings(node, "cpu-unit"))) { (node = prom_searchsiblings(node, "cpu-unit"))) {
...@@ -1657,7 +1654,6 @@ static int __init sunzilog_init(void) ...@@ -1657,7 +1654,6 @@ static int __init sunzilog_init(void)
NUM_SUNZILOG += 2; NUM_SUNZILOG += 2;
node = prom_getsibling(node); node = prom_getsibling(node);
} }
goto no_probe;
} else if (sparc_cpu_model == sun4u) { } else if (sparc_cpu_model == sun4u) {
int central_node; int central_node;
...@@ -1668,27 +1664,28 @@ static int __init sunzilog_init(void) ...@@ -1668,27 +1664,28 @@ static int __init sunzilog_init(void)
if (central_node != 0 && central_node != -1) if (central_node != 0 && central_node != -1)
node = prom_searchsiblings(prom_getchild(central_node), "fhc"); node = prom_searchsiblings(prom_getchild(central_node), "fhc");
else else
node = prom_searchsiblings(node, "sbus"); node = prom_searchsiblings(prom_getchild(prom_root_node), "sbus");
if (node != 0 && node != -1) if (node != 0 && node != -1)
node = prom_getchild(node); node = prom_getchild(node);
if (node == 0 || node == -1) if (node == 0 || node == -1)
return -ENODEV; return -ENODEV;
node = prom_searchsiblings(node, "zs");
if (!node)
return -ENODEV;
NUM_SUNZILOG = 2;
} else { } else {
node = prom_getchild(prom_root_node);
node = prom_searchsiblings(node, "obio"); node = prom_searchsiblings(node, "obio");
if (node) if (node)
node = prom_getchild(node); node = prom_getchild(node);
if (!node)
return -ENODEV;
NUM_SUNZILOG = 2; NUM_SUNZILOG = 2;
goto no_probe;
} }
node = prom_searchsiblings(node, "zs");
if (!node)
return -ENODEV;
NUM_SUNZILOG = 2;
no_probe:
sunzilog_alloc_tables(); sunzilog_alloc_tables();
sunzilog_ports_init(); sunzilog_ports_init();
......
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