platform: msm_shared: Support run time detection of the device tree header size.
Read the first page of the device tree header to calculate the length of the
header.
Change-Id: Ifc0cdfe5ed9b31117d8d153ffd19c8aafbdd78ad
diff --git a/platform/msm_shared/dev_tree.c b/platform/msm_shared/dev_tree.c
index 4e1d44f..7ff5a82 100644
--- a/platform/msm_shared/dev_tree.c
+++ b/platform/msm_shared/dev_tree.c
@@ -197,9 +197,10 @@
}
/* Returns 0 if the device tree is valid. */
-int dev_tree_validate(struct dt_table *table, unsigned int page_size)
+int dev_tree_validate(struct dt_table *table, unsigned int page_size, uint32_t *dt_hdr_size)
{
int dt_entry_size;
+ uint32_t hdr_size;
/* Validate the device tree table header */
if(table->magic != DEV_TREE_MAGIC) {
@@ -217,8 +218,11 @@
return -1;
}
- /* Restriction that the device tree entry table should be less than a page*/
- ASSERT(((table->num_entries * dt_entry_size)+ DEV_TREE_HEADER_SIZE) < page_size);
+ hdr_size = table->num_entries * dt_entry_size + DEV_TREE_HEADER_SIZE;
+ /* Roundup to page_size. */
+ hdr_size = ROUNDUP(hdr_size, page_size);
+
+ *dt_hdr_size = hdr_size;
return 0;
}
diff --git a/platform/msm_shared/include/dev_tree.h b/platform/msm_shared/include/dev_tree.h
index 2a8ee01..b88a47d 100644
--- a/platform/msm_shared/include/dev_tree.h
+++ b/platform/msm_shared/include/dev_tree.h
@@ -66,7 +66,7 @@
DT_OP_FAILURE = -1,
};
-int dev_tree_validate(struct dt_table *table, unsigned int page_size);
+int dev_tree_validate(struct dt_table *table, unsigned int page_size, uint32_t *dt_hdr_size);
int dev_tree_get_entry_info(struct dt_table *table, struct dt_entry *dt_entry_info);
int update_device_tree(void *, const char *, void *, unsigned);
int dev_tree_add_mem_info(void *fdt, uint32_t offset, uint32_t size, uint32_t addr);