diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/arch/ia64/Kconfig 002-2.6.0-ia64.patch/arch/ia64/Kconfig
--- 000-virgin/arch/ia64/Kconfig	Wed Feb 18 10:28:10 2004
+++ 002-2.6.0-ia64.patch/arch/ia64/Kconfig	Wed Feb 18 10:32:41 2004
@@ -613,6 +613,33 @@ config MAGIC_SYSRQ
 	  keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
 	  unless you really know what this hack does.
 
+config IA64_EARLY_PRINTK
+	bool "Early printk support"
+	depends on DEBUG_KERNEL && !IA64_GENERIC
+	help
+	  Selecting this option uses the VGA screen or serial console for
+	  printk() output before the consoles are initialised.  It is useful
+	  for debugging problems early in the boot process, but only if you
+	  have a suitable VGA/serial console attached.  If you're unsure,
+	  select N.
+
+config IA64_EARLY_PRINTK_UART
+	bool "Early printk on MMIO serial port"
+	depends on IA64_EARLY_PRINTK
+
+config IA64_EARLY_PRINTK_UART_BASE
+	hex "UART MMIO base address"
+	depends on IA64_EARLY_PRINTK_UART
+	default "ff5e0000"
+
+config IA64_EARLY_PRINTK_VGA
+	bool "Early printk on VGA"
+	depends on IA64_EARLY_PRINTK
+
+config IA64_EARLY_PRINTK_SGI_SN
+	bool "Early printk on SGI SN serial console"
+	depends on IA64_EARLY_PRINTK && (IA64_GENERIC || IA64_SGI_SN2)
+
 config DEBUG_SLAB
 	bool "Debug memory allocations"
 	depends on DEBUG_KERNEL
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/media/radio/Makefile 002-2.6.0-ia64.patch/drivers/media/radio/Makefile
--- 000-virgin/drivers/media/radio/Makefile	Wed Feb 18 10:28:11 2004
+++ 002-2.6.0-ia64.patch/drivers/media/radio/Makefile	Wed Feb 18 10:32:41 2004
@@ -2,6 +2,8 @@
 # Makefile for the kernel character device drivers.
 #
 
+obj-y		:= dummy.o
+
 miropcm20-objs	:= miropcm20-rds-core.o miropcm20-radio.o
 
 obj-$(CONFIG_RADIO_AZTECH) += radio-aztech.o
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/media/radio/dummy.c 002-2.6.0-ia64.patch/drivers/media/radio/dummy.c
--- 000-virgin/drivers/media/radio/dummy.c	Wed Dec 31 16:00:00 1969
+++ 002-2.6.0-ia64.patch/drivers/media/radio/dummy.c	Wed Feb 18 10:32:41 2004
@@ -0,0 +1 @@
+/* just so the linker knows what kind of object files it's deadling with... */
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/media/video/Makefile 002-2.6.0-ia64.patch/drivers/media/video/Makefile
--- 000-virgin/drivers/media/video/Makefile	Tue Feb 17 19:57:26 2004
+++ 002-2.6.0-ia64.patch/drivers/media/video/Makefile	Wed Feb 18 10:32:41 2004
@@ -7,6 +7,7 @@ bttv-objs	:=	bttv-driver.o bttv-cards.o 
 zoran-objs      :=	zr36120.o zr36120_i2c.o zr36120_mem.o
 zr36067-objs	:=	zoran_procfs.o zoran_device.o \
 			zoran_driver.o zoran_card.o
