From 0d7f5f8d2cccfbfb50efafafc5e523a075ca0b3b Mon Sep 17 00:00:00 2001
From: Florian Fainelli <florian@openwrt.org>
Date: Sun, 17 May 2009 16:53:57 +0000
Subject: add support for sysupgrade (#5117)

SVN-Revision: 15900
---
 target/linux/brcm63xx/base-files/lib/upgrade/platform.sh | 16 ++++++++++++++++
 .../brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c     |  9 ++++++++-
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/brcm63xx/base-files/lib/upgrade/platform.sh

diff --git a/target/linux/brcm63xx/base-files/lib/upgrade/platform.sh b/target/linux/brcm63xx/base-files/lib/upgrade/platform.sh
new file mode 100644
index 0000000..1a025f7
--- /dev/null
+++ b/target/linux/brcm63xx/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,16 @@
+PART_NAME=linux
+platform_check_image() {
+	[ "$ARGC" -gt 1 ] && return 1
+	case "$(get_magic_word "$1")" in
+		3600)
+			# 6348GW-11 boards use openwrt-96348GW-11-squashfs-cfe.bin files
+			return 0
+			;;
+		*)
+			echo "Invalid image type. Please use only .bin files"
+			return 1
+			;;
+	esac
+}
+
+# use default for platform_do_upgrade()
diff --git a/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c b/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c
index d17baf2..33aafd8 100644
--- a/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c
+++ b/target/linux/brcm63xx/files/drivers/mtd/maps/bcm963xx-flash.c
@@ -45,7 +45,7 @@ static struct map_info bcm963xx_map = {
 
 static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition **pparts)
 {
-	int nrparts = 2, curpart = 0; /* CFE and NVRAM are always present. */
+	int nrparts = 3, curpart = 0; /* CFE,NVRAM and global LINUX are always present. */
 	struct bcm_tag *buf;
 	struct mtd_partition *parts;
 	int ret;
@@ -118,9 +118,16 @@ static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition *
 			parts[curpart].size += sparelen;
 		curpart++;
 	};
+	
 	parts[curpart].name = "nvram";
 	parts[curpart].offset = master->size - master->erasesize;
 	parts[curpart].size = master->erasesize;
+
+	/* Global partition "linux" to make easy firmware upgrade */
+	curpart++;
+	parts[curpart].name = "linux";
+	parts[curpart].offset = parts[0].size;
+	parts[curpart].size = master->size - parts[0].size - parts[3].size;
        
 	for (i = 0; i < nrparts; i++)
 		printk(KERN_INFO PFX "Partition %d is %s offset %x and length %x\n", i, parts[i].name, parts[i].offset, parts[i].size);
-- 
cgit v1.1