platform: msm_shared: Update board info format
Update board info to use major & minor socinfo format.
As minor socinfo is always backward compatible do not
halt if minor version is udpated. Assert only when
there is an update in the major version.
CRs-Fixed: 669707
Change-Id: Icaed1f957d0d3e6803096c1a4c313d40378eee8f
diff --git a/platform/msm_shared/board.c b/platform/msm_shared/board.c
index 48baa8f..1f5267b 100644
--- a/platform/msm_shared/board.c
+++ b/platform/msm_shared/board.c
@@ -50,78 +50,92 @@
unsigned ret = 0;
unsigned format = 0;
uint8_t i;
+ uint16_t format_major = 0;
+ uint16_t format_minor = 0;
ret = smem_read_alloc_entry_offset(SMEM_BOARD_INFO_LOCATION,
&format, sizeof(format), 0);
if (ret)
return;
- if (format == 6)
+ /* Extract the major & minor version info,
+ * Upper two bytes: major info
+ * Lower two byets: minor info
+ */
+ format_major = (format & 0xffff0000) >> 16;
+ format_minor = format & 0x0000ffff;
+
+ if (format_major == 0x0)
{
+ if (format_minor == 6)
+ {
board_info_len = sizeof(board_info_v6);
- ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
- &board_info_v6,
- board_info_len);
- if (ret)
- return;
+ ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
+ &board_info_v6,
+ board_info_len);
+ if (ret)
+ return;
- board.platform = board_info_v6.board_info_v3.msm_id;
- board.platform_version = board_info_v6.board_info_v3.msm_version;
- board.platform_hw = board_info_v6.board_info_v3.hw_platform;
- board.platform_subtype = board_info_v6.platform_subtype;
- }
- else if (format == 7)
- {
- board_info_len = sizeof(board_info_v7);
+ board.platform = board_info_v6.board_info_v3.msm_id;
+ board.platform_version = board_info_v6.board_info_v3.msm_version;
+ board.platform_hw = board_info_v6.board_info_v3.hw_platform;
+ board.platform_subtype = board_info_v6.platform_subtype;
+ }
+ else if (format_minor == 7)
+ {
+ board_info_len = sizeof(board_info_v7);
- ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
- &board_info_v7,
- board_info_len);
- if (ret)
- return;
+ ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
+ &board_info_v7,
+ board_info_len);
+ if (ret)
+ return;
- board.platform = board_info_v7.board_info_v3.msm_id;
- board.platform_version = board_info_v7.board_info_v3.msm_version;
- board.platform_hw = board_info_v7.board_info_v3.hw_platform;
- board.platform_subtype = board_info_v7.platform_subtype;
- board.pmic_info[0].pmic_type = board_info_v7.pmic_type;
- board.pmic_info[0].pmic_version = board_info_v7.pmic_version;
- }
- else if (format == 8 || format == 9)
- {
- board_info_len = sizeof(board_info_v8);
+ board.platform = board_info_v7.board_info_v3.msm_id;
+ board.platform_version = board_info_v7.board_info_v3.msm_version;
+ board.platform_hw = board_info_v7.board_info_v3.hw_platform;
+ board.platform_subtype = board_info_v7.platform_subtype;
+ board.pmic_info[0].pmic_type = board_info_v7.pmic_type;
+ board.pmic_info[0].pmic_version = board_info_v7.pmic_version;
+ }
+ else if (format_minor >= 8)
+ {
+ dprintf(INFO, "Minor socinfo format detected: %u.%u\n", format_major, format_minor);
- ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
- &board_info_v8,
- board_info_len);
- if (ret)
- return;
+ board_info_len = sizeof(board_info_v8);
- board.platform = board_info_v8.board_info_v3.msm_id;
- board.platform_version = board_info_v8.board_info_v3.msm_version;
- board.platform_hw = board_info_v8.board_info_v3.hw_platform;
- board.platform_subtype = board_info_v8.platform_subtype;
+ ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
+ &board_info_v8,
+ board_info_len);
+ if (ret)
+ return;
- /*
- * fill in board.target with variant_id information
- * bit no |31 24 | 23 16 | 15 8 |7 0|
- * board.target = |subtype| plat_hw_ver major | plat_hw_ver minor |hw_platform|
- *
- */
- board.target = (((board_info_v8.platform_subtype & 0xff) << 24) |
- (((board_info_v8.platform_version >> 16) & 0xff) << 16) |
- ((board_info_v8.platform_version & 0xff) << 8) |
- (board_info_v8.board_info_v3.hw_platform & 0xff));
+ board.platform = board_info_v8.board_info_v3.msm_id;
+ board.platform_version = board_info_v8.board_info_v3.msm_version;
+ board.platform_hw = board_info_v8.board_info_v3.hw_platform;
+ board.platform_subtype = board_info_v8.platform_subtype;
- for (i = 0; i < SMEM_V8_SMEM_MAX_PMIC_DEVICES; i++) {
- board.pmic_info[i].pmic_type = board_info_v8.pmic_info[i].pmic_type;
- board.pmic_info[i].pmic_version = board_info_v8.pmic_info[i].pmic_version;
+ /*
+ * fill in board.target with variant_id information
+ * bit no |31 24 | 23 16 | 15 8 |7 0|
+ * board.target = |subtype| plat_hw_ver major | plat_hw_ver minor |hw_platform|
+ *
+ */
+ board.target = (((board_info_v8.platform_subtype & 0xff) << 24) |
+ (((board_info_v8.platform_version >> 16) & 0xff) << 16) |
+ ((board_info_v8.platform_version & 0xff) << 8) |
+ (board_info_v8.board_info_v3.hw_platform & 0xff));
+
+ for (i = 0; i < SMEM_V8_SMEM_MAX_PMIC_DEVICES; i++) {
+ board.pmic_info[i].pmic_type = board_info_v8.pmic_info[i].pmic_type;
+ board.pmic_info[i].pmic_version = board_info_v8.pmic_info[i].pmic_version;
+ }
}
}
else
{
- dprintf(CRITICAL, "Unsupported board info format\n");
+ dprintf(CRITICAL, "Unsupported board info format %u.%u\n", format_major, format_minor);
ASSERT(0);
}
}