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 <asm/io.h>
 
+#if defined(__hppa__) && defined(CONFIG_SUPERIO)
+#include <asm/superio.h>
+#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
