only in patch2: --- linus-2.5/arch/parisc/kernel/pdc_cons.c Thu Oct 31 17:33:18 2002 +++ parisc-2.5/arch/parisc/kernel/pdc_cons.c Thu Oct 31 17:39:06 2002 @@ -70,7 +70,7 @@ static struct console pdc_cons = { write: pdc_console_write, device: PDC_CONSOLE_DEVICE, setup: pdc_console_setup, - flags: CON_PRINTBUFFER|CON_ENABLED, + flags: CON_BOOT|CON_PRINTBUFFER|CON_ENABLED, index: -1, }; @@ -93,7 +93,7 @@ static void pdc_console_init_force(void) register_console(&pdc_cons); } -void pdc_console_init(void) +void __init pdc_console_init(void) { #if defined(EARLY_BOOTUP_DEBUG) || defined(CONFIG_PDC_CONSOLE) pdc_console_init_force(); only in patch2: --- linus-2.5/drivers/ide/ide.c Thu Oct 31 17:34:55 2002 +++ parisc-2.5/drivers/ide/ide.c Thu Oct 31 17:39:20 2002 @@ -196,6 +196,7 @@ int noautodma = 1; #endif EXPORT_SYMBOL(noautodma); +EXPORT_SYMBOL(ide_bus_type); /* * ide_modules keeps track of the available IDE chipset/probe/driver modules. only in patch2: --- linus-2.5/drivers/ide/pci/ns87415.c Fri Oct 18 08:23:01 2002 +++ parisc-2.5/drivers/ide/pci/ns87415.c Sat Oct 19 18:49:30 2002 @@ -25,6 +25,10 @@ #include +#if defined(__hppa__) && defined(CONFIG_SUPERIO) +#include +#endif + #include "ns87415.h" static unsigned int ns87415_count = 0, ns87415_control[MAX_HWIFS] = { 0 }; @@ -202,7 +206,11 @@ static void __init init_hwif_ns87415 (id } if (!using_inta) +#if defined(__hppa__) && defined(CONFIG_SUPERIO) + hwif->irq = superio_get_ide_irq(); /* legacy mode */ +#else hwif->irq = hwif->channel ? 15 : 14; /* legacy mode */ +#endif else if (!hwif->irq && hwif->mate && hwif->mate->irq) hwif->irq = hwif->mate->irq; /* share IRQ with mate */ only in patch2: --- linus-2.5/drivers/net/tulip/media.c Thu Oct 31 17:35:28 2002 +++ parisc-2.5/drivers/net/tulip/media.c Thu Oct 31 17:39:35 2002 @@ -271,13 +271,27 @@ void tulip_select_media(struct net_devic int reset_length = p[2 + init_length]; misc_info = (u16*)(reset_sequence + reset_length); if (startup) { + int timeout = 20; /* 2 ms */ outl(mtable->csr12dir | 0x100, ioaddr + CSR12); for (i = 0; i < reset_length; i++) outl(reset_sequence[i], ioaddr + CSR12); + + /* flush posted writes */ + inl(ioaddr + CSR12); + /* Sect 3.10.3 in DP83840A.pdf (p39) */ + udelay(500); + + /* Section 4.2 in DP83840A.pdf (p43) */ + while (timeout-- && + (tulip_mdio_read (dev, phy_num, MII_BMCR) & BMCR_RESET)) + udelay(100); } for (i = 0; i < init_length; i++) outl(init_sequence[i], ioaddr + CSR12); + + inl(ioaddr + CSR12); /* flush posted writes */ } + tmp_info = get_u16(&misc_info[1]); if (tmp_info) tp->advertising[phy_num] = tmp_info | 1; only in patch2: --- linus-2.5/drivers/pci/setup-bus.c Thu Jul 18 09:53:21 2002 +++ parisc-2.5/drivers/pci/setup-bus.c Sun Sep 1 00:41:16 2002 @@ -58,12 +58,14 @@ pbus_assign_resources_sorted(struct pci_ if (class == PCI_CLASS_DISPLAY_VGA || class == PCI_CLASS_NOT_DEFINED_VGA) found_vga = 1; +#ifndef __hppa__ else if (class >> 8 != PCI_BASE_CLASS_BRIDGE) { pci_read_config_word(dev, PCI_COMMAND, &cmd); cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); pci_write_config_word(dev, PCI_COMMAND, cmd); } +#endif pdev_sort_resources(dev, &head); } only in patch2: --- linus-2.5/drivers/serial/8250.c Fri Oct 18 08:23:25 2002 +++ parisc-2.5/drivers/serial/8250.c Sat Nov 2 15:50:42 2002 @@ -445,7 +445,7 @@ static void autoconfig(struct uart_8250_ DEBUG_AUTOCONF("Testing ttyS%d (0x%04x, 0x%08lx)...\n", up->port.line, up->port.iobase, up->port.membase); - if (!up->port.iobase && !up->port.membase) + if (!up->port.iobase && !up->port.mapbase && !up->port.membase) return; /* @@ -1875,6 +1875,7 @@ static int __register_serial(struct seri struct uart_port port; port.iobase = req->port; + port.mapbase = req->iomap_base; port.membase = req->iomem_base; port.irq = req->irq; port.uartclk = req->baud_base * 16; only in patch2: --- linus-2.5/drivers/serial/8250_pci.c Fri Oct 18 08:23:25 2002 +++ parisc-2.5/drivers/serial/8250_pci.c Sat Nov 2 15:50:42 2002 @@ -172,6 +172,7 @@ get_pci_port(struct pci_dev *dev, struct return 0; } req->io_type = SERIAL_IO_MEM; + req->iomap_base = port; req->iomem_base = ioremap(port, board->uart_offset); if (req->iomem_base == NULL) return -ENOMEM; @@ -1184,7 +1185,14 @@ static struct pci_driver serial_pci_driv static int __init serial8250_pci_init(void) { - return pci_module_init(&serial_pci_driver); + int ret; + ret = pci_module_init(&serial_pci_driver); + +#if defined(__hppa__) && defined(CONFIG_SERIAL_8250_CONSOLE) + serial8250_console_init(); +#endif + + return ret; } static void __exit serial8250_pci_exit(void) only in patch2: --- linus-2.5/drivers/serial/Kconfig Thu Oct 31 10:28:00 2002 +++ parisc-2.5/drivers/serial/Kconfig Thu Oct 31 16:30:15 2002 @@ -317,6 +317,21 @@ config SERIAL_SUNSU mouse on (PCI) UltraSPARC systems. Say Y or M if you want to be able to these serial ports. +config PDC_CONSOLE + bool "PDC software console support" + depends on PARISC + help + Saying Y here will enable the software based PDC console to be + used as the system console. This is useful for machines in + which the hardware based console has not been written yet. The + following steps must be competed to use the PDC console: + + 1. create the device entry (mknod /dev/ttyB0 c 60 0) + 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0 + 3. Add device ttyB0 to /etc/securetty (if you want to log on as + root on this console.) + 4. Change the kernel command console parameter to: console=ttyB0 + config SERIAL_SUNSAB tristate "Sun Siemens SAB82532 serial support" depends on (SPARC32 || SPARC64) && PCI only in patch2: --- linus-2.5/drivers/serial/core.c Fri Oct 18 08:23:25 2002 +++ parisc-2.5/drivers/serial/core.c Sat Nov 2 15:50:42 2002 @@ -1860,8 +1860,13 @@ void __init uart_console_init(void) sa1100_rs_console_init(); #endif #ifdef CONFIG_SERIAL_8250_CONSOLE + /* HACK: this hack (together with stuff in 8250_pci.c + * are needed to get pci serial console working + */ +#ifndef __hppa__ serial8250_console_init(); #endif +#endif #ifdef CONFIG_SERIAL_UART00_CONSOLE uart00_console_init(); #endif @@ -2012,7 +2017,7 @@ __uart_register_port(struct uart_driver /* * If there isn't a port here, don't do anything further. */ - if (!port->iobase && !port->mapbase) + if (!port->iobase && !port->mapbase && !port->membase) return; /* @@ -2407,6 +2412,7 @@ int uart_register_port(struct uart_drive } state->port->iobase = port->iobase; + state->port->mapbase = port->mapbase; state->port->membase = port->membase; state->port->irq = port->irq; state->port->uartclk = port->uartclk; only in patch2: --- linus-2.5/include/linux/console.h Thu Jul 18 09:54:17 2002 +++ parisc-2.5/include/linux/console.h Thu Oct 31 17:40:36 2002 @@ -90,6 +90,7 @@ extern struct console_cmdline console_li #define CON_PRINTBUFFER (1) #define CON_CONSDEV (2) /* Last on the command line */ #define CON_ENABLED (4) +#define CON_BOOT (8) struct console { only in patch2: --- linus-2.5/include/linux/kernel_stat.h Tue Oct 8 10:54:13 2002 +++ parisc-2.5/include/linux/kernel_stat.h Thu Oct 31 17:40:37 2002 @@ -26,7 +26,9 @@ struct kernel_stat { unsigned int dk_drive_wio[DK_MAX_MAJOR][DK_MAX_DISK]; unsigned int dk_drive_rblk[DK_MAX_MAJOR][DK_MAX_DISK]; unsigned int dk_drive_wblk[DK_MAX_MAJOR][DK_MAX_DISK]; -#if !defined(CONFIG_ARCH_S390) +#if defined(CONFIG_PARISC) + unsigned int irqs[NR_CPUS][NR_IRQ_REGS][IRQ_PER_REGION]; +#elif !defined(CONFIG_ARCH_S390) unsigned int irqs[NR_CPUS][NR_IRQS]; #endif }; @@ -51,7 +53,11 @@ static inline int kstat_irqs (int irq) int i, sum=0; for (i = 0 ; i < NR_CPUS ; i++) +#ifdef CONFIG_PARISC + sum += kstat.irqs[i][IRQ_REGION(irq)][IRQ_OFFSET(irq)]; +#else sum += kstat.irqs[i][irq]; +#endif return sum; } only in patch2: --- linus-2.5/include/linux/major.h Thu Oct 31 17:36:47 2002 +++ parisc-2.5/include/linux/major.h Thu Oct 31 17:40:38 2002 @@ -33,6 +33,7 @@ #define MD_MAJOR 9 #define MISC_MAJOR 10 #define SCSI_CDROM_MAJOR 11 +#define PDCCONS_MAJOR 11 /* PA-RISC only */ #define QIC02_TAPE_MAJOR 12 #define XT_DISK_MAJOR 13 #define SOUND_MAJOR 14 only in patch2: --- linus-2.5/include/linux/serial.h Tue Oct 8 10:54:17 2002 +++ parisc-2.5/include/linux/serial.h Sat Nov 2 15:51:12 2002 @@ -45,6 +45,7 @@ struct serial_struct { int hub6; unsigned short closing_wait; /* time to wait before closing */ unsigned short closing_wait2; /* no longer used... */ + unsigned long iomap_base; unsigned char *iomem_base; unsigned short iomem_reg_shift; unsigned int port_high; only in patch2: --- linus-2.5/kernel/printk.c Fri Oct 18 08:24:13 2002 +++ parisc-2.5/kernel/printk.c Thu Oct 31 17:40:43 2002 @@ -86,8 +86,8 @@ static char log_buf[LOG_BUF_LEN]; * must be masked before subscripting */ static unsigned long log_start; /* Index into log_buf: next char to be read by syslog() */ -static unsigned long con_start; /* Index into log_buf: next char to be sent to consoles */ -static unsigned long log_end; /* Index into log_buf: most-recently-written-char + 1 */ +unsigned long con_start; /* Index into log_buf: next char to be sent to consoles */ +unsigned long log_end; /* Index into log_buf: most-recently-written-char + 1 */ static unsigned long logged_chars; /* Number of chars produced since last read+clear operation */ struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES]; @@ -636,6 +636,11 @@ void register_console(struct console * c if (!(console->flags & CON_ENABLED)) return; + + if (console_drivers && (console_drivers->flags & CON_BOOT)) { + unregister_console(console_drivers); + console->flags &= ~CON_PRINTBUFFER; + } /* * Put this console in the list - keep the