Merge "[msm8x60]: Enable fastboot reboot for 8660."
diff --git a/target/msm7625_ffa/init.c b/target/msm7625_ffa/init.c
old mode 100644
new mode 100755
index 499a988..a43a586
--- a/target/msm7625_ffa/init.c
+++ b/target/msm7625_ffa/init.c
@@ -39,6 +39,10 @@
#define LINUX_MACHTYPE 1007003
+#define VARIABLE_LENGTH 0x10101010
+#define DIFF_START_ADDR 0xF0F0F0F0
+#define NUM_PAGES_PER_BLOCK 0x40
+
static struct ptable flash_ptable;
/* for these partitions, start will be offset by either what we get from
@@ -52,33 +56,38 @@
static struct ptentry board_part_list[] = {
{
.start = 0,
- .length = 40,
+ .length = 5 /* In MB */,
.name = "boot",
},
{
- .start = 40,
- .length = 680 /* 85MB */,
+ .start = DIFF_START_ADDR,
+ .length = 95 /* In MB */,
.name = "system",
},
{
- .start = 720,
- .length = 240 /* 30MB */,
+ .start = DIFF_START_ADDR,
+ .length = 1 /* In MB */,
.name = "cache",
},
{
- .start = 960,
- .length = 3 /* 384KB */,
+ .start = DIFF_START_ADDR,
+ .length = 1 /* In MB */,
.name = "misc",
},
{
- .start = 963,
- .length = 40 /* 5MB */,
- .name = "recovery",
+ .start = DIFF_START_ADDR,
+ .length = VARIABLE_LENGTH,
+ .name = "userdata",
},
{
- .start = 1003,
- .length = 517 /* 65MB */,
- .name = "userdata",
+ .start = DIFF_START_ADDR,
+ .length = 2 /* In MB */,
+ .name = "persist",
+ },
+ {
+ .start = DIFF_START_ADDR,
+ .length = 5 /* In MB */,
+ .name = "recovery",
},
};
static int num_parts = sizeof(board_part_list)/sizeof(struct ptentry);
@@ -94,6 +103,9 @@
{
unsigned offset;
struct flash_info *flash_info;
+ unsigned total_num_of_blocks;
+ unsigned next_ptr_start_adr = 0;
+ unsigned blocks_per_1MB = 8; /* Default value of 2k page size on 256MB flash drive*/
int i;
dprintf(INFO, "target_init()\n");
@@ -117,12 +129,32 @@
if (offset == 0xffffffff)
while(1);
+ total_num_of_blocks = flash_info->num_blocks;
+ blocks_per_1MB = (1 << 20) / (flash_info->block_size);
+
for (i = 0; i < num_parts; i++) {
struct ptentry *ptn = &board_part_list[i];
- unsigned len = ptn->length;
+ unsigned len = ((ptn->length) * blocks_per_1MB);
- if ((len == 0) && (i == num_parts - 1))
- len = flash_info->num_blocks - offset - ptn->start;
+ if(ptn->start != 0)
+ ASSERT(ptn->start == DIFF_START_ADDR);
+
+ ptn->start = next_ptr_start_adr;
+
+ if(ptn->length == VARIABLE_LENGTH)
+ {
+ unsigned length_for_prt = 0;
+ unsigned j;
+ for (j = i+1; j < num_parts; j++)
+ {
+ struct ptentry *temp_ptn = &board_part_list[j];
+ ASSERT(temp_ptn->length != VARIABLE_LENGTH);
+ length_for_prt += ((temp_ptn->length) * blocks_per_1MB);
+ }
+ len = (total_num_of_blocks - 1) - (offset + ptn->start + length_for_prt);
+ ASSERT(len >= 0);
+ }
+ next_ptr_start_adr = ptn->start + len;
ptable_add(&flash_ptable, ptn->name, offset + ptn->start,
len, ptn->flags, TYPE_APPS_PARTITION, PERM_WRITEABLE);
}
diff --git a/target/msm7625_surf/init.c b/target/msm7625_surf/init.c
old mode 100644
new mode 100755
index df075f8..7060e09
--- a/target/msm7625_surf/init.c
+++ b/target/msm7625_surf/init.c
@@ -39,6 +39,10 @@
#define LINUX_MACHTYPE 1007002
+#define VARIABLE_LENGTH 0x10101010
+#define DIFF_START_ADDR 0xF0F0F0F0
+#define NUM_PAGES_PER_BLOCK 0x40
+
static struct ptable flash_ptable;
/* for these partitions, start will be offset by either what we get from
@@ -52,33 +56,38 @@
static struct ptentry board_part_list[] = {
{
.start = 0,
- .length = 40,
+ .length = 5 /* In MB */,
.name = "boot",
},
{
- .start = 40,
- .length = 680 /* 85MB */,
+ .start = DIFF_START_ADDR,
+ .length = 95 /* In MB */,
.name = "system",
},
{
- .start = 720,
- .length = 240 /* 30MB */,
+ .start = DIFF_START_ADDR,
+ .length = 1 /* In MB */,
.name = "cache",
},
{
- .start = 960,
- .length = 3 /* 384KB */,
+ .start = DIFF_START_ADDR,
+ .length = 1 /* In MB */,
.name = "misc",
},
{
- .start = 963,
- .length = 40 /* 5MB */,
- .name = "recovery",
+ .start = DIFF_START_ADDR,
+ .length = VARIABLE_LENGTH,
+ .name = "userdata",
},
{
- .start = 1003,
- .length = 517 /* 65MB */,
- .name = "userdata",
+ .start = DIFF_START_ADDR,
+ .length = 2 /* In MB */,
+ .name = "persist",
+ },
+ {
+ .start = DIFF_START_ADDR,
+ .length = 5 /* In MB */,
+ .name = "recovery",
},
};
static int num_parts = sizeof(board_part_list)/sizeof(struct ptentry);
@@ -94,6 +103,9 @@
{
unsigned offset;
struct flash_info *flash_info;
+ unsigned total_num_of_blocks;
+ unsigned next_ptr_start_adr = 0;
+ unsigned blocks_per_1MB = 8; /* Default value of 2k page size on 256MB flash drive*/
int i;
dprintf(INFO, "target_init()\n");
@@ -117,12 +129,32 @@
if (offset == 0xffffffff)
while(1);
+ total_num_of_blocks = flash_info->num_blocks;
+ blocks_per_1MB = (1 << 20) / (flash_info->block_size);
+
for (i = 0; i < num_parts; i++) {
struct ptentry *ptn = &board_part_list[i];
- unsigned len = ptn->length;
+ unsigned len = ((ptn->length) * blocks_per_1MB);
- if ((len == 0) && (i == num_parts - 1))
- len = flash_info->num_blocks - offset - ptn->start;
+ if(ptn->start != 0)
+ ASSERT(ptn->start == DIFF_START_ADDR);
+
+ ptn->start = next_ptr_start_adr;
+
+ if(ptn->length == VARIABLE_LENGTH)
+ {
+ unsigned length_for_prt = 0;
+ unsigned j;
+ for (j = i+1; j < num_parts; j++)
+ {
+ struct ptentry *temp_ptn = &board_part_list[j];
+ ASSERT(temp_ptn->length != VARIABLE_LENGTH);
+ length_for_prt += ((temp_ptn->length) * blocks_per_1MB);
+ }
+ len = (total_num_of_blocks - 1) - (offset + ptn->start + length_for_prt);
+ ASSERT(len >= 0);
+ }
+ next_ptr_start_adr = ptn->start + len;
ptable_add(&flash_ptable, ptn->name, offset + ptn->start,
len, ptn->flags, TYPE_APPS_PARTITION, PERM_WRITEABLE);
}