+obj-y		:=	dummy.o
 
 obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o v4l1-compat.o
 
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/media/video/dummy.c 002-2.6.0-ia64.patch/drivers/media/video/dummy.c
--- 000-virgin/drivers/media/video/dummy.c	Wed Dec 31 16:00:00 1969
+++ 002-2.6.0-ia64.patch/drivers/media/video/dummy.c	Wed Feb 18 10:32:41 2004
@@ -0,0 +1 @@
+/* just so the linker knows what kind of object files it's deadling with... */
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/net/tulip/media.c 002-2.6.0-ia64.patch/drivers/net/tulip/media.c
--- 000-virgin/drivers/net/tulip/media.c	Tue Feb 17 19:57:20 2004
+++ 002-2.6.0-ia64.patch/drivers/net/tulip/media.c	Wed Feb 18 10:32:41 2004
@@ -278,6 +278,10 @@ void tulip_select_media(struct net_devic
 				for (i = 0; i < init_length; i++)
 					outl(init_sequence[i], ioaddr + CSR12);
 			}
+
+			(void) inl(ioaddr + CSR6); /* flush CSR12 writes */
+			udelay(500);		/* Give MII time to recover */
+
 			tmp_info = get_u16(&misc_info[1]);
 			if (tmp_info)
 				tp->advertising[phy_num] = tmp_info | 1;
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/serial/serial_core.c 002-2.6.0-ia64.patch/drivers/serial/serial_core.c
--- 000-virgin/drivers/serial/serial_core.c	Wed Feb 18 10:28:11 2004
+++ 002-2.6.0-ia64.patch/drivers/serial/serial_core.c	Wed Feb 18 10:32:41 2004
@@ -1874,6 +1874,9 @@ uart_set_options(struct uart_port *port,
 	if (!port->ops)
 		return 0;	/* "console=" on ia64 */
 
+	if (!port->ops)
+		return 0;
+
 	port->ops->set_termios(port, &termios, NULL);
 	co->cflag = termios.c_cflag;
 
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/drivers/usb/serial/ipaq.c 002-2.6.0-ia64.patch/drivers/usb/serial/ipaq.c
--- 000-virgin/drivers/usb/serial/ipaq.c	Tue Feb 17 19:59:14 2004
+++ 002-2.6.0-ia64.patch/drivers/usb/serial/ipaq.c	Wed Feb 18 10:32:41 2004
@@ -222,7 +222,7 @@ static int ipaq_open(struct usb_serial_p
 	 * discipline instead of queueing.
 	 */
 
-	port->tty->low_latency = 1;
+	port->tty->low_latency = 0;
 	port->tty->raw = 1;
 	port->tty->real_raw = 1;
 
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/include/linux/nfs_fs.h 002-2.6.0-ia64.patch/include/linux/nfs_fs.h
--- 000-virgin/include/linux/nfs_fs.h	Wed Feb 18 10:28:12 2004
+++ 002-2.6.0-ia64.patch/include/linux/nfs_fs.h	Wed Feb 18 10:32:41 2004
@@ -449,7 +449,7 @@ static inline loff_t
 nfs_size_to_loff_t(__u64 size)
 {
 	loff_t maxsz = (((loff_t) ULONG_MAX) << PAGE_CACHE_SHIFT) + PAGE_CACHE_SIZE - 1;
-	if (size > maxsz)
+	if (size > (__u64) maxsz)
 		return maxsz;
 	return (loff_t) size;
 }
diff -Naurp -X /home/jbarnes/dontdiff 000-virgin/kernel/printk.c 002-2.6.0-ia64.patch/kernel/printk.c
--- 000-virgin/kernel/printk.c	Wed Feb 18 10:28:12 2004
+++ 002-2.6.0-ia64.patch/kernel/printk.c	Wed Feb 18 10:32:41 2004
@@ -402,6 +402,12 @@ static void _call_console_drivers(unsign
 			__call_console_drivers(start, end);
 		}
 	}
+#ifdef CONFIG_IA64_EARLY_PRINTK
+	if (!console_drivers) {
+		void early_printk (const char *str, size_t len);
+		early_printk(&LOG_BUF(start), end - start);
+	}
+#endif
 }
 
 /*
@@ -730,7 +736,11 @@ void register_console(struct console * c
 		 * for us.
 		 */
 		spin_lock_irqsave(&logbuf_lock, flags);
+#ifdef CONFIG_IA64_EARLY_PRINTK
+		con_start = log_end;
+#else
 		con_start = log_start;
