| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 | diff -Nur linux-2.6.37.orig/arch/mips/bcm47xx/Makefile linux-2.6.37/arch/mips/bcm47xx/Makefile--- linux-2.6.37.orig/arch/mips/bcm47xx/Makefile	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/mips/bcm47xx/Makefile	2011-04-26 20:26:19.777672932 +0200@@ -3,4 +3,4 @@ # under Linux. # -obj-y := gpio.o irq.o nvram.o prom.o serial.o setup.o time.o wgt634u.o+obj-y := gpio.o irq.o nvram.o prom.o serial.o setup.o time.o platform.odiff -Nur linux-2.6.37.orig/arch/mips/bcm47xx/platform.c linux-2.6.37/arch/mips/bcm47xx/platform.c--- linux-2.6.37.orig/arch/mips/bcm47xx/platform.c	1970-01-01 01:00:00.000000000 +0100+++ linux-2.6.37/arch/mips/bcm47xx/platform.c	2011-04-27 09:51:38.177664121 +0200@@ -0,0 +1,146 @@+/*+ * 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) 2010, 2011 Waldemar Brodkorb <wbx@openadk.org>+ * Copyright © 2007, 2011 Thorsten Glaser <tg@freewrt.org>+ */++#include <linux/platform_device.h>+#include <linux/module.h>+#include <linux/mtd/physmap.h>+#include <linux/ssb/ssb.h>++#include <asm/mach-bcm47xx/bcm47xx.h>+#include <asm/mach-bcm47xx/nvram.h>++#define CFGFS_FLASH_SIZE (128 * 1024)++static struct mtd_partition bcm47xx_partitions[] = {+#define SLOT_CFE 0+	{+		.name       = "cfe",+		.offset     = 0,+		.size       = BCM47XX_OVERRIDE_CFESIZE,+		.mask_flags = MTD_WRITEABLE		/* force read-only */+	},+#define SLOT_LINUX 1+	{+		.name   = "linux",+		.offset = 0,+		.size   = 0,+	},+#define SLOT_ROOTFS 2+	{+		.name   = "rootfs",+		.offset = 0,+		.size   = 0,+	},+#define SLOT_CFGFS 3+	{+		.name   = "cfgfs",+		.offset = 0,+		.size   = 0,+	},+#define SLOT_NVRAM 4+	{+		.name   = "nvram",+		.offset = 0,+		.size   = 0,+	},+};++static struct physmap_flash_data bcm47xx_flash_data = {+	.parts    = bcm47xx_partitions,+	.nr_parts = ARRAY_SIZE(bcm47xx_partitions)+};++static struct resource bcm47xx_flash_resource = {+	.flags = IORESOURCE_MEM,+};++static struct platform_device bcm47xx_flash = {+	.name          = "physmap-flash",+	.id            = 0,+	.dev           = { .platform_data = &bcm47xx_flash_data, },+	.resource      = &bcm47xx_flash_resource,+	.num_resources = 1,+};++static struct platform_device *bcm47xx_devices[] __initdata = {+	&bcm47xx_flash,+};++struct bcm47xx_trx_header {+#define BCM47XX_TRX_MAGIC 0x30524448+	u32 magic;+	u32 len;+	u32 crc32;+	u32 flag_version;+	u32 offsets[3];+};++#define UPTODOWN(slot, psize) do {			\+	posn -= psize; left -= psize;			\+	bcm47xx_partitions[slot].offset = posn;		\+	bcm47xx_partitions[slot].size = psize;		\+} while (/* CONSTCOND */ 0)++static int __init bcm47xx_register_devices(void)+{+	u32 flash_size;+	size_t left, posn;+	struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;+	struct bcm47xx_trx_header *trx_hdr;++	trx_hdr = (void *)KSEG1ADDR(mcore->flash_window + BCM47XX_OVERRIDE_CFESIZE);++	/* devices might have 2, 4 or 8 MB flash size */+#ifdef BCM47XX_OVERRIDE_FLASHSIZE+	flash_size = BCM47XX_OVERRIDE_FLASHSIZE;+	mcore->flash_window_size = flash_size;+#define BCM47XX_OVERRODE_FLASHSIZE " (overridden)"+#else+	flash_size = mcore->flash_window_size;+#define BCM47XX_OVERRODE_FLASHSIZE ""+#endif+	printk(KERN_INFO "FLASH SIZE%s: %x\n", BCM47XX_OVERRODE_FLASHSIZE,+		flash_size);++	left = flash_size - BCM47XX_OVERRIDE_CFESIZE;+	posn = flash_size;+	UPTODOWN(SLOT_NVRAM, BCM47XX_OVERRIDE_NVRAMSIZE);+	UPTODOWN(SLOT_CFGFS, CFGFS_FLASH_SIZE);+	bcm47xx_partitions[SLOT_LINUX].offset = BCM47XX_OVERRIDE_CFESIZE;+	bcm47xx_partitions[SLOT_LINUX].size = left;++	if (trx_hdr->magic == BCM47XX_TRX_MAGIC) {+		bcm47xx_partitions[SLOT_ROOTFS].offset =+		    bcm47xx_partitions[SLOT_LINUX].offset ++		    trx_hdr->offsets[1];+		bcm47xx_partitions[SLOT_ROOTFS].size =+		    bcm47xx_partitions[SLOT_LINUX].size -+		    trx_hdr->offsets[1];+	} else+		printk("bcm47xx/platform: no TRX header found\n");++	printk(KERN_INFO "=== Flash map dump ===\n");+	for (posn = 0; posn < bcm47xx_flash_data.nr_parts; ++posn)+		printk(KERN_INFO " #%u %08X @%08X '%s'\n",+		    (unsigned int)posn,+		    (unsigned int)bcm47xx_partitions[posn].size,+		    (unsigned int)bcm47xx_partitions[posn].offset,+		    bcm47xx_partitions[posn].name);+	printk(KERN_INFO "=== Hope this works, have a nice day\n");++	bcm47xx_flash_data.width = mcore->flash_buswidth;+	bcm47xx_flash_resource.start = mcore->flash_window;+	bcm47xx_flash_resource.end = mcore->flash_window+				   + mcore->flash_window_size+				   - 1;+	return platform_add_devices(bcm47xx_devices,+			    ARRAY_SIZE(bcm47xx_devices));+}++device_initcall(bcm47xx_register_devices);diff -Nur linux-2.6.37.orig/arch/mips/boot/compressed/Makefile linux-2.6.37/arch/mips/boot/compressed/Makefile--- linux-2.6.37.orig/arch/mips/boot/compressed/Makefile	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/mips/boot/compressed/Makefile	2011-04-26 20:44:04.607661119 +0200@@ -58,8 +58,13 @@ # Calculate the load address of the compressed kernel image hostprogs-y := calc_vmlinuz_load_addr +ifdef CONFIG_BCM47XX+# XXX just after CFE, just pray the address is static+VMLINUZ_LOAD_ADDRESS = 0xffffffff80480000+else VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ 		$(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS))+endif  vmlinuzobjs-y += $(obj)/piggy.o @@ -105,4 +110,12 @@ vmlinuz.srec: vmlinuz 	$(call cmd,objcopy) -clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec}+AFLAGS_selfreloc.o := -DVMLINUZ_LOAD_ADDRESS=$(VMLINUZ_LOAD_ADDRESS)+CPPFLAGS_selfreloc.lds := $(KBUILD_CFLAGS)++arch/mips/boot/compressed/selfreloc.o: arch/mips/boot/compressed/selfreloc.S vmlinuz.bin FORCE++vmlinuz.elf: arch/mips/boot/compressed/selfreloc.o arch/mips/boot/compressed/selfreloc.lds FORCE+	$(LD) $(LDFLAGS) -T arch/mips/boot/compressed/selfreloc.lds arch/mips/boot/compressed/selfreloc.o -o $@++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,elf} $(objtree)/arch/mips/boot/compressed/selfreloc.{o,lds}diff -Nur linux-2.6.37.orig/arch/mips/boot/compressed/selfreloc.lds.S linux-2.6.37/arch/mips/boot/compressed/selfreloc.lds.S--- linux-2.6.37.orig/arch/mips/boot/compressed/selfreloc.lds.S	1970-01-01 01:00:00.000000000 +0100+++ linux-2.6.37/arch/mips/boot/compressed/selfreloc.lds.S	2011-04-26 20:26:20.347764678 +0200@@ -0,0 +1,39 @@+/*-+ * written 2010 by Thorsten Glaser <tg@debian.org> based on+ * arch/mips/kernel/vmlinux.lds and arch/mips/boot/compressed/ld.script+ */++#include <asm/asm-offsets.h>+#include <asm/page.h>+#include <asm-generic/vmlinux.lds.h>++#undef mips+#define mips mips+OUTPUT_ARCH(mips)+ENTRY(selfreloc_start)+PHDRS {+	text PT_LOAD FLAGS(7);	/* RWX */+}+SECTIONS+{+	. = VMLINUX_LOAD_ADDRESS;+	.text : {+		*(.text)+		*(.text.*)+		*(.rodata)+		*(.rodata.*)+		*(.data)+		*(.data.*)+		*(.bss)+		*(.bss.*)+	} :text+	/DISCARD/ : {+		*(.MIPS.options)+		*(.options)+		*(.pdr)+		*(.reginfo)+		*(.comment)+		*(.note)+		*(.gnu.attributes)+	}+}diff -Nur linux-2.6.37.orig/arch/mips/boot/compressed/selfreloc.S linux-2.6.37/arch/mips/boot/compressed/selfreloc.S--- linux-2.6.37.orig/arch/mips/boot/compressed/selfreloc.S	1970-01-01 01:00:00.000000000 +0100+++ linux-2.6.37/arch/mips/boot/compressed/selfreloc.S	2011-04-26 20:26:20.197673829 +0200@@ -0,0 +1,54 @@+/*-+ * written 2011 by Thorsten Glaser <tg@freewrt.org> based on+ * arch/mips/boot/compressed/head.S+ */++#include <asm/asm.h>+#include <asm/regdef.h>++	.set noreorder+	.cprestore++	.text+	LEAF(selfreloc_start)+selfreloc_start:+	/* Save boot rom start args */+	move	s0, a0+	move	s1, a1+	move	s2, a2+	move	s3, a3++	/* Copy code to the correct place */+	PTR_LI	a0, VMLINUZ_LOAD_ADDRESS+	PTR_LA	a1, imgbeg+	PTR_LA	a2, imgend+1:	lw	t0, 0(a1)+	sw	t0, 0(a0)+	add	a1, 4+	add	a0, 4+	blt	a1, a2, 1b+	 nop++	/* Restore boot rom start args */+	move	a0, s0+	move	a1, s1+	move	a2, s2+	move	a3, s3++	/* Jump to the code at its new location */+	PTR_LI	k0, VMLINUZ_LOAD_ADDRESS+	jr	k0+	 nop++	/* Just in case we come back… */+3:+	b	3b+	 nop+	END(selfreloc_start)++	.globl	imgbeg+	.p2align 2+imgbeg:	.incbin	"vmlinuz.bin"+	.globl	imgend+	.p2align 2+imgend:diff -Nur linux-2.6.37.orig/arch/mips/boot/compressed/uart-16550.c linux-2.6.37/arch/mips/boot/compressed/uart-16550.c--- linux-2.6.37.orig/arch/mips/boot/compressed/uart-16550.c	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/mips/boot/compressed/uart-16550.c	2011-04-26 20:26:20.467673519 +0200@@ -18,6 +18,11 @@ #define PORT(offset) (CKSEG1ADDR(AR7_REGS_UART0) + (4 * offset)) #endif +#ifdef CONFIG_BCM47XX+#define UART_BASE 0x18000300+#define PORT(offset) (CKSEG1ADDR(UART_BASE) + (offset))+#endif+ #ifndef PORT #error please define the serial port address for your own machine #endifdiff -Nur linux-2.6.37.orig/arch/mips/Kconfig linux-2.6.37/arch/mips/Kconfig--- linux-2.6.37.orig/arch/mips/Kconfig	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/mips/Kconfig	2011-04-26 20:26:19.637668480 +0200@@ -84,6 +84,7 @@ 	select GENERIC_GPIO 	select SYS_HAS_EARLY_PRINTK 	select CFE+	select SYS_SUPPORTS_ZBOOT_UART16550 	help 	 Support for BCM47XX based boards diff -Nur linux-2.6.37.orig/arch/mips/Makefile linux-2.6.37/arch/mips/Makefile--- linux-2.6.37.orig/arch/mips/Makefile	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/mips/Makefile	2011-04-26 20:26:19.647661042 +0200@@ -76,6 +76,7 @@ all-$(CONFIG_BOOT_ELF32)	:= $(vmlinux-32) all-$(CONFIG_BOOT_ELF64)	:= $(vmlinux-64) all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlinuz+all-$(CONFIG_BCM47XX)		+= vmlinuz.elf  # # GCC uses -G 0 -mabicalls -fpic as default.  We don't want PIC in the kernel@@ -276,7 +277,7 @@ 	$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) arch/mips/boot/$@  # boot/compressed-vmlinuz vmlinuz.bin vmlinuz.ecoff vmlinuz.srec: $(vmlinux-32) FORCE+vmlinuz vmlinuz.bin vmlinuz.ecoff vmlinuz.srec vmlinuz.elf: $(vmlinux-32) FORCE 	$(Q)$(MAKE) $(build)=arch/mips/boot/compressed \ 	   VMLINUX_LOAD_ADDRESS=$(load-y) 32bit-bfd=$(32bit-bfd) $@ @@ -313,6 +314,7 @@ 	echo '  vmlinuz.ecoff        - ECOFF zboot image' 	echo '  vmlinuz.bin          - Raw binary zboot image' 	echo '  vmlinuz.srec         - SREC zboot image'+	echo '  vmlinuz.elf          - ELF self-relocating zboot image' 	echo 	echo '  These will be default as apropriate for a configured platform.' endefdiff -Nur linux-2.6.37.orig/drivers/ssb/driver_mipscore.c linux-2.6.37/drivers/ssb/driver_mipscore.c--- linux-2.6.37.orig/drivers/ssb/driver_mipscore.c	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/drivers/ssb/driver_mipscore.c	2011-04-26 20:26:20.597672444 +0200@@ -190,10 +190,11 @@ { 	struct ssb_bus *bus = mcore->dev->bus; +	printk("Check for vendor with value: %d", bus->chipco.dev->id.vendor); 	mcore->flash_buswidth = 2; 	if (bus->chipco.dev) { 		mcore->flash_window = 0x1c000000;-		mcore->flash_window_size = 0x02000000;+		mcore->flash_window_size = 0x00800000; 		if ((ssb_read32(bus->chipco.dev, SSB_CHIPCO_FLASH_CFG) 		               & SSB_CHIPCO_CFG_DS16) == 0) 			mcore->flash_buswidth = 1;diff -Nur linux-2.6.37.orig/init/Kconfig linux-2.6.37/init/Kconfig--- linux-2.6.37.orig/init/Kconfig	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/init/Kconfig	2011-04-26 20:26:20.727673059 +0200@@ -158,6 +158,7 @@ config KERNEL_GZIP 	bool "Gzip" 	depends on HAVE_KERNEL_GZIP+	select DECOMPRESS_GZIP 	help 	  The old and tried gzip compression. It provides a good balance 	  between compression ratio and decompression speed.@@ -165,6 +166,7 @@ config KERNEL_BZIP2 	bool "Bzip2" 	depends on HAVE_KERNEL_BZIP2+	select DECOMPRESS_BZIP2 	help 	  Its compression ratio and speed is intermediate. 	  Decompression speed is slowest among the three.  The kernel@@ -175,6 +177,7 @@ config KERNEL_LZMA 	bool "LZMA" 	depends on HAVE_KERNEL_LZMA+	select DECOMPRESS_LZMA 	help 	  The most recent compression algorithm. 	  Its ratio is best, decompression speed is between the other@@ -184,6 +187,7 @@ config KERNEL_LZO 	bool "LZO" 	depends on HAVE_KERNEL_LZO+	select DECOMPRESS_LZO 	help 	  Its compression ratio is the poorest among the 4. The kernel 	  size is about 10% bigger than gzip; however its speed
 |