From c0171a10805352b44e314beb04e3c485202ff693 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Thu, 4 May 2006 22:45:27 +0000 Subject: [PATCH] Fix zImage target, now really build valid images SVN-Revision: 3729 --- .../linux/au1000-2.6/patches/003-zImage.patch | 2797 +++++++++-------- 1 file changed, 1406 insertions(+), 1391 deletions(-) diff --git a/openwrt/target/linux/au1000-2.6/patches/003-zImage.patch b/openwrt/target/linux/au1000-2.6/patches/003-zImage.patch index 6c2230f8c9..685b8548a8 100644 --- a/openwrt/target/linux/au1000-2.6/patches/003-zImage.patch +++ b/openwrt/target/linux/au1000-2.6/patches/003-zImage.patch @@ -1,7 +1,1404 @@ +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/head.S linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/head.S +--- linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/head.S 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/head.S 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,119 @@ ++/* ++ * arch/mips/kernel/head.S ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ * Copyright (C) 1994, 1995 Waldorf Electronics ++ * Written by Ralf Baechle and Andreas Busse ++ * Copyright (C) 1995 - 1999 Ralf Baechle ++ * Copyright (C) 1996 Paul M. Antoine ++ * Modified for DECStation and hence R3000 support by Paul M. Antoine ++ * Further modifications by David S. Miller and Harald Koerfgen ++ * Copyright (C) 1999 Silicon Graphics, Inc. ++ * ++ * Head.S contains the MIPS exception handler and startup code. ++ * ++ ************************************************************************** ++ * 9 Nov, 2000. ++ * Added Cache Error exception handler and SBDDP EJTAG debug exception. ++ * ++ * Kevin Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com ++ * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. ++ ************************************************************************** ++ */ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define IndexInvalidate_I 0x00 ++#define IndexWriteBack_D 0x01 ++ ++ .set noreorder ++ .cprestore ++ LEAF(start) ++start: ++ bal locate ++ nop ++locate: ++ subu s8, ra, 8 /* Where we were loaded */ ++ la sp, (.stack + 8192) ++ ++ move s0, a0 /* Save boot rom start args */ ++ move s1, a1 ++ move s2, a2 ++ move s3, a3 ++ ++ la a0, start /* Where we were linked to run */ ++ ++ move a1, s8 ++ la a2, _edata ++ subu t1, a2, a0 ++ srl t1, t1, 2 ++ ++ /* copy text section */ ++ li t0, 0 ++1: lw v0, 0(a1) ++ nop ++ sw v0, 0(a0) ++ xor t0, t0, v0 ++ addu a0, 4 ++ bne a2, a0, 1b ++ addu a1, 4 ++ ++ /* Clear BSS */ ++ la a0, _edata ++ la a2, _end ++2: sw zero, 0(a0) ++ bne a2, a0, 2b ++ addu a0, 4 ++ ++ /* push the D-Cache and invalidate I-Cache */ ++ li k0, 0x80000000 # start address ++ li k1, 0x80004000 # end address (16KB I-Cache) ++ subu k1, 128 ++ ++1: ++ .set mips3 ++ cache IndexWriteBack_D, 0(k0) ++ cache IndexWriteBack_D, 32(k0) ++ cache IndexWriteBack_D, 64(k0) ++ cache IndexWriteBack_D, 96(k0) ++ cache IndexInvalidate_I, 0(k0) ++ cache IndexInvalidate_I, 32(k0) ++ cache IndexInvalidate_I, 64(k0) ++ cache IndexInvalidate_I, 96(k0) ++ .set mips0 ++ ++ bne k0, k1, 1b ++ addu k0, k0, 128 ++ /* done */ ++ ++ move a0, s8 /* load address */ ++ move a1, t1 /* length in words */ ++ move a2, t0 /* checksum */ ++ move a3, sp ++ ++ la ra, 1f ++ la k0, decompress_kernel ++ jr k0 ++ nop ++1: ++ ++ move a0, s0 ++ move a1, s1 ++ move a2, s2 ++ move a3, s3 ++ li k0, KERNEL_ENTRY ++ jr k0 ++ nop ++3: ++ b 3b ++ END(start) ++ .comm .stack,4096*2,4 +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/Makefile +--- linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,110 @@ ++# arch/mips/boot/compressed/au1xxx/Makefile ++# ++# Makefile for AMD Alchemy Semiconductor Au1x based boards. ++# All of the boot loader code was derived from the ppc ++# boot code. ++# ++# Copyright 2001,2002 MontaVista Software Inc. ++# ++# Author: Mark A. Greer ++# mgreer@mvista.com ++# ++# Copyright 2004 Embedded Alley Solutions, Inc ++# Ported and modified for mips 2.6 support by ++# Pete Popov ++# ++# This program is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License as published by the ++# Free Software Foundation; either version 2 of the License, or (at your ++# option) any later version. ++ ++boot := arch/mips/boot ++compressed := $(boot)/compressed ++utils := $(compressed)/utils ++lib := $(compressed)/lib ++images := $(compressed)/images ++common := $(compressed)/common ++ ++######################################################################### ++# START BOARD SPECIFIC VARIABLES ++ ++# These two variables control where the zImage is stored ++# in flash and loaded in memory. It only controls how the srec ++# file is generated, the code is the same. ++RAM_RUN_ADDR = 0x81000000 ++ ++ifdef CONFIG_MIPS_XXS1500 ++FLASH_LOAD_ADDR = 0xBF000000 ++else ++FLASH_LOAD_ADDR = 0xBFD00000 ++endif ++ ++# These two variables specify the free ram region ++# that can be used for temporary malloc area ++AVAIL_RAM_START=0x80500000 ++AVAIL_RAM_END=0x80900000 ++ ++# This one must match the LOADADDR in arch/mips/Makefile! ++LOADADDR=0x80100000 ++ ++# WARNING WARNING WARNING ++# Note that with a LOADADDR of 0x80100000 and AVAIL_RAM_START of ++# 0x80500000, the max decompressed kernel size can be 4MB. Else we ++# start overwriting ourselve. You can change these vars as needed; ++# it would be much better if we just figured everything out on the fly. ++ ++# END BOARD SPECIFIC VARIABLES ++######################################################################### ++ ++OBJECTS := $(obj)/head.o $(common)/misc-common.o $(common)/misc-simple.o \ ++ $(common)/au1k_uart.o ++LIBS := $(lib)/lib.a ++ ++ENTRY := $(utils)/entry ++OFFSET := $(utils)/offset ++SIZE := $(utils)/size ++ ++LD_ARGS := -T $(compressed)/ld.script -Ttext $(RAM_RUN_ADDR) -Bstatic ++ ++ifdef CONFIG_CPU_LITTLE_ENDIAN ++OBJCOPY_ARGS = -O elf32-tradlittlemips ++else ++OBJCOPY_ARGS = -O elf32-tradbigmips ++endif ++ ++$(obj)/head.o: $(obj)/head.S $(TOPDIR)/vmlinux ++ $(CC) -I $(TOPDIR)/include $(AFLAGS) \ ++ -DKERNEL_ENTRY=$(shell sh $(ENTRY) $(NM) $(TOPDIR)/vmlinux ) \ ++ -c -o $*.o $< ++ ++$(common)/misc-simple.o: ++ $(CC) -I $(TOPDIR)/include $(CFLAGS) -DINITRD_OFFSET=0 -DINITRD_SIZE=0 -DZIMAGE_OFFSET=0 \ ++ -DAVAIL_RAM_START=$(AVAIL_RAM_START) \ ++ -DAVAIL_RAM_END=$(AVAIL_RAM_END) \ ++ -DLOADADDR=$(LOADADDR) \ ++ -DZIMAGE_SIZE=0 -c -o $@ $*.c ++ ++$(obj)/zvmlinux: $(OBJECTS) $(LIBS) $(srctree)/$(compressed)/ld.script $(images)/vmlinux.gz $(common)/dummy.o ++ $(OBJCOPY) \ ++ --add-section=.image=$(images)/vmlinux.gz \ ++ --set-section-flags=.image=contents,alloc,load,readonly,data \ ++ $(common)/dummy.o $(common)/image.o ++ $(LD) $(LD_ARGS) -o $@ $(OBJECTS) $(common)/image.o $(LIBS) ++ $(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R __kcrctab -R __ksymtab_strings \ ++ -R .comment -R .stab -R .stabstr -R .initrd -R .sysmap ++ ++# Here we manipulate the image in order to get it the necessary ++# srecord file we need. ++zImage: $(obj)/zvmlinux ++ mv $(obj)/zvmlinux $(images)/zImage ++ $(OBJCOPY) -O srec $(images)/zImage $(images)/zImage.srec ++ $(OBJCOPY) -O binary $(images)/zImage $(images)/zImage.bin ++ ++zImage.flash: zImage ++ ( \ ++ flash=${FLASH_LOAD_ADDR} ; \ ++ ram=${RAM_RUN_ADDR} ; \ ++ adjust=$$[ $$flash - $$ram ] ; \ ++ $(OBJCOPY) -O srec --adjust-vma `printf '0x%08x' $$adjust` \ ++ $(images)/zImage $(images)/zImage.flash.srec ; \ ++ ) +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/au1k_uart.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/au1k_uart.c +--- linux-2.6.16.7/arch/mips/boot/compressed/common/au1k_uart.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/au1k_uart.c 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* ++ * BRIEF MODULE DESCRIPTION ++ * Simple Au1000 uart routines. ++ * ++ * Copyright 2001 MontaVista Software Inc. ++ * Author: MontaVista Software, Inc. ++ * ppopov@mvista.com or source@mvista.com ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED ++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN ++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++#include ++#include ++#include ++#include "ns16550.h" ++ ++typedef unsigned char uint8; ++typedef unsigned int uint32; ++ ++#define UART16550_BAUD_2400 2400 ++#define UART16550_BAUD_4800 4800 ++#define UART16550_BAUD_9600 9600 ++#define UART16550_BAUD_19200 19200 ++#define UART16550_BAUD_38400 38400 ++#define UART16550_BAUD_57600 57600 ++#define UART16550_BAUD_115200 115200 ++ ++#define UART16550_PARITY_NONE 0 ++#define UART16550_PARITY_ODD 0x08 ++#define UART16550_PARITY_EVEN 0x18 ++#define UART16550_PARITY_MARK 0x28 ++#define UART16550_PARITY_SPACE 0x38 ++ ++#define UART16550_DATA_5BIT 0x0 ++#define UART16550_DATA_6BIT 0x1 ++#define UART16550_DATA_7BIT 0x2 ++#define UART16550_DATA_8BIT 0x3 ++ ++#define UART16550_STOP_1BIT 0x0 ++#define UART16550_STOP_2BIT 0x4 ++ ++/* It would be nice if we had a better way to do this. ++ * It could be a variable defined in one of the board specific files. ++ */ ++#undef UART_BASE ++#ifdef CONFIG_COGENT_CSB250 ++#define UART_BASE UART3_ADDR ++#else ++#define UART_BASE UART0_ADDR ++#endif ++ ++/* memory-mapped read/write of the port */ ++#define UART16550_READ(y) (au_readl(UART_BASE + y) & 0xff) ++#define UART16550_WRITE(y,z) (au_writel(z&0xff, UART_BASE + y)) ++ ++/* ++ * We use uart 0, which is already initialized by ++ * yamon. ++ */ ++volatile struct NS16550 * ++serial_init(int chan) ++{ ++ volatile struct NS16550 *com_port; ++ com_port = (struct NS16550 *) UART_BASE; ++ return (com_port); ++} ++ ++void ++serial_putc(volatile struct NS16550 *com_port, unsigned char c) ++{ ++ while ((UART16550_READ(UART_LSR)&0x40) == 0); ++ UART16550_WRITE(UART_TX, c); ++} ++ ++unsigned char ++serial_getc(volatile struct NS16550 *com_port) ++{ ++ while((UART16550_READ(UART_LSR) & 0x1) == 0); ++ return UART16550_READ(UART_RX); ++} ++ ++int ++serial_tstc(volatile struct NS16550 *com_port) ++{ ++ return((UART16550_READ(UART_LSR) & LSR_DR) != 0); ++} +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/dummy.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/dummy.c +--- linux-2.6.16.7/arch/mips/boot/compressed/common/dummy.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/dummy.c 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,4 @@ ++int main(void) ++{ ++ return 0; ++} +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/common/Makefile +--- linux-2.6.16.7/arch/mips/boot/compressed/common/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,14 @@ ++# ++# arch/mips/boot/compressed/common/Makefile ++# ++# This file is subject to the terms and conditions of the GNU General Public ++# License. See the file "COPYING" in the main directory of this archive ++# for more details. ++# ++# Tom Rini January 2001 ++# ++# Pete Popov, 2004 ++# ++ ++lib-y := misc-common.o no_initrd.o dummy.o ++lib-$(CONFIG_SOC_AU1X00) += au1k_uart.o +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/misc-common.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-common.c +--- linux-2.6.16.7/arch/mips/boot/compressed/common/misc-common.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-common.c 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,434 @@ ++/* ++ * arch/mips/boot/compressed/common/misc-common.c ++ * ++ * Misc. bootloader code (almost) all platforms can use ++ * ++ * Author: Johnnie Peters ++ * Editor: Tom Rini ++ * ++ * Derived from arch/ppc/boot/prep/misc.c ++ * ++ * Ported by Pete Popov to ++ * support mips board(s). I also got rid of the vga console ++ * code. ++ * ++ * Copyright 2000-2001 MontaVista Software Inc. ++ * ++ * Ported to MIPS 2.6 by Pete Popov, ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED ++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN ++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include /* for va_ bits */ ++#include ++#include ++#include ++ ++extern char *avail_ram; ++extern char *end_avail; ++extern char _end[]; ++ ++void puts(const char *); ++void putc(const char c); ++void puthex(unsigned long val); ++void _bcopy(char *src, char *dst, int len); ++void gunzip(void *, int, unsigned char *, int *); ++static int _cvt(unsigned long val, char *buf, long radix, char *digits); ++ ++void _vprintk(void(*)(const char), const char *, va_list ap); ++ ++struct NS16550 *com_port; ++ ++int serial_tstc(volatile struct NS16550 *); ++unsigned char serial_getc(volatile struct NS16550 *); ++void serial_putc(volatile struct NS16550 *, unsigned char); ++ ++void pause(void) ++{ ++ puts("pause\n"); ++} ++ ++void exit(void) ++{ ++ puts("exit\n"); ++ while(1); ++} ++ ++int tstc(void) ++{ ++ return (serial_tstc(com_port)); ++} ++ ++int getc(void) ++{ ++ while (1) { ++ if (serial_tstc(com_port)) ++ return (serial_getc(com_port)); ++ } ++} ++ ++void ++putc(const char c) ++{ ++ serial_putc(com_port, c); ++ if ( c == '\n' ) ++ serial_putc(com_port, '\r'); ++} ++ ++void puts(const char *s) ++{ ++ char c; ++ while ( ( c = *s++ ) != '\0' ) { ++ serial_putc(com_port, c); ++ if ( c == '\n' ) serial_putc(com_port, '\r'); ++ } ++} ++ ++void error(char *x) ++{ ++ puts("\n\n"); ++ puts(x); ++ puts("\n\n -- System halted"); ++ ++ while(1); /* Halt */ ++} ++ ++static void *zalloc(unsigned size) ++{ ++ void *p = avail_ram; ++ ++ size = (size + 7) & -8; ++ avail_ram += size; ++ if (avail_ram > end_avail) { ++ puts("oops... out of memory\n"); ++ pause(); ++ } ++ return p; ++} ++ ++ ++#define HEAD_CRC 2 ++#define EXTRA_FIELD 4 ++#define ORIG_NAME 8 ++#define COMMENT 0x10 ++#define RESERVED 0xe0 ++ ++#define DEFLATED 8 ++ ++void gunzip(void *dst, int dstlen, unsigned char *src, int *lenp) ++{ ++ z_stream s; ++ int r, i, flags; ++ ++ /* skip header */ ++ i = 10; ++ flags = src[3]; ++ if (src[2] != Z_DEFLATED || (flags & RESERVED) != 0) { ++ puts("bad gzipped data\n"); ++ exit(); ++ } ++ if ((flags & EXTRA_FIELD) != 0) ++ i = 12 + src[10] + (src[11] << 8); ++ if ((flags & ORIG_NAME) != 0) ++ while (src[i++] != 0) ++ ; ++ if ((flags & COMMENT) != 0) ++ while (src[i++] != 0) ++ ; ++ if ((flags & HEAD_CRC) != 0) ++ i += 2; ++ if (i >= *lenp) { ++ puts("gunzip: ran out of data in header\n"); ++ exit(); ++ } ++ ++ /* Initialize ourself. */ ++ s.workspace = zalloc(zlib_inflate_workspacesize()); ++ r = zlib_inflateInit2(&s, -MAX_WBITS); ++ if (r != Z_OK) { ++ puts("zlib_inflateInit2 returned "); puthex(r); puts("\n"); ++ exit(); ++ } ++ s.next_in = src + i; ++ s.avail_in = *lenp - i; ++ s.next_out = dst; ++ s.avail_out = dstlen; ++ r = zlib_inflate(&s, Z_FINISH); ++ if (r != Z_OK && r != Z_STREAM_END) { ++ puts("inflate returned "); puthex(r); puts("\n"); ++ exit(); ++ } ++ *lenp = s.next_out - (unsigned char *) dst; ++ zlib_inflateEnd(&s); ++} ++ ++void ++puthex(unsigned long val) ++{ ++ ++ unsigned char buf[10]; ++ int i; ++ for (i = 7; i >= 0; i--) ++ { ++ buf[i] = "0123456789ABCDEF"[val & 0x0F]; ++ val >>= 4; ++ } ++ buf[8] = '\0'; ++ puts(buf); ++} ++ ++#define FALSE 0 ++#define TRUE 1 ++ ++void ++_printk(char const *fmt, ...) ++{ ++ va_list ap; ++ ++ va_start(ap, fmt); ++ _vprintk(putc, fmt, ap); ++ va_end(ap); ++ return; ++} ++ ++#define is_digit(c) ((c >= '0') && (c <= '9')) ++ ++void ++_vprintk(void(*putc)(const char), const char *fmt0, va_list ap) ++{ ++ char c, sign, *cp = 0; ++ int left_prec, right_prec, zero_fill, length = 0, pad, pad_on_right; ++ char buf[32]; ++ long val; ++ while ((c = *fmt0++)) ++ { ++ if (c == '%') ++ { ++ c = *fmt0++; ++ left_prec = right_prec = pad_on_right = 0; ++ if (c == '-') ++ { ++ c = *fmt0++; ++ pad_on_right++; ++ } ++ if (c == '0') ++ { ++ zero_fill = TRUE; ++ c = *fmt0++; ++ } else ++ { ++ zero_fill = FALSE; ++ } ++ while (is_digit(c)) ++ { ++ left_prec = (left_prec * 10) + (c - '0'); ++ c = *fmt0++; ++ } ++ if (c == '.') ++ { ++ c = *fmt0++; ++ zero_fill++; ++ while (is_digit(c)) ++ { ++ right_prec = (right_prec * 10) + (c - '0'); ++ c = *fmt0++; ++ } ++ } else ++ { ++ right_prec = left_prec; ++ } ++ sign = '\0'; ++ switch (c) ++ { ++ case 'd': ++ case 'x': ++ case 'X': ++ val = va_arg(ap, long); ++ switch (c) ++ { ++ case 'd': ++ if (val < 0) ++ { ++ sign = '-'; ++ val = -val; ++ } ++ length = _cvt(val, buf, 10, "0123456789"); ++ break; ++ case 'x': ++ length = _cvt(val, buf, 16, "0123456789abcdef"); ++ break; ++ case 'X': ++ length = _cvt(val, buf, 16, "0123456789ABCDEF"); ++ break; ++ } ++ cp = buf; ++ break; ++ case 's': ++ cp = va_arg(ap, char *); ++ length = strlen(cp); ++ break; ++ case 'c': ++ c = va_arg(ap, long /*char*/); ++ (*putc)(c); ++ continue; ++ default: ++ (*putc)('?'); ++ } ++ pad = left_prec - length; ++ if (sign != '\0') ++ { ++ pad--; ++ } ++ if (zero_fill) ++ { ++ c = '0'; ++ if (sign != '\0') ++ { ++ (*putc)(sign); ++ sign = '\0'; ++ } ++ } else ++ { ++ c = ' '; ++ } ++ if (!pad_on_right) ++ { ++ while (pad-- > 0) ++ { ++ (*putc)(c); ++ } ++ } ++ if (sign != '\0') ++ { ++ (*putc)(sign); ++ } ++ while (length-- > 0) ++ { ++ (*putc)(c = *cp++); ++ if (c == '\n') ++ { ++ (*putc)('\r'); ++ } ++ } ++ if (pad_on_right) ++ { ++ while (pad-- > 0) ++ { ++ (*putc)(c); ++ } ++ } ++ } else ++ { ++ (*putc)(c); ++ if (c == '\n') ++ { ++ (*putc)('\r'); ++ } ++ } ++ } ++} ++ ++int ++_cvt(unsigned long val, char *buf, long radix, char *digits) ++{ ++ char temp[80]; ++ char *cp = temp; ++ int length = 0; ++ if (val == 0) ++ { /* Special case */ ++ *cp++ = '0'; ++ } else ++ while (val) ++ { ++ *cp++ = digits[val % radix]; ++ val /= radix; ++ } ++ while (cp != temp) ++ { ++ *buf++ = *--cp; ++ length++; ++ } ++ *buf = '\0'; ++ return (length); ++} ++ ++void ++_dump_buf_with_offset(unsigned char *p, int s, unsigned char *base) ++{ ++ int i, c; ++ if ((unsigned int)s > (unsigned int)p) ++ { ++ s = (unsigned int)s - (unsigned int)p; ++ } ++ while (s > 0) ++ { ++ if (base) ++ { ++ _printk("%06X: ", (int)p - (int)base); ++ } else ++ { ++ _printk("%06X: ", p); ++ } ++ for (i = 0; i < 16; i++) ++ { ++ if (i < s) ++ { ++ _printk("%02X", p[i] & 0xFF); ++ } else ++ { ++ _printk(" "); ++ } ++ if ((i % 2) == 1) _printk(" "); ++ if ((i % 8) == 7) _printk(" "); ++ } ++ _printk(" |"); ++ for (i = 0; i < 16; i++) ++ { ++ if (i < s) ++ { ++ c = p[i] & 0xFF; ++ if ((c < 0x20) || (c >= 0x7F)) c = '.'; ++ } else ++ { ++ c = ' '; ++ } ++ _printk("%c", c); ++ } ++ _printk("|\n"); ++ s -= 16; ++ p += 16; ++ } ++} ++ ++void ++_dump_buf(unsigned char *p, int s) ++{ ++ _printk("\n"); ++ _dump_buf_with_offset(p, s, 0); ++} ++ ++/* ++ * Local variables: ++ * c-indent-level: 8 ++ * c-basic-offset: 8 ++ * tab-width: 8 ++ * End: ++ */ +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/misc-simple.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-simple.c +--- linux-2.6.16.7/arch/mips/boot/compressed/common/misc-simple.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-simple.c 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,122 @@ ++/* ++ * arch/mips/zboot/common/misc-simple.c ++ * ++ * Misc. bootloader code for many machines. This assumes you have are using ++ * a 6xx/7xx/74xx CPU in your machine. This assumes the chunk of memory ++ * below 8MB is free. Finally, it assumes you have a NS16550-style uart for ++ * your serial console. If a machine meets these requirements, it can quite ++ * likely use this code during boot. ++ * ++ * Author: Matt Porter ++ * Derived from arch/ppc/boot/prep/misc.c ++ * ++ * Copyright 2001 MontaVista Software Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ */ ++ ++#include ++#include ++#include ++ ++#include ++ ++#include "linux/zlib.h" ++ ++extern struct NS16550 *com_port; ++ ++char *avail_ram; ++char *end_avail; ++extern char _end[]; ++char *zimage_start; ++ ++#ifdef CONFIG_CMDLINE ++#define CMDLINE CONFIG_CMDLINE ++#else ++#define CMDLINE "" ++#endif ++char cmd_preset[] = CMDLINE; ++char cmd_buf[256]; ++char *cmd_line = cmd_buf; ++ ++/* The linker tells us where the image is. ++*/ ++extern unsigned char __image_begin, __image_end; ++extern unsigned char __ramdisk_begin, __ramdisk_end; ++unsigned long initrd_size; ++ ++extern void puts(const char *); ++extern void putc(const char c); ++extern void puthex(unsigned long val); ++extern void *memcpy(void * __dest, __const void * __src, ++ __kernel_size_t __n); ++extern void gunzip(void *, int, unsigned char *, int *); ++extern void udelay(long delay); ++extern int tstc(void); ++extern int getc(void); ++extern volatile struct NS16550 *serial_init(int chan); ++ ++void ++decompress_kernel(unsigned long load_addr, int num_words, ++ unsigned long cksum, unsigned long *sp) ++{ ++ extern unsigned long start; ++ int zimage_size; ++ ++ com_port = (struct NS16550 *)serial_init(0); ++ ++ initrd_size = (unsigned long)(&__ramdisk_end) - ++ (unsigned long)(&__ramdisk_begin); ++ ++ /* ++ * Reveal where we were loaded at and where we ++ * were relocated to. ++ */ ++ puts("loaded at: "); puthex(load_addr); ++ puts(" "); puthex((unsigned long)(load_addr + (4*num_words))); puts("\n"); ++ if ( (unsigned long)load_addr != (unsigned long)&start ) ++ { ++ puts("relocated to: "); puthex((unsigned long)&start); ++ puts(" "); ++ puthex((unsigned long)((unsigned long)&start + (4*num_words))); ++ puts("\n"); ++ } ++ ++ /* ++ * We link ourself to an arbitrary low address. When we run, we ++ * relocate outself to that address. __image_being points to ++ * the part of the image where the zImage is. -- Tom ++ */ ++ zimage_start = (char *)(unsigned long)(&__image_begin); ++ zimage_size = (unsigned long)(&__image_end) - ++ (unsigned long)(&__image_begin); ++ ++ /* ++ * The zImage and initrd will be between start and _end, so they've ++ * already been moved once. We're good to go now. -- Tom ++ */ ++ puts("zimage at: "); puthex((unsigned long)zimage_start); ++ puts(" "); puthex((unsigned long)(zimage_size+zimage_start)); ++ puts("\n"); ++ ++ if ( initrd_size ) { ++ puts("initrd at: "); ++ puthex((unsigned long)(&__ramdisk_begin)); ++ puts(" "); puthex((unsigned long)(&__ramdisk_end));puts("\n"); ++ } ++ ++ /* assume the chunk below 8M is free */ ++ avail_ram = (char *)AVAIL_RAM_START; ++ end_avail = (char *)AVAIL_RAM_END; ++ ++ /* Display standard Linux/MIPS boot prompt for kernel args */ ++ puts("Uncompressing Linux at load address "); ++ puthex(LOADADDR); ++ puts("\n"); ++ /* I don't like this hard coded gunzip size (fixme) */ ++ gunzip((void *)LOADADDR, 0x400000, zimage_start, &zimage_size); ++ puts("Now booting the kernel\n"); ++} +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/no_initrd.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/no_initrd.c +--- linux-2.6.16.7/arch/mips/boot/compressed/common/no_initrd.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/no_initrd.c 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,2 @@ ++char initrd_data[1]; ++int initrd_len = 0; +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/images/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/images/Makefile +--- linux-2.6.16.7/arch/mips/boot/compressed/images/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/images/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++# ++# This dir holds all of the images for MIPS machines. ++# Tom Rini January 2001 ++# Pete Popov 2004 ++ ++extra-y := vmlinux.bin vmlinux.gz ++ ++OBJCOPYFLAGS_vmlinux.bin := -O binary ++$(obj)/vmlinux.bin: vmlinux FORCE ++ $(call if_changed,objcopy) ++ ++$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE ++ $(call if_changed,gzip) ++ ++# Files generated that shall be removed upon make clean ++clean-files := vmlinux* zImage* +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/nonstdio.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/nonstdio.h +--- linux-2.6.16.7/arch/mips/boot/compressed/include/nonstdio.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/nonstdio.h 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,18 @@ ++/* ++ * Copyright (C) Paul Mackerras 1997. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version ++ * 2 of the License, or (at your option) any later version. ++ */ ++typedef int FILE; ++extern FILE *stdin, *stdout; ++#define NULL ((void *)0) ++#define EOF (-1) ++#define fopen(n, m) NULL ++#define fflush(f) 0 ++#define fclose(f) 0 ++extern char *fgets(); ++ ++#define perror(s) printf("%s: no files!\n", (s)) +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/ns16550.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/ns16550.h +--- linux-2.6.16.7/arch/mips/boot/compressed/include/ns16550.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/ns16550.h 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,46 @@ ++/* ++ * NS16550 Serial Port ++ */ ++ ++/* ++ * Figure out which file will have the definitons of COMx ++ */ ++ ++/* Some machines have their uart registers 16 bytes apart. Most don't. ++ * TODO: Make this work like drivers/char/serial does - Tom */ ++#if !defined(UART_REG_PAD) ++#define UART_REG_PAD(x) ++#endif ++ ++struct NS16550 ++ { ++ unsigned char rbr; /* 0 */ ++ UART_REG_PAD(rbr) ++ unsigned char ier; /* 1 */ ++ UART_REG_PAD(ier) ++ unsigned char fcr; /* 2 */ ++ UART_REG_PAD(fcr) ++ unsigned char lcr; /* 3 */ ++ UART_REG_PAD(lcr) ++ unsigned char mcr; /* 4 */ ++ UART_REG_PAD(mcr) ++ unsigned char lsr; /* 5 */ ++ UART_REG_PAD(lsr) ++ unsigned char msr; /* 6 */ ++ UART_REG_PAD(msr) ++ unsigned char scr; /* 7 */ ++ }; ++ ++#define thr rbr ++#define iir fcr ++#define dll rbr ++#define dlm ier ++ ++#define LSR_DR 0x01 /* Data ready */ ++#define LSR_OE 0x02 /* Overrun */ ++#define LSR_PE 0x04 /* Parity error */ ++#define LSR_FE 0x08 /* Framing error */ ++#define LSR_BI 0x10 /* Break */ ++#define LSR_THRE 0x20 /* Xmit holding register empty */ ++#define LSR_TEMT 0x40 /* Xmitter empty */ ++#define LSR_ERR 0x80 /* Error */ +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/pb1000_serial.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/pb1000_serial.h +--- linux-2.6.16.7/arch/mips/boot/compressed/include/pb1000_serial.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/pb1000_serial.h 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,20 @@ ++/* ++ * arch/ppc/boot/include/sandpoint_serial.h ++ * ++ * Location of the COM ports on Motorola SPS Sandpoint machines ++ * ++ * Author: Mark A. Greer ++ * mgreer@mvista.com ++ * ++ * Copyright 2001 MontaVista Software Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ */ ++ ++#define COM1 0xfe0003f8 ++#define COM2 0xfe0002f8 ++#define COM3 0x00000000 /* No COM3 */ ++#define COM4 0x00000000 /* No COM4 */ +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/ld.script linux-2.6.16.7.new/arch/mips/boot/compressed/ld.script +--- linux-2.6.16.7/arch/mips/boot/compressed/ld.script 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/ld.script 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,151 @@ ++OUTPUT_ARCH(mips) ++ENTRY(start) ++SECTIONS ++{ ++ /* Read-only sections, merged into text segment: */ ++ /* . = 0x81000000; */ ++ .init : { *(.init) } =0 ++ .text : ++ { ++ _ftext = . ; ++ *(.text) ++ *(.rodata) *(.rodata.*) ++ *(.rodata1) ++ /* .gnu.warning sections are handled specially by elf32.em. */ ++ *(.gnu.warning) ++ } =0 ++ .kstrtab : { *(.kstrtab) } ++ ++ . = ALIGN(16); /* Exception table */ ++ __start___ex_table = .; ++ __ex_table : { *(__ex_table) } ++ __stop___ex_table = .; ++ ++ __start___dbe_table = .; /* Exception table for data bus errors */ ++ __dbe_table : { *(__dbe_table) } ++ __stop___dbe_table = .; ++ ++ __start___ksymtab = .; /* Kernel symbol table */ ++ __ksymtab : { *(__ksymtab) } ++ __stop___ksymtab = .; ++ ++ _etext = .; ++ ++ . = ALIGN(8192); ++ .data.init_task : { *(.data.init_task) } ++ ++ /* Startup code */ ++ . = ALIGN(4096); ++ __init_begin = .; ++ .text.init : { *(.text.init) } ++ .data.init : { *(.data.init) } ++ . = ALIGN(16); ++ __setup_start = .; ++ .setup.init : { *(.setup.init) } ++ __setup_end = .; ++ __initcall_start = .; ++ .initcall.init : { *(.initcall.init) } ++ __initcall_end = .; ++ . = ALIGN(4096); /* Align double page for init_task_union */ ++ __init_end = .; ++ ++ . = ALIGN(4096); ++ .data.page_aligned : { *(.data.idt) } ++ ++ . = ALIGN(32); ++ .data.cacheline_aligned : { *(.data.cacheline_aligned) } ++ ++ .fini : { *(.fini) } =0 ++ .reginfo : { *(.reginfo) } ++ /* Adjust the address for the data segment. We want to adjust up to ++ the same address within the page on the next page up. It would ++ be more correct to do this: ++ . = .; ++ The current expression does not correctly handle the case of a ++ text segment ending precisely at the end of a page; it causes the ++ data segment to skip a page. The above expression does not have ++ this problem, but it will currently (2/95) cause BFD to allocate ++ a single segment, combining both text and data, for this case. ++ This will prevent the text segment from being shared among ++ multiple executions of the program; I think that is more ++ important than losing a page of the virtual address space (note ++ that no actual memory is lost; the page which is skipped can not ++ be referenced). */ ++ . = .; ++ .data : ++ { ++ _fdata = . ; ++ *(.data) ++ ++ /* Put the compressed image here, so bss is on the end. */ ++ __image_begin = .; ++ *(.image) ++ __image_end = .; ++ /* Align the initial ramdisk image (INITRD) on page boundaries. */ ++ . = ALIGN(4096); ++ __ramdisk_begin = .; ++ *(.initrd) ++ __ramdisk_end = .; ++ . = ALIGN(4096); ++ ++ CONSTRUCTORS ++ } ++ .data1 : { *(.data1) } ++ _gp = . + 0x8000; ++ .lit8 : { *(.lit8) } ++ .lit4 : { *(.lit4) } ++ .ctors : { *(.ctors) } ++ .dtors : { *(.dtors) } ++ .got : { *(.got.plt) *(.got) } ++ .dynamic : { *(.dynamic) } ++ /* We want the small data sections together, so single-instruction offsets ++ can access them all, and initialized data all before uninitialized, so ++ we can shorten the on-disk segment size. */ ++ .sdata : { *(.sdata) } ++ . = ALIGN(4); ++ _edata = .; ++ PROVIDE (edata = .); ++ ++ __bss_start = .; ++ _fbss = .; ++ .sbss : { *(.sbss) *(.scommon) } ++ .bss : ++ { ++ *(.dynbss) ++ *(.bss) ++ *(COMMON) ++ . = ALIGN(4); ++ _end = . ; ++ PROVIDE (end = .); ++ } ++ ++ /* Sections to be discarded */ ++ /DISCARD/ : ++ { ++ *(.text.exit) ++ *(.data.exit) ++ *(.exitcall.exit) ++ } ++ ++ /* This is the MIPS specific mdebug section. */ ++ .mdebug : { *(.mdebug) } ++ /* These are needed for ELF backends which have not yet been ++ converted to the new style linker. */ ++ .stab 0 : { *(.stab) } ++ .stabstr 0 : { *(.stabstr) } ++ /* DWARF debug sections. ++ Symbols in the .debug DWARF section are relative to the beginning of the ++ section so we begin .debug at 0. It's not clear yet what needs to happen ++ for the others. */ ++ .debug 0 : { *(.debug) } ++ .debug_srcinfo 0 : { *(.debug_srcinfo) } ++ .debug_aranges 0 : { *(.debug_aranges) } ++ .debug_pubnames 0 : { *(.debug_pubnames) } ++ .debug_sfnames 0 : { *(.debug_sfnames) } ++ .line 0 : { *(.line) } ++ /* These must appear regardless of . */ ++ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } ++ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } ++ .comment : { *(.comment) } ++ .note : { *(.note) } ++} +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/lib/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/lib/Makefile +--- linux-2.6.16.7/arch/mips/boot/compressed/lib/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/lib/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,11 @@ ++ ++# ++# Makefile for some libs needed by zImage. ++# ++ ++lib-y := $(addprefix ../../../../../lib/zlib_inflate/, \ ++ infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o) \ ++ $(addprefix ../../../../../lib/, ctype.o string.o) \ ++ $(addprefix ../../../../../arch/mips/lib/, memcpy.o) \ ++ ++ +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/Makefile +--- linux-2.6.16.7/arch/mips/boot/compressed/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,32 @@ ++ ++# ++# arch/mips/boot/compressed/Makefile ++# ++# This file is subject to the terms and conditions of the GNU General Public ++# License. See the file "COPYING" in the main directory of this archive ++# for more details. ++# ++# Copyright (C) 1994 by Linus Torvalds ++# Adapted for PowerPC by Gary Thomas ++# modified by Cort (cort@cs.nmt.edu) ++# ++# Ported to MIPS by Pete Popov, ppopov@embeddedalley.com ++# ++ ++boot := arch/mips/boot ++compressed := arch/mips/boot/compressed ++ ++CFLAGS += -fno-builtin -D__BOOTER__ -I$(compressed)/include ++ ++BOOT_TARGETS = zImage zImage.flash ++ ++bootdir-$(CONFIG_SOC_AU1X00) := au1xxx ++subdir-y := common lib images ++ ++.PHONY: $(BOOT_TARGETS) $(bootdir-y) ++ ++$(BOOT_TARGETS): $(bootdir-y) ++ ++$(bootdir-y): $(addprefix $(obj)/,$(subdir-y)) \ ++ $(addprefix $(obj)/,$(hostprogs-y)) ++ $(Q)$(MAKE) $(build)=$(obj)/$@ $(MAKECMDGOALS) +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/entry linux-2.6.16.7.new/arch/mips/boot/compressed/utils/entry +--- linux-2.6.16.7/arch/mips/boot/compressed/utils/entry 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/entry 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++# grab the kernel_entry address from the vmlinux elf image ++entry=`$1 $2 | grep kernel_entry` ++ ++fs=`echo $entry | grep ffffffff` # check toolchain output ++ ++if [ -n "$fs" ]; then ++ echo "0x"`$1 $2 | grep kernel_entry | cut -c9- | awk '{print $1}'` ++else ++ echo "0x"`$1 $2 | grep kernel_entry | cut -c1- | awk '{print $1}'` ++fi +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/offset linux-2.6.16.7.new/arch/mips/boot/compressed/utils/offset +--- linux-2.6.16.7/arch/mips/boot/compressed/utils/offset 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/offset 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,3 @@ ++#!/bin/sh ++ ++echo "0x"`$1 -h $2 | grep $3 | grep -v zvmlinux| awk '{print $6}'` +diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/size linux-2.6.16.7.new/arch/mips/boot/compressed/utils/size +--- linux-2.6.16.7/arch/mips/boot/compressed/utils/size 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/size 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,4 @@ ++#!/bin/sh ++ ++OFFSET=`$1 -h $2 | grep $3 | grep -v zvmlinux | awk '{print $3}'` ++echo "0x"$OFFSET +diff -urN linux-2.6.16.7/arch/mips/boot/Makefile linux-2.6.16.7.new/arch/mips/boot/Makefile +--- linux-2.6.16.7/arch/mips/boot/Makefile 2006-04-17 23:53:25.000000000 +0200 ++++ linux-2.6.16.7.new/arch/mips/boot/Makefile 2006-05-04 23:08:18.000000000 +0200 +@@ -16,6 +16,7 @@ + E2EFLAGS = + endif + ++ + # + # Drop some uninteresting sections in the kernel. + # This is only relevant for ELF kernels but doesn't hurt a.out +@@ -25,7 +26,10 @@ + + VMLINUX = vmlinux + +-all: vmlinux.ecoff vmlinux.srec addinitrd ++ZBOOT_TARGETS = zImage zImage.flash ++bootdir-y := compressed ++ ++all: vmlinux.ecoff vmlinux.srec addinitrd zImage + + vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) + $(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS) +@@ -51,3 +55,11 @@ + vmlinux.bin \ + vmlinux.ecoff \ + vmlinux.srec ++ ++.PHONY: $(ZBOOT_TARGETS) $(bootdir-y) ++ ++$(ZBOOT_TARGETS): $(bootdir-y) ++ ++$(bootdir-y): $(addprefix $(obj)/,$(subdir-y)) \ ++ $(addprefix $(obj)/,$(hostprogs-y)) ++ $(Q)$(MAKE) $(build)=$(obj)/$@ $(MAKECMDGOALS) +diff -urN linux-2.6.16.7/arch/mips/boot/Makefile.orig linux-2.6.16.7.new/arch/mips/boot/Makefile.orig +--- linux-2.6.16.7/arch/mips/boot/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.16.7.new/arch/mips/boot/Makefile.orig 2006-05-04 23:08:18.000000000 +0200 +@@ -0,0 +1,53 @@ ++# ++# This file is subject to the terms and conditions of the GNU General Public ++# License. See the file "COPYING" in the main directory of this archive ++# for more details. ++# ++# Copyright (C) 1995, 1998, 2001, 2002 by Ralf Baechle ++# Copyright (C) 2004 Maciej W. Rozycki ++# ++ ++# ++# Some DECstations need all possible sections of an ECOFF executable ++# ++ifdef CONFIG_MACH_DECSTATION ++ E2EFLAGS = -a ++else ++ E2EFLAGS = ++endif ++ ++# ++# Drop some uninteresting sections in the kernel. ++# This is only relevant for ELF kernels but doesn't hurt a.out ++# ++drop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options ++strip-flags = $(addprefix --remove-section=,$(drop-sections)) ++ ++VMLINUX = vmlinux ++ ++all: vmlinux.ecoff vmlinux.srec addinitrd ++ ++vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) ++ $(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS) ++ ++$(obj)/elf2ecoff: $(obj)/elf2ecoff.c ++ $(HOSTCC) -o $@ $^ ++ ++vmlinux.bin: $(VMLINUX) ++ $(OBJCOPY) -O binary $(strip-flags) $(VMLINUX) $(obj)/vmlinux.bin ++ ++vmlinux.srec: $(VMLINUX) ++ $(OBJCOPY) -S -O srec $(strip-flags) $(VMLINUX) $(obj)/vmlinux.srec ++ ++$(obj)/addinitrd: $(obj)/addinitrd.c ++ $(HOSTCC) -o $@ $^ ++ ++archhelp: ++ @echo '* vmlinux.ecoff - ECOFF boot image' ++ @echo '* vmlinux.srec - SREC boot image' ++ ++clean-files += addinitrd \ ++ elf2ecoff \ ++ vmlinux.bin \ ++ vmlinux.ecoff \ ++ vmlinux.srec diff -urN linux-2.6.16.7/arch/mips/Makefile linux-2.6.16.7.new/arch/mips/Makefile --- linux-2.6.16.7/arch/mips/Makefile 2006-04-17 23:53:25.000000000 +0200 -+++ linux-2.6.16.7.new/arch/mips/Makefile 2006-04-20 19:27:22.000000000 +0200 -@@ -840,6 +840,12 @@ ++++ linux-2.6.16.7.new/arch/mips/Makefile 2006-05-04 23:09:44.000000000 +0200 +@@ -831,6 +831,10 @@ + all: vmlinux.ecoff + endif + ++ifdef CONFIG_MIPS_MTX1 ++all: vmlinux.srec zImage zImage.flash ++endif ++ + vmlinux.bin: $(vmlinux-32) + +@$(call makeboot,$@) + +@@ -840,6 +844,12 @@ vmlinux.srec: $(vmlinux-32) +@$(call makeboot,$@) @@ -14,7 +1411,7 @@ diff -urN linux-2.6.16.7/arch/mips/Makefile linux-2.6.16.7.new/arch/mips/Makefil CLEAN_FILES += vmlinux.ecoff \ vmlinux.srec \ vmlinux.rm200.tmp \ -@@ -848,6 +854,7 @@ +@@ -848,6 +858,7 @@ archclean: @$(MAKE) $(clean)=arch/mips/boot @$(MAKE) $(clean)=arch/mips/lasat @@ -24,8 +1421,8 @@ diff -urN linux-2.6.16.7/arch/mips/Makefile linux-2.6.16.7.new/arch/mips/Makefil vmlinux.64 \ diff -urN linux-2.6.16.7/arch/mips/Makefile.orig linux-2.6.16.7.new/arch/mips/Makefile.orig --- linux-2.6.16.7/arch/mips/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/Makefile.orig 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,858 @@ ++++ linux-2.6.16.7.new/arch/mips/Makefile.orig 2006-05-04 23:09:55.000000000 +0200 +@@ -0,0 +1,862 @@ +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive @@ -859,6 +2256,10 @@ diff -urN linux-2.6.16.7/arch/mips/Makefile.orig linux-2.6.16.7.new/arch/mips/Ma +all: vmlinux.ecoff +endif + ++ifdef CONFIG_MIPS_MTX1 ++all: vmlinux.srec zImage zImage.flash ++endif ++ +vmlinux.bin: $(vmlinux-32) + +@$(call makeboot,$@) + @@ -884,1389 +2285,3 @@ diff -urN linux-2.6.16.7/arch/mips/Makefile.orig linux-2.6.16.7.new/arch/mips/Ma +CLEAN_FILES += vmlinux.32 \ + vmlinux.64 \ + vmlinux.ecoff -diff -urN linux-2.6.16.7/arch/mips/boot/Makefile linux-2.6.16.7.new/arch/mips/boot/Makefile ---- linux-2.6.16.7/arch/mips/boot/Makefile 2006-04-17 23:53:25.000000000 +0200 -+++ linux-2.6.16.7.new/arch/mips/boot/Makefile 2006-04-20 19:27:22.000000000 +0200 -@@ -16,6 +16,7 @@ - E2EFLAGS = - endif - -+ - # - # Drop some uninteresting sections in the kernel. - # This is only relevant for ELF kernels but doesn't hurt a.out -@@ -25,7 +26,10 @@ - - VMLINUX = vmlinux - --all: vmlinux.ecoff vmlinux.srec addinitrd -+ZBOOT_TARGETS = zImage zImage.flash -+bootdir-y := compressed -+ -+all: vmlinux.ecoff vmlinux.srec addinitrd zImage - - vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) - $(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS) -@@ -51,3 +55,11 @@ - vmlinux.bin \ - vmlinux.ecoff \ - vmlinux.srec -+ -+.PHONY: $(ZBOOT_TARGETS) $(bootdir-y) -+ -+$(ZBOOT_TARGETS): $(bootdir-y) -+ -+$(bootdir-y): $(addprefix $(obj)/,$(subdir-y)) \ -+ $(addprefix $(obj)/,$(hostprogs-y)) -+ $(Q)$(MAKE) $(build)=$(obj)/$@ $(MAKECMDGOALS) -diff -urN linux-2.6.16.7/arch/mips/boot/Makefile.orig linux-2.6.16.7.new/arch/mips/boot/Makefile.orig ---- linux-2.6.16.7/arch/mips/boot/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/Makefile.orig 2006-04-17 23:53:25.000000000 +0200 -@@ -0,0 +1,53 @@ -+# -+# This file is subject to the terms and conditions of the GNU General Public -+# License. See the file "COPYING" in the main directory of this archive -+# for more details. -+# -+# Copyright (C) 1995, 1998, 2001, 2002 by Ralf Baechle -+# Copyright (C) 2004 Maciej W. Rozycki -+# -+ -+# -+# Some DECstations need all possible sections of an ECOFF executable -+# -+ifdef CONFIG_MACH_DECSTATION -+ E2EFLAGS = -a -+else -+ E2EFLAGS = -+endif -+ -+# -+# Drop some uninteresting sections in the kernel. -+# This is only relevant for ELF kernels but doesn't hurt a.out -+# -+drop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options -+strip-flags = $(addprefix --remove-section=,$(drop-sections)) -+ -+VMLINUX = vmlinux -+ -+all: vmlinux.ecoff vmlinux.srec addinitrd -+ -+vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX) -+ $(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS) -+ -+$(obj)/elf2ecoff: $(obj)/elf2ecoff.c -+ $(HOSTCC) -o $@ $^ -+ -+vmlinux.bin: $(VMLINUX) -+ $(OBJCOPY) -O binary $(strip-flags) $(VMLINUX) $(obj)/vmlinux.bin -+ -+vmlinux.srec: $(VMLINUX) -+ $(OBJCOPY) -S -O srec $(strip-flags) $(VMLINUX) $(obj)/vmlinux.srec -+ -+$(obj)/addinitrd: $(obj)/addinitrd.c -+ $(HOSTCC) -o $@ $^ -+ -+archhelp: -+ @echo '* vmlinux.ecoff - ECOFF boot image' -+ @echo '* vmlinux.srec - SREC boot image' -+ -+clean-files += addinitrd \ -+ elf2ecoff \ -+ vmlinux.bin \ -+ vmlinux.ecoff \ -+ vmlinux.srec -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/Makefile ---- linux-2.6.16.7/arch/mips/boot/compressed/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/Makefile 2006-04-20 19:27:22.000000000 +0200 -@@ -0,0 +1,32 @@ -+ -+# -+# arch/mips/boot/compressed/Makefile -+# -+# This file is subject to the terms and conditions of the GNU General Public -+# License. See the file "COPYING" in the main directory of this archive -+# for more details. -+# -+# Copyright (C) 1994 by Linus Torvalds -+# Adapted for PowerPC by Gary Thomas -+# modified by Cort (cort@cs.nmt.edu) -+# -+# Ported to MIPS by Pete Popov, ppopov@embeddedalley.com -+# -+ -+boot := arch/mips/boot -+compressed := arch/mips/boot/compressed -+ -+CFLAGS += -fno-builtin -D__BOOTER__ -I$(compressed)/include -+ -+BOOT_TARGETS = zImage zImage.flash -+ -+bootdir-$(CONFIG_SOC_AU1X00) := au1xxx -+subdir-y := common lib images -+ -+.PHONY: $(BOOT_TARGETS) $(bootdir-y) -+ -+$(BOOT_TARGETS): $(bootdir-y) -+ -+$(bootdir-y): $(addprefix $(obj)/,$(subdir-y)) \ -+ $(addprefix $(obj)/,$(hostprogs-y)) -+ $(Q)$(MAKE) $(build)=$(obj)/$@ $(MAKECMDGOALS) -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/Makefile ---- linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/Makefile 2006-04-20 19:27:22.000000000 +0200 -@@ -0,0 +1,110 @@ -+# arch/mips/boot/compressed/au1xxx/Makefile -+# -+# Makefile for AMD Alchemy Semiconductor Au1x based boards. -+# All of the boot loader code was derived from the ppc -+# boot code. -+# -+# Copyright 2001,2002 MontaVista Software Inc. -+# -+# Author: Mark A. Greer -+# mgreer@mvista.com -+# -+# Copyright 2004 Embedded Alley Solutions, Inc -+# Ported and modified for mips 2.6 support by -+# Pete Popov -+# -+# This program is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License as published by the -+# Free Software Foundation; either version 2 of the License, or (at your -+# option) any later version. -+ -+boot := arch/mips/boot -+compressed := $(boot)/compressed -+utils := $(compressed)/utils -+lib := $(compressed)/lib -+images := $(compressed)/images -+common := $(compressed)/common -+ -+######################################################################### -+# START BOARD SPECIFIC VARIABLES -+ -+# These two variables control where the zImage is stored -+# in flash and loaded in memory. It only controls how the srec -+# file is generated, the code is the same. -+RAM_RUN_ADDR = 0x81000000 -+ -+ifdef CONFIG_MIPS_XXS1500 -+FLASH_LOAD_ADDR = 0xBF000000 -+else -+FLASH_LOAD_ADDR = 0xBFD00000 -+endif -+ -+# These two variables specify the free ram region -+# that can be used for temporary malloc area -+AVAIL_RAM_START=0x80500000 -+AVAIL_RAM_END=0x80900000 -+ -+# This one must match the LOADADDR in arch/mips/Makefile! -+LOADADDR=0x80100000 -+ -+# WARNING WARNING WARNING -+# Note that with a LOADADDR of 0x80100000 and AVAIL_RAM_START of -+# 0x80500000, the max decompressed kernel size can be 4MB. Else we -+# start overwriting ourselve. You can change these vars as needed; -+# it would be much better if we just figured everything out on the fly. -+ -+# END BOARD SPECIFIC VARIABLES -+######################################################################### -+ -+OBJECTS := $(obj)/head.o $(common)/misc-common.o $(common)/misc-simple.o \ -+ $(common)/au1k_uart.o -+LIBS := $(lib)/lib.a -+ -+ENTRY := $(utils)/entry -+OFFSET := $(utils)/offset -+SIZE := $(utils)/size -+ -+LD_ARGS := -T $(compressed)/ld.script -Ttext $(RAM_RUN_ADDR) -Bstatic -+ -+ifdef CONFIG_CPU_LITTLE_ENDIAN -+OBJCOPY_ARGS = -O elf32-tradlittlemips -+else -+OBJCOPY_ARGS = -O elf32-tradbigmips -+endif -+ -+$(obj)/head.o: $(obj)/head.S $(TOPDIR)/vmlinux -+ $(CC) -I $(TOPDIR)/include $(AFLAGS) \ -+ -DKERNEL_ENTRY=$(shell sh $(ENTRY) $(NM) $(TOPDIR)/vmlinux ) \ -+ -c -o $*.o $< -+ -+$(common)/misc-simple.o: -+ $(CC) -I $(TOPDIR)/include $(CFLAGS) -DINITRD_OFFSET=0 -DINITRD_SIZE=0 -DZIMAGE_OFFSET=0 \ -+ -DAVAIL_RAM_START=$(AVAIL_RAM_START) \ -+ -DAVAIL_RAM_END=$(AVAIL_RAM_END) \ -+ -DLOADADDR=$(LOADADDR) \ -+ -DZIMAGE_SIZE=0 -c -o $@ $*.c -+ -+$(obj)/zvmlinux: $(OBJECTS) $(LIBS) $(srctree)/$(compressed)/ld.script $(images)/vmlinux.gz $(common)/dummy.o -+ $(OBJCOPY) \ -+ --add-section=.image=$(images)/vmlinux.gz \ -+ --set-section-flags=.image=contents,alloc,load,readonly,data \ -+ $(common)/dummy.o $(common)/image.o -+ $(LD) $(LD_ARGS) -o $@ $(OBJECTS) $(common)/image.o $(LIBS) -+ $(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R __kcrctab -R __ksymtab_strings \ -+ -R .comment -R .stab -R .stabstr -R .initrd -R .sysmap -+ -+# Here we manipulate the image in order to get it the necessary -+# srecord file we need. -+zImage: $(obj)/zvmlinux -+ mv $(obj)/zvmlinux $(images)/zImage -+ $(OBJCOPY) -O srec $(images)/zImage $(images)/zImage.srec -+ $(OBJCOPY) -O binary $(images)/zImage $(images)/zImage.bin -+ -+zImage.flash: zImage -+ ( \ -+ flash=${FLASH_LOAD_ADDR} ; \ -+ ram=${RAM_RUN_ADDR} ; \ -+ adjust=$$[ $$flash - $$ram ] ; \ -+ $(OBJCOPY) -O srec --adjust-vma `printf '0x%08x' $$adjust` \ -+ $(images)/zImage $(images)/zImage.flash.srec ; \ -+ ) -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/head.S linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/head.S ---- linux-2.6.16.7/arch/mips/boot/compressed/au1xxx/head.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/au1xxx/head.S 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,119 @@ -+/* -+ * arch/mips/kernel/head.S -+ * -+ * This file is subject to the terms and conditions of the GNU General Public -+ * License. See the file "COPYING" in the main directory of this archive -+ * for more details. -+ * -+ * Copyright (C) 1994, 1995 Waldorf Electronics -+ * Written by Ralf Baechle and Andreas Busse -+ * Copyright (C) 1995 - 1999 Ralf Baechle -+ * Copyright (C) 1996 Paul M. Antoine -+ * Modified for DECStation and hence R3000 support by Paul M. Antoine -+ * Further modifications by David S. Miller and Harald Koerfgen -+ * Copyright (C) 1999 Silicon Graphics, Inc. -+ * -+ * Head.S contains the MIPS exception handler and startup code. -+ * -+ ************************************************************************** -+ * 9 Nov, 2000. -+ * Added Cache Error exception handler and SBDDP EJTAG debug exception. -+ * -+ * Kevin Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com -+ * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. -+ ************************************************************************** -+ */ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define IndexInvalidate_I 0x00 -+#define IndexWriteBack_D 0x01 -+ -+ .set noreorder -+ .cprestore -+ LEAF(start) -+start: -+ bal locate -+ nop -+locate: -+ subu s8, ra, 8 /* Where we were loaded */ -+ la sp, (.stack + 8192) -+ -+ move s0, a0 /* Save boot rom start args */ -+ move s1, a1 -+ move s2, a2 -+ move s3, a3 -+ -+ la a0, start /* Where we were linked to run */ -+ -+ move a1, s8 -+ la a2, _edata -+ subu t1, a2, a0 -+ srl t1, t1, 2 -+ -+ /* copy text section */ -+ li t0, 0 -+1: lw v0, 0(a1) -+ nop -+ sw v0, 0(a0) -+ xor t0, t0, v0 -+ addu a0, 4 -+ bne a2, a0, 1b -+ addu a1, 4 -+ -+ /* Clear BSS */ -+ la a0, _edata -+ la a2, _end -+2: sw zero, 0(a0) -+ bne a2, a0, 2b -+ addu a0, 4 -+ -+ /* push the D-Cache and invalidate I-Cache */ -+ li k0, 0x80000000 # start address -+ li k1, 0x80004000 # end address (16KB I-Cache) -+ subu k1, 128 -+ -+1: -+ .set mips3 -+ cache IndexWriteBack_D, 0(k0) -+ cache IndexWriteBack_D, 32(k0) -+ cache IndexWriteBack_D, 64(k0) -+ cache IndexWriteBack_D, 96(k0) -+ cache IndexInvalidate_I, 0(k0) -+ cache IndexInvalidate_I, 32(k0) -+ cache IndexInvalidate_I, 64(k0) -+ cache IndexInvalidate_I, 96(k0) -+ .set mips0 -+ -+ bne k0, k1, 1b -+ addu k0, k0, 128 -+ /* done */ -+ -+ move a0, s8 /* load address */ -+ move a1, t1 /* length in words */ -+ move a2, t0 /* checksum */ -+ move a3, sp -+ -+ la ra, 1f -+ la k0, decompress_kernel -+ jr k0 -+ nop -+1: -+ -+ move a0, s0 -+ move a1, s1 -+ move a2, s2 -+ move a3, s3 -+ li k0, KERNEL_ENTRY -+ jr k0 -+ nop -+3: -+ b 3b -+ END(start) -+ .comm .stack,4096*2,4 -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/common/Makefile ---- linux-2.6.16.7/arch/mips/boot/compressed/common/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/Makefile 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,14 @@ -+# -+# arch/mips/boot/compressed/common/Makefile -+# -+# This file is subject to the terms and conditions of the GNU General Public -+# License. See the file "COPYING" in the main directory of this archive -+# for more details. -+# -+# Tom Rini January 2001 -+# -+# Pete Popov, 2004 -+# -+ -+lib-y := misc-common.o no_initrd.o dummy.o -+lib-$(CONFIG_SOC_AU1X00) += au1k_uart.o -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/au1k_uart.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/au1k_uart.c ---- linux-2.6.16.7/arch/mips/boot/compressed/common/au1k_uart.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/au1k_uart.c 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,103 @@ -+/* -+ * BRIEF MODULE DESCRIPTION -+ * Simple Au1000 uart routines. -+ * -+ * Copyright 2001 MontaVista Software Inc. -+ * Author: MontaVista Software, Inc. -+ * ppopov@mvista.com or source@mvista.com -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ * -+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN -+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+#include -+#include -+#include -+#include "ns16550.h" -+ -+typedef unsigned char uint8; -+typedef unsigned int uint32; -+ -+#define UART16550_BAUD_2400 2400 -+#define UART16550_BAUD_4800 4800 -+#define UART16550_BAUD_9600 9600 -+#define UART16550_BAUD_19200 19200 -+#define UART16550_BAUD_38400 38400 -+#define UART16550_BAUD_57600 57600 -+#define UART16550_BAUD_115200 115200 -+ -+#define UART16550_PARITY_NONE 0 -+#define UART16550_PARITY_ODD 0x08 -+#define UART16550_PARITY_EVEN 0x18 -+#define UART16550_PARITY_MARK 0x28 -+#define UART16550_PARITY_SPACE 0x38 -+ -+#define UART16550_DATA_5BIT 0x0 -+#define UART16550_DATA_6BIT 0x1 -+#define UART16550_DATA_7BIT 0x2 -+#define UART16550_DATA_8BIT 0x3 -+ -+#define UART16550_STOP_1BIT 0x0 -+#define UART16550_STOP_2BIT 0x4 -+ -+/* It would be nice if we had a better way to do this. -+ * It could be a variable defined in one of the board specific files. -+ */ -+#undef UART_BASE -+#ifdef CONFIG_COGENT_CSB250 -+#define UART_BASE UART3_ADDR -+#else -+#define UART_BASE UART0_ADDR -+#endif -+ -+/* memory-mapped read/write of the port */ -+#define UART16550_READ(y) (au_readl(UART_BASE + y) & 0xff) -+#define UART16550_WRITE(y,z) (au_writel(z&0xff, UART_BASE + y)) -+ -+/* -+ * We use uart 0, which is already initialized by -+ * yamon. -+ */ -+volatile struct NS16550 * -+serial_init(int chan) -+{ -+ volatile struct NS16550 *com_port; -+ com_port = (struct NS16550 *) UART_BASE; -+ return (com_port); -+} -+ -+void -+serial_putc(volatile struct NS16550 *com_port, unsigned char c) -+{ -+ while ((UART16550_READ(UART_LSR)&0x40) == 0); -+ UART16550_WRITE(UART_TX, c); -+} -+ -+unsigned char -+serial_getc(volatile struct NS16550 *com_port) -+{ -+ while((UART16550_READ(UART_LSR) & 0x1) == 0); -+ return UART16550_READ(UART_RX); -+} -+ -+int -+serial_tstc(volatile struct NS16550 *com_port) -+{ -+ return((UART16550_READ(UART_LSR) & LSR_DR) != 0); -+} -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/dummy.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/dummy.c ---- linux-2.6.16.7/arch/mips/boot/compressed/common/dummy.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/dummy.c 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,4 @@ -+int main(void) -+{ -+ return 0; -+} -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/misc-common.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-common.c ---- linux-2.6.16.7/arch/mips/boot/compressed/common/misc-common.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-common.c 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,434 @@ -+/* -+ * arch/mips/boot/compressed/common/misc-common.c -+ * -+ * Misc. bootloader code (almost) all platforms can use -+ * -+ * Author: Johnnie Peters -+ * Editor: Tom Rini -+ * -+ * Derived from arch/ppc/boot/prep/misc.c -+ * -+ * Ported by Pete Popov to -+ * support mips board(s). I also got rid of the vga console -+ * code. -+ * -+ * Copyright 2000-2001 MontaVista Software Inc. -+ * -+ * Ported to MIPS 2.6 by Pete Popov, -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ * -+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN -+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#include /* for va_ bits */ -+#include -+#include -+#include -+ -+extern char *avail_ram; -+extern char *end_avail; -+extern char _end[]; -+ -+void puts(const char *); -+void putc(const char c); -+void puthex(unsigned long val); -+void _bcopy(char *src, char *dst, int len); -+void gunzip(void *, int, unsigned char *, int *); -+static int _cvt(unsigned long val, char *buf, long radix, char *digits); -+ -+void _vprintk(void(*)(const char), const char *, va_list ap); -+ -+struct NS16550 *com_port; -+ -+int serial_tstc(volatile struct NS16550 *); -+unsigned char serial_getc(volatile struct NS16550 *); -+void serial_putc(volatile struct NS16550 *, unsigned char); -+ -+void pause(void) -+{ -+ puts("pause\n"); -+} -+ -+void exit(void) -+{ -+ puts("exit\n"); -+ while(1); -+} -+ -+int tstc(void) -+{ -+ return (serial_tstc(com_port)); -+} -+ -+int getc(void) -+{ -+ while (1) { -+ if (serial_tstc(com_port)) -+ return (serial_getc(com_port)); -+ } -+} -+ -+void -+putc(const char c) -+{ -+ serial_putc(com_port, c); -+ if ( c == '\n' ) -+ serial_putc(com_port, '\r'); -+} -+ -+void puts(const char *s) -+{ -+ char c; -+ while ( ( c = *s++ ) != '\0' ) { -+ serial_putc(com_port, c); -+ if ( c == '\n' ) serial_putc(com_port, '\r'); -+ } -+} -+ -+void error(char *x) -+{ -+ puts("\n\n"); -+ puts(x); -+ puts("\n\n -- System halted"); -+ -+ while(1); /* Halt */ -+} -+ -+static void *zalloc(unsigned size) -+{ -+ void *p = avail_ram; -+ -+ size = (size + 7) & -8; -+ avail_ram += size; -+ if (avail_ram > end_avail) { -+ puts("oops... out of memory\n"); -+ pause(); -+ } -+ return p; -+} -+ -+ -+#define HEAD_CRC 2 -+#define EXTRA_FIELD 4 -+#define ORIG_NAME 8 -+#define COMMENT 0x10 -+#define RESERVED 0xe0 -+ -+#define DEFLATED 8 -+ -+void gunzip(void *dst, int dstlen, unsigned char *src, int *lenp) -+{ -+ z_stream s; -+ int r, i, flags; -+ -+ /* skip header */ -+ i = 10; -+ flags = src[3]; -+ if (src[2] != Z_DEFLATED || (flags & RESERVED) != 0) { -+ puts("bad gzipped data\n"); -+ exit(); -+ } -+ if ((flags & EXTRA_FIELD) != 0) -+ i = 12 + src[10] + (src[11] << 8); -+ if ((flags & ORIG_NAME) != 0) -+ while (src[i++] != 0) -+ ; -+ if ((flags & COMMENT) != 0) -+ while (src[i++] != 0) -+ ; -+ if ((flags & HEAD_CRC) != 0) -+ i += 2; -+ if (i >= *lenp) { -+ puts("gunzip: ran out of data in header\n"); -+ exit(); -+ } -+ -+ /* Initialize ourself. */ -+ s.workspace = zalloc(zlib_inflate_workspacesize()); -+ r = zlib_inflateInit2(&s, -MAX_WBITS); -+ if (r != Z_OK) { -+ puts("zlib_inflateInit2 returned "); puthex(r); puts("\n"); -+ exit(); -+ } -+ s.next_in = src + i; -+ s.avail_in = *lenp - i; -+ s.next_out = dst; -+ s.avail_out = dstlen; -+ r = zlib_inflate(&s, Z_FINISH); -+ if (r != Z_OK && r != Z_STREAM_END) { -+ puts("inflate returned "); puthex(r); puts("\n"); -+ exit(); -+ } -+ *lenp = s.next_out - (unsigned char *) dst; -+ zlib_inflateEnd(&s); -+} -+ -+void -+puthex(unsigned long val) -+{ -+ -+ unsigned char buf[10]; -+ int i; -+ for (i = 7; i >= 0; i--) -+ { -+ buf[i] = "0123456789ABCDEF"[val & 0x0F]; -+ val >>= 4; -+ } -+ buf[8] = '\0'; -+ puts(buf); -+} -+ -+#define FALSE 0 -+#define TRUE 1 -+ -+void -+_printk(char const *fmt, ...) -+{ -+ va_list ap; -+ -+ va_start(ap, fmt); -+ _vprintk(putc, fmt, ap); -+ va_end(ap); -+ return; -+} -+ -+#define is_digit(c) ((c >= '0') && (c <= '9')) -+ -+void -+_vprintk(void(*putc)(const char), const char *fmt0, va_list ap) -+{ -+ char c, sign, *cp = 0; -+ int left_prec, right_prec, zero_fill, length = 0, pad, pad_on_right; -+ char buf[32]; -+ long val; -+ while ((c = *fmt0++)) -+ { -+ if (c == '%') -+ { -+ c = *fmt0++; -+ left_prec = right_prec = pad_on_right = 0; -+ if (c == '-') -+ { -+ c = *fmt0++; -+ pad_on_right++; -+ } -+ if (c == '0') -+ { -+ zero_fill = TRUE; -+ c = *fmt0++; -+ } else -+ { -+ zero_fill = FALSE; -+ } -+ while (is_digit(c)) -+ { -+ left_prec = (left_prec * 10) + (c - '0'); -+ c = *fmt0++; -+ } -+ if (c == '.') -+ { -+ c = *fmt0++; -+ zero_fill++; -+ while (is_digit(c)) -+ { -+ right_prec = (right_prec * 10) + (c - '0'); -+ c = *fmt0++; -+ } -+ } else -+ { -+ right_prec = left_prec; -+ } -+ sign = '\0'; -+ switch (c) -+ { -+ case 'd': -+ case 'x': -+ case 'X': -+ val = va_arg(ap, long); -+ switch (c) -+ { -+ case 'd': -+ if (val < 0) -+ { -+ sign = '-'; -+ val = -val; -+ } -+ length = _cvt(val, buf, 10, "0123456789"); -+ break; -+ case 'x': -+ length = _cvt(val, buf, 16, "0123456789abcdef"); -+ break; -+ case 'X': -+ length = _cvt(val, buf, 16, "0123456789ABCDEF"); -+ break; -+ } -+ cp = buf; -+ break; -+ case 's': -+ cp = va_arg(ap, char *); -+ length = strlen(cp); -+ break; -+ case 'c': -+ c = va_arg(ap, long /*char*/); -+ (*putc)(c); -+ continue; -+ default: -+ (*putc)('?'); -+ } -+ pad = left_prec - length; -+ if (sign != '\0') -+ { -+ pad--; -+ } -+ if (zero_fill) -+ { -+ c = '0'; -+ if (sign != '\0') -+ { -+ (*putc)(sign); -+ sign = '\0'; -+ } -+ } else -+ { -+ c = ' '; -+ } -+ if (!pad_on_right) -+ { -+ while (pad-- > 0) -+ { -+ (*putc)(c); -+ } -+ } -+ if (sign != '\0') -+ { -+ (*putc)(sign); -+ } -+ while (length-- > 0) -+ { -+ (*putc)(c = *cp++); -+ if (c == '\n') -+ { -+ (*putc)('\r'); -+ } -+ } -+ if (pad_on_right) -+ { -+ while (pad-- > 0) -+ { -+ (*putc)(c); -+ } -+ } -+ } else -+ { -+ (*putc)(c); -+ if (c == '\n') -+ { -+ (*putc)('\r'); -+ } -+ } -+ } -+} -+ -+int -+_cvt(unsigned long val, char *buf, long radix, char *digits) -+{ -+ char temp[80]; -+ char *cp = temp; -+ int length = 0; -+ if (val == 0) -+ { /* Special case */ -+ *cp++ = '0'; -+ } else -+ while (val) -+ { -+ *cp++ = digits[val % radix]; -+ val /= radix; -+ } -+ while (cp != temp) -+ { -+ *buf++ = *--cp; -+ length++; -+ } -+ *buf = '\0'; -+ return (length); -+} -+ -+void -+_dump_buf_with_offset(unsigned char *p, int s, unsigned char *base) -+{ -+ int i, c; -+ if ((unsigned int)s > (unsigned int)p) -+ { -+ s = (unsigned int)s - (unsigned int)p; -+ } -+ while (s > 0) -+ { -+ if (base) -+ { -+ _printk("%06X: ", (int)p - (int)base); -+ } else -+ { -+ _printk("%06X: ", p); -+ } -+ for (i = 0; i < 16; i++) -+ { -+ if (i < s) -+ { -+ _printk("%02X", p[i] & 0xFF); -+ } else -+ { -+ _printk(" "); -+ } -+ if ((i % 2) == 1) _printk(" "); -+ if ((i % 8) == 7) _printk(" "); -+ } -+ _printk(" |"); -+ for (i = 0; i < 16; i++) -+ { -+ if (i < s) -+ { -+ c = p[i] & 0xFF; -+ if ((c < 0x20) || (c >= 0x7F)) c = '.'; -+ } else -+ { -+ c = ' '; -+ } -+ _printk("%c", c); -+ } -+ _printk("|\n"); -+ s -= 16; -+ p += 16; -+ } -+} -+ -+void -+_dump_buf(unsigned char *p, int s) -+{ -+ _printk("\n"); -+ _dump_buf_with_offset(p, s, 0); -+} -+ -+/* -+ * Local variables: -+ * c-indent-level: 8 -+ * c-basic-offset: 8 -+ * tab-width: 8 -+ * End: -+ */ -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/misc-simple.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-simple.c ---- linux-2.6.16.7/arch/mips/boot/compressed/common/misc-simple.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/misc-simple.c 2006-04-20 19:27:22.000000000 +0200 -@@ -0,0 +1,122 @@ -+/* -+ * arch/mips/zboot/common/misc-simple.c -+ * -+ * Misc. bootloader code for many machines. This assumes you have are using -+ * a 6xx/7xx/74xx CPU in your machine. This assumes the chunk of memory -+ * below 8MB is free. Finally, it assumes you have a NS16550-style uart for -+ * your serial console. If a machine meets these requirements, it can quite -+ * likely use this code during boot. -+ * -+ * Author: Matt Porter -+ * Derived from arch/ppc/boot/prep/misc.c -+ * -+ * Copyright 2001 MontaVista Software Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ */ -+ -+#include -+#include -+#include -+ -+#include -+ -+#include "linux/zlib.h" -+ -+extern struct NS16550 *com_port; -+ -+char *avail_ram; -+char *end_avail; -+extern char _end[]; -+char *zimage_start; -+ -+#ifdef CONFIG_CMDLINE -+#define CMDLINE CONFIG_CMDLINE -+#else -+#define CMDLINE "" -+#endif -+char cmd_preset[] = CMDLINE; -+char cmd_buf[256]; -+char *cmd_line = cmd_buf; -+ -+/* The linker tells us where the image is. -+*/ -+extern unsigned char __image_begin, __image_end; -+extern unsigned char __ramdisk_begin, __ramdisk_end; -+unsigned long initrd_size; -+ -+extern void puts(const char *); -+extern void putc(const char c); -+extern void puthex(unsigned long val); -+extern void *memcpy(void * __dest, __const void * __src, -+ __kernel_size_t __n); -+extern void gunzip(void *, int, unsigned char *, int *); -+extern void udelay(long delay); -+extern int tstc(void); -+extern int getc(void); -+extern volatile struct NS16550 *serial_init(int chan); -+ -+void -+decompress_kernel(unsigned long load_addr, int num_words, -+ unsigned long cksum, unsigned long *sp) -+{ -+ extern unsigned long start; -+ int zimage_size; -+ -+ com_port = (struct NS16550 *)serial_init(0); -+ -+ initrd_size = (unsigned long)(&__ramdisk_end) - -+ (unsigned long)(&__ramdisk_begin); -+ -+ /* -+ * Reveal where we were loaded at and where we -+ * were relocated to. -+ */ -+ puts("loaded at: "); puthex(load_addr); -+ puts(" "); puthex((unsigned long)(load_addr + (4*num_words))); puts("\n"); -+ if ( (unsigned long)load_addr != (unsigned long)&start ) -+ { -+ puts("relocated to: "); puthex((unsigned long)&start); -+ puts(" "); -+ puthex((unsigned long)((unsigned long)&start + (4*num_words))); -+ puts("\n"); -+ } -+ -+ /* -+ * We link ourself to an arbitrary low address. When we run, we -+ * relocate outself to that address. __image_being points to -+ * the part of the image where the zImage is. -- Tom -+ */ -+ zimage_start = (char *)(unsigned long)(&__image_begin); -+ zimage_size = (unsigned long)(&__image_end) - -+ (unsigned long)(&__image_begin); -+ -+ /* -+ * The zImage and initrd will be between start and _end, so they've -+ * already been moved once. We're good to go now. -- Tom -+ */ -+ puts("zimage at: "); puthex((unsigned long)zimage_start); -+ puts(" "); puthex((unsigned long)(zimage_size+zimage_start)); -+ puts("\n"); -+ -+ if ( initrd_size ) { -+ puts("initrd at: "); -+ puthex((unsigned long)(&__ramdisk_begin)); -+ puts(" "); puthex((unsigned long)(&__ramdisk_end));puts("\n"); -+ } -+ -+ /* assume the chunk below 8M is free */ -+ avail_ram = (char *)AVAIL_RAM_START; -+ end_avail = (char *)AVAIL_RAM_END; -+ -+ /* Display standard Linux/MIPS boot prompt for kernel args */ -+ puts("Uncompressing Linux at load address "); -+ puthex(LOADADDR); -+ puts("\n"); -+ /* I don't like this hard coded gunzip size (fixme) */ -+ gunzip((void *)LOADADDR, 0x400000, zimage_start, &zimage_size); -+ puts("Now booting the kernel\n"); -+} -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/common/no_initrd.c linux-2.6.16.7.new/arch/mips/boot/compressed/common/no_initrd.c ---- linux-2.6.16.7/arch/mips/boot/compressed/common/no_initrd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/common/no_initrd.c 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,2 @@ -+char initrd_data[1]; -+int initrd_len = 0; -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/images/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/images/Makefile ---- linux-2.6.16.7/arch/mips/boot/compressed/images/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/images/Makefile 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,17 @@ -+ -+# -+# This dir holds all of the images for MIPS machines. -+# Tom Rini January 2001 -+# Pete Popov 2004 -+ -+extra-y := vmlinux.bin vmlinux.gz -+ -+OBJCOPYFLAGS_vmlinux.bin := -O binary -+$(obj)/vmlinux.bin: vmlinux FORCE -+ $(call if_changed,objcopy) -+ -+$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE -+ $(call if_changed,gzip) -+ -+# Files generated that shall be removed upon make clean -+clean-files := vmlinux* zImage* -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/nonstdio.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/nonstdio.h ---- linux-2.6.16.7/arch/mips/boot/compressed/include/nonstdio.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/nonstdio.h 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,18 @@ -+/* -+ * Copyright (C) Paul Mackerras 1997. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version -+ * 2 of the License, or (at your option) any later version. -+ */ -+typedef int FILE; -+extern FILE *stdin, *stdout; -+#define NULL ((void *)0) -+#define EOF (-1) -+#define fopen(n, m) NULL -+#define fflush(f) 0 -+#define fclose(f) 0 -+extern char *fgets(); -+ -+#define perror(s) printf("%s: no files!\n", (s)) -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/ns16550.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/ns16550.h ---- linux-2.6.16.7/arch/mips/boot/compressed/include/ns16550.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/ns16550.h 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,46 @@ -+/* -+ * NS16550 Serial Port -+ */ -+ -+/* -+ * Figure out which file will have the definitons of COMx -+ */ -+ -+/* Some machines have their uart registers 16 bytes apart. Most don't. -+ * TODO: Make this work like drivers/char/serial does - Tom */ -+#if !defined(UART_REG_PAD) -+#define UART_REG_PAD(x) -+#endif -+ -+struct NS16550 -+ { -+ unsigned char rbr; /* 0 */ -+ UART_REG_PAD(rbr) -+ unsigned char ier; /* 1 */ -+ UART_REG_PAD(ier) -+ unsigned char fcr; /* 2 */ -+ UART_REG_PAD(fcr) -+ unsigned char lcr; /* 3 */ -+ UART_REG_PAD(lcr) -+ unsigned char mcr; /* 4 */ -+ UART_REG_PAD(mcr) -+ unsigned char lsr; /* 5 */ -+ UART_REG_PAD(lsr) -+ unsigned char msr; /* 6 */ -+ UART_REG_PAD(msr) -+ unsigned char scr; /* 7 */ -+ }; -+ -+#define thr rbr -+#define iir fcr -+#define dll rbr -+#define dlm ier -+ -+#define LSR_DR 0x01 /* Data ready */ -+#define LSR_OE 0x02 /* Overrun */ -+#define LSR_PE 0x04 /* Parity error */ -+#define LSR_FE 0x08 /* Framing error */ -+#define LSR_BI 0x10 /* Break */ -+#define LSR_THRE 0x20 /* Xmit holding register empty */ -+#define LSR_TEMT 0x40 /* Xmitter empty */ -+#define LSR_ERR 0x80 /* Error */ -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/include/pb1000_serial.h linux-2.6.16.7.new/arch/mips/boot/compressed/include/pb1000_serial.h ---- linux-2.6.16.7/arch/mips/boot/compressed/include/pb1000_serial.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/include/pb1000_serial.h 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,20 @@ -+/* -+ * arch/ppc/boot/include/sandpoint_serial.h -+ * -+ * Location of the COM ports on Motorola SPS Sandpoint machines -+ * -+ * Author: Mark A. Greer -+ * mgreer@mvista.com -+ * -+ * Copyright 2001 MontaVista Software Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ */ -+ -+#define COM1 0xfe0003f8 -+#define COM2 0xfe0002f8 -+#define COM3 0x00000000 /* No COM3 */ -+#define COM4 0x00000000 /* No COM4 */ -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/ld.script linux-2.6.16.7.new/arch/mips/boot/compressed/ld.script ---- linux-2.6.16.7/arch/mips/boot/compressed/ld.script 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/ld.script 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,151 @@ -+OUTPUT_ARCH(mips) -+ENTRY(start) -+SECTIONS -+{ -+ /* Read-only sections, merged into text segment: */ -+ /* . = 0x81000000; */ -+ .init : { *(.init) } =0 -+ .text : -+ { -+ _ftext = . ; -+ *(.text) -+ *(.rodata) *(.rodata.*) -+ *(.rodata1) -+ /* .gnu.warning sections are handled specially by elf32.em. */ -+ *(.gnu.warning) -+ } =0 -+ .kstrtab : { *(.kstrtab) } -+ -+ . = ALIGN(16); /* Exception table */ -+ __start___ex_table = .; -+ __ex_table : { *(__ex_table) } -+ __stop___ex_table = .; -+ -+ __start___dbe_table = .; /* Exception table for data bus errors */ -+ __dbe_table : { *(__dbe_table) } -+ __stop___dbe_table = .; -+ -+ __start___ksymtab = .; /* Kernel symbol table */ -+ __ksymtab : { *(__ksymtab) } -+ __stop___ksymtab = .; -+ -+ _etext = .; -+ -+ . = ALIGN(8192); -+ .data.init_task : { *(.data.init_task) } -+ -+ /* Startup code */ -+ . = ALIGN(4096); -+ __init_begin = .; -+ .text.init : { *(.text.init) } -+ .data.init : { *(.data.init) } -+ . = ALIGN(16); -+ __setup_start = .; -+ .setup.init : { *(.setup.init) } -+ __setup_end = .; -+ __initcall_start = .; -+ .initcall.init : { *(.initcall.init) } -+ __initcall_end = .; -+ . = ALIGN(4096); /* Align double page for init_task_union */ -+ __init_end = .; -+ -+ . = ALIGN(4096); -+ .data.page_aligned : { *(.data.idt) } -+ -+ . = ALIGN(32); -+ .data.cacheline_aligned : { *(.data.cacheline_aligned) } -+ -+ .fini : { *(.fini) } =0 -+ .reginfo : { *(.reginfo) } -+ /* Adjust the address for the data segment. We want to adjust up to -+ the same address within the page on the next page up. It would -+ be more correct to do this: -+ . = .; -+ The current expression does not correctly handle the case of a -+ text segment ending precisely at the end of a page; it causes the -+ data segment to skip a page. The above expression does not have -+ this problem, but it will currently (2/95) cause BFD to allocate -+ a single segment, combining both text and data, for this case. -+ This will prevent the text segment from being shared among -+ multiple executions of the program; I think that is more -+ important than losing a page of the virtual address space (note -+ that no actual memory is lost; the page which is skipped can not -+ be referenced). */ -+ . = .; -+ .data : -+ { -+ _fdata = . ; -+ *(.data) -+ -+ /* Put the compressed image here, so bss is on the end. */ -+ __image_begin = .; -+ *(.image) -+ __image_end = .; -+ /* Align the initial ramdisk image (INITRD) on page boundaries. */ -+ . = ALIGN(4096); -+ __ramdisk_begin = .; -+ *(.initrd) -+ __ramdisk_end = .; -+ . = ALIGN(4096); -+ -+ CONSTRUCTORS -+ } -+ .data1 : { *(.data1) } -+ _gp = . + 0x8000; -+ .lit8 : { *(.lit8) } -+ .lit4 : { *(.lit4) } -+ .ctors : { *(.ctors) } -+ .dtors : { *(.dtors) } -+ .got : { *(.got.plt) *(.got) } -+ .dynamic : { *(.dynamic) } -+ /* We want the small data sections together, so single-instruction offsets -+ can access them all, and initialized data all before uninitialized, so -+ we can shorten the on-disk segment size. */ -+ .sdata : { *(.sdata) } -+ . = ALIGN(4); -+ _edata = .; -+ PROVIDE (edata = .); -+ -+ __bss_start = .; -+ _fbss = .; -+ .sbss : { *(.sbss) *(.scommon) } -+ .bss : -+ { -+ *(.dynbss) -+ *(.bss) -+ *(COMMON) -+ . = ALIGN(4); -+ _end = . ; -+ PROVIDE (end = .); -+ } -+ -+ /* Sections to be discarded */ -+ /DISCARD/ : -+ { -+ *(.text.exit) -+ *(.data.exit) -+ *(.exitcall.exit) -+ } -+ -+ /* This is the MIPS specific mdebug section. */ -+ .mdebug : { *(.mdebug) } -+ /* These are needed for ELF backends which have not yet been -+ converted to the new style linker. */ -+ .stab 0 : { *(.stab) } -+ .stabstr 0 : { *(.stabstr) } -+ /* DWARF debug sections. -+ Symbols in the .debug DWARF section are relative to the beginning of the -+ section so we begin .debug at 0. It's not clear yet what needs to happen -+ for the others. */ -+ .debug 0 : { *(.debug) } -+ .debug_srcinfo 0 : { *(.debug_srcinfo) } -+ .debug_aranges 0 : { *(.debug_aranges) } -+ .debug_pubnames 0 : { *(.debug_pubnames) } -+ .debug_sfnames 0 : { *(.debug_sfnames) } -+ .line 0 : { *(.line) } -+ /* These must appear regardless of . */ -+ .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } -+ .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } -+ .comment : { *(.comment) } -+ .note : { *(.note) } -+} -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/lib/Makefile linux-2.6.16.7.new/arch/mips/boot/compressed/lib/Makefile ---- linux-2.6.16.7/arch/mips/boot/compressed/lib/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/lib/Makefile 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,11 @@ -+ -+# -+# Makefile for some libs needed by zImage. -+# -+ -+lib-y := $(addprefix ../../../../../lib/zlib_inflate/, \ -+ infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o) \ -+ $(addprefix ../../../../../lib/, ctype.o string.o) \ -+ $(addprefix ../../../../../arch/mips/lib/, memcpy.o) \ -+ -+ -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/entry linux-2.6.16.7.new/arch/mips/boot/compressed/utils/entry ---- linux-2.6.16.7/arch/mips/boot/compressed/utils/entry 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/entry 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,12 @@ -+#!/bin/sh -+ -+# grab the kernel_entry address from the vmlinux elf image -+entry=`$1 $2 | grep kernel_entry` -+ -+fs=`echo $entry | grep ffffffff` # check toolchain output -+ -+if [ -n "$fs" ]; then -+ echo "0x"`$1 $2 | grep kernel_entry | cut -c9- | awk '{print $1}'` -+else -+ echo "0x"`$1 $2 | grep kernel_entry | cut -c1- | awk '{print $1}'` -+fi -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/offset linux-2.6.16.7.new/arch/mips/boot/compressed/utils/offset ---- linux-2.6.16.7/arch/mips/boot/compressed/utils/offset 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/offset 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,3 @@ -+#!/bin/sh -+ -+echo "0x"`$1 -h $2 | grep $3 | grep -v zvmlinux| awk '{print $6}'` -diff -urN linux-2.6.16.7/arch/mips/boot/compressed/utils/size linux-2.6.16.7.new/arch/mips/boot/compressed/utils/size ---- linux-2.6.16.7/arch/mips/boot/compressed/utils/size 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.16.7.new/arch/mips/boot/compressed/utils/size 2006-04-20 19:27:12.000000000 +0200 -@@ -0,0 +1,4 @@ -+#!/bin/sh -+ -+OFFSET=`$1 -h $2 | grep $3 | grep -v zvmlinux | awk '{print $3}'` -+echo "0x"$OFFSET