+#endif
 		spin_unlock_irqrestore(&logbuf_lock, flags);
 	}
 	release_console_sem();
@@ -832,3 +842,117 @@ int printk_ratelimit(void)
 				printk_ratelimit_burst);
 }
 EXPORT_SYMBOL(printk_ratelimit);
+
+#ifdef CONFIG_IA64_EARLY_PRINTK
+
+#include <asm/io.h>
+
+# ifdef CONFIG_IA64_EARLY_PRINTK_VGA
+
+
+#define VGABASE		((char *)0xc0000000000b8000)
+#define VGALINES	24
+#define VGACOLS		80
+
+static int current_ypos = VGALINES, current_xpos = 0;
+
+static void
+early_printk_vga (const char *str, size_t len)
+{
+	char c;
+	int  i, k, j;
+
+	while (len-- > 0) {
+		c = *str++;
+		if (current_ypos >= VGALINES) {
+			/* scroll 1 line up */
+			for (k = 1, j = 0; k < VGALINES; k++, j++) {
+				for (i = 0; i < VGACOLS; i++) {
+					writew(readw(VGABASE + 2*(VGACOLS*k + i)),
+					       VGABASE + 2*(VGACOLS*j + i));
+				}
+			}
+			for (i = 0; i < VGACOLS; i++) {
+				writew(0x720, VGABASE + 2*(VGACOLS*j + i));
+			}
+			current_ypos = VGALINES-1;
+		}
+		if (c == '\n') {
+			current_xpos = 0;
+			current_ypos++;
+		} else if (c != '\r')  {
+			writew(((0x7 << 8) | (unsigned short) c),
+			       VGABASE + 2*(VGACOLS*current_ypos + current_xpos++));
+			if (current_xpos >= VGACOLS) {
+				current_xpos = 0;
+				current_ypos++;
+			}
+		}
+	}
+}
+
+# endif /* CONFIG_IA64_EARLY_PRINTK_VGA */
+
+# ifdef CONFIG_IA64_EARLY_PRINTK_UART
+
+#include <linux/serial_reg.h>
+#include <asm/system.h>
+
+static void early_printk_uart(const char *str, size_t len)
+{
+	static char *uart = NULL;
+	unsigned long uart_base;
+	char c;
+
+	if (!uart) {
+		uart_base = 0;
+#  ifdef CONFIG_SERIAL_8250_HCDP
+		{
+			extern unsigned long hcdp_early_uart(void);
+			uart_base = hcdp_early_uart();
+		}
+#  endif
+#  if CONFIG_IA64_EARLY_PRINTK_UART_BASE
+		if (!uart_base)
+			uart_base = CONFIG_IA64_EARLY_PRINTK_UART_BASE;
+#  endif
+		if (!uart_base)
+			return;
+
+		uart = ioremap(uart_base, 64);
+		if (!uart)
+			return;
+	}
+
+	while (len-- > 0) {
+		c = *str++;
+		while ((readb(uart + UART_LSR) & UART_LSR_TEMT) == 0)
+			cpu_relax(); /* spin */
+
+		writeb(c, uart + UART_TX);
+
+		if (c == '\n')
+			writeb('\r', uart + UART_TX);
+	}
+}
+
+# endif /* CONFIG_IA64_EARLY_PRINTK_UART */
+
+#ifdef CONFIG_IA64_EARLY_PRINTK_SGI_SN
+extern int early_printk_sn_sal(const char *str, int len);
+#endif
+
+void early_printk(const char *str, size_t len)
+{
+#ifdef CONFIG_IA64_EARLY_PRINTK_UART
+	early_printk_uart(str, len);
+#endif
+#ifdef CONFIG_IA64_EARLY_PRINTK_VGA
+	early_printk_vga(str, len);
+#endif
+#ifdef CONFIG_IA64_EARLY_PRINTK_SGI_SN
+ 	early_printk_sn_sal(str, len);
+#endif
+}
+
+#endif /* CONFIG_IA64_EARLY_PRINTK */
