aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch')
-rw-r--r--target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch75
1 files changed, 16 insertions, 59 deletions
diff --git a/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch b/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
index d208a07fc7..d64d42c9dc 100644
--- a/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
+++ b/target/linux/brcm63xx/patches-4.4/425-bcm63xxpart_parse_paritions_from_dt.patch
@@ -8,7 +8,7 @@
#include <asm/mach-bcm63xx/bcm63xx_nvram.h>
#include <asm/mach-bcm63xx/bcm963xx_tag.h>
-@@ -43,66 +44,35 @@
+@@ -43,46 +44,35 @@
#define BCM63XX_CFE_MAGIC_OFFSET 0x4e0
@@ -30,12 +30,10 @@
+ u32 computed_crc;
int ret;
size_t retlen;
-- unsigned int rootfsaddr, kerneladdr, spareaddr, nvramaddr;
+- unsigned int rootfsaddr, kerneladdr, spareaddr;
- unsigned int rootfslen, kernellen, sparelen, totallen;
- unsigned int cfelen, nvramlen;
- unsigned int cfe_erasesize;
-- unsigned int caldatalen1 = 0, caldataaddr1 = 0;
-- unsigned int caldatalen2 = 0, caldataaddr2 = 0;
- int i;
- u32 computed_crc;
+ unsigned int rootfsaddr, kerneladdr;
@@ -51,24 +49,6 @@
- cfelen = cfe_erasesize;
- nvramlen = bcm63xx_nvram_get_psi_size() * SZ_1K;
- nvramlen = roundup(nvramlen, cfe_erasesize);
-- nvramaddr = master->size - nvramlen;
--
-- if (data) {
-- if (data->caldata[0]) {
-- caldatalen1 = cfe_erasesize;
-- caldataaddr1 = rounddown(data->caldata[0],
-- cfe_erasesize);
-- }
-- if (data->caldata[1]) {
-- caldatalen2 = cfe_erasesize;
-- caldataaddr2 = rounddown(data->caldata[1],
-- cfe_erasesize);
-- }
-- if (caldataaddr1 == caldataaddr2) {
-- caldataaddr2 = 0;
-- caldatalen2 = 0;
-- }
-- }
+ int curr_part = next_part;
/* Allocate memory for buffer */
@@ -90,7 +70,7 @@
}
computed_crc = crc32_le(IMAGETAG_CRC_START, (u8 *)buf,
-@@ -121,7 +91,6 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -101,7 +91,6 @@ static int bcm63xx_parse_cfe_partitions(
kerneladdr = kerneladdr - BCM63XX_EXTENDED_SIZE;
rootfsaddr = rootfsaddr - BCM63XX_EXTENDED_SIZE;
@@ -98,7 +78,7 @@
if (rootfsaddr < kerneladdr) {
/* default Broadcom layout */
-@@ -130,8 +99,8 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -110,8 +99,8 @@ static int bcm63xx_parse_cfe_partitions(
} else {
/* OpenWrt layout */
rootfsaddr = kerneladdr + kernellen;
@@ -109,22 +89,20 @@
}
} else {
pr_warn("CFE boot tag CRC invalid (expected %08x, actual %08x)\n",
-@@ -139,16 +108,153 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -119,23 +108,139 @@ static int bcm63xx_parse_cfe_partitions(
kernellen = 0;
rootfslen = 0;
rootfsaddr = 0;
- spareaddr = cfelen;
}
-- sparelen = min_not_zero(nvramaddr, caldataaddr1) - spareaddr;
+- sparelen = master->size - spareaddr - nvramlen;
- /* Determine number of partitions */
- if (rootfslen > 0)
- nrparts++;
+ if (kernellen > 0) {
+ int kernelpart = curr_part;
-
-- if (kernellen > 0)
-- nrparts++;
++
+ if (rootfslen > 0 && rootfs_first)
+ kernelpart++;
+ pparts[kernelpart].name = "kernel";
@@ -232,8 +210,6 @@
+ unsigned int nvramaddr;
+ unsigned int cfelen, nvramlen;
+ unsigned int cfe_erasesize;
-+ unsigned int caldatalen1 = 0, caldataaddr1 = 0;
-+ unsigned int caldatalen2 = 0, caldataaddr2 = 0;
+ unsigned int imageaddr, imagelen;
+ int i;
+
@@ -247,30 +223,11 @@
+ nvramlen = bcm63xx_nvram_get_psi_size() * SZ_1K;
+ nvramlen = roundup(nvramlen, cfe_erasesize);
+ nvramaddr = master->size - nvramlen;
-+
-+ if (data) {
-+ if (data->caldata[0]) {
-+ caldatalen1 = cfe_erasesize;
-+ caldataaddr1 = rounddown(data->caldata[0],
-+ cfe_erasesize);
-+ }
-+ if (data->caldata[1]) {
-+ caldatalen2 = cfe_erasesize;
-+ caldataaddr2 = rounddown(data->caldata[1],
-+ cfe_erasesize);
-+ }
-+ if (caldataaddr1 == caldataaddr2) {
-+ caldataaddr2 = 0;
-+ caldatalen2 = 0;
-+ }
-+ }
-+
-+ imageaddr = cfelen;
-+ imagelen = min_not_zero(nvramaddr, caldataaddr1) - imageaddr;
- if (caldatalen1 > 0)
- nrparts++;
-@@ -158,10 +264,8 @@ static int bcm63xx_parse_cfe_partitions(
+- if (kernellen > 0)
+- nrparts++;
++ imageaddr = cfelen;
++ imagelen = nvramaddr - imageaddr;
/* Ask kernel for more memory */
parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
@@ -282,7 +239,7 @@
/* Start building partition list */
parts[curpart].name = "CFE";
-@@ -169,29 +273,7 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -143,29 +248,7 @@ static int bcm63xx_parse_cfe_partitions(
parts[curpart].size = cfelen;
curpart++;
@@ -311,14 +268,14 @@
- }
+ curpart += parse_bcmtag(master, parts, curpart, imageaddr, imagelen);
- if (caldatalen1 > 0) {
- if (caldatalen2 > 0)
-@@ -217,25 +299,33 @@ static int bcm63xx_parse_cfe_partitions(
+ parts[curpart].name = "nvram";
+ parts[curpart].offset = master->size - nvramlen;
+@@ -174,25 +257,33 @@ static int bcm63xx_parse_cfe_partitions(
/* Global partition "linux" to make easy firmware upgrade */
parts[curpart].name = "linux";
- parts[curpart].offset = cfelen;
-- parts[curpart].size = min_not_zero(nvramaddr, caldataaddr1) - cfelen;
+- parts[curpart].size = master->size - cfelen - nvramlen;
+ parts[curpart].offset = imageaddr;
+ parts[curpart].size = imagelen;
+ curpart++;