summaryrefslogtreecommitdiff
path: root/include/chromeos
diff options
context:
space:
mode:
authorChe-Liang Chiou <clchiou@chromium.org>2011-07-20 12:54:02 +0800
committerSimon Glass <sjg@chromium.org>2011-08-29 10:59:05 -0700
commit02ed9d353315871f3d7a4a1cd91fafac50dafea6 (patch)
tree8b24522d0b86d4c40787ef7a48ab5b4f7eaa9084 /include/chromeos
parent1f824792fd983636f5626f4b24b9aa1e5485fe3a (diff)
CHROMIUM: use a fixed binary layout of crossystem data
The twostop design is envolved that crossysmem data is now not reinitialized again in readwrite main firmware, and relied on bootstub passing the blob around. Thus, the blob should have a fixed binary layout so that future readwrite main firmware can reliably parse the blob contents. Currently the readwrite main firmware just check the sanity of the blob. BUG=chromium-os:17876 TEST=crossystem blob passes the sanity check by readwrite main firmware Change-Id: I2981c10234c20d34e1405b5ab127bdc90faa2e3d Reviewed-on: http://gerrit.chromium.org/gerrit/4373 Tested-by: Che-Liang Chiou <clchiou@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Diffstat (limited to 'include/chromeos')
-rw-r--r--include/chromeos/crossystem_data.h77
1 files changed, 52 insertions, 25 deletions
diff --git a/include/chromeos/crossystem_data.h b/include/chromeos/crossystem_data.h
index ce7ffddcaf..8a7237e319 100644
--- a/include/chromeos/crossystem_data.h
+++ b/include/chromeos/crossystem_data.h
@@ -28,29 +28,47 @@
/* the data blob format */
typedef struct {
- uint32_t total_size;
- char signature[10];
- uint16_t version;
- uint64_t nvcxt_lba;
- uint16_t vbnv[2];
- uint8_t nvcxt_cache[VBNV_BLOCK_SIZE];
- uint8_t write_protect_sw;
- uint8_t recovery_sw;
- uint8_t developer_sw;
- int gpio_port_write_protect_sw;
- int gpio_port_recovery_sw;
- int gpio_port_developer_sw;
- uint8_t polarity_write_protect_sw;
- uint8_t polarity_recovery_sw;
- uint8_t polarity_developer_sw;
- uint8_t binf[5];
- uint32_t chsw;
- char hwid[ID_LEN];
- char fwid[ID_LEN];
- char frid[ID_LEN];
- uint32_t fmap_base;
- uint8_t vbshared_data[VB_SHARED_DATA_REC_SIZE];
-} crossystem_data_t;
+ uint32_t total_size; /* 0000 */
+ uint8_t signature[10]; /* 0004 */
+ uint16_t version; /* 000c */
+
+ uint64_t nvcxt_lba; /* 0010 */
+ uint16_t vbnv[2]; /* 0018 */
+ uint8_t nvcxt_cache[VBNV_BLOCK_SIZE]; /* 001c */
+
+ uint8_t write_protect_sw; /* 002c */
+ uint8_t recovery_sw; /* 002d */
+ uint8_t developer_sw; /* 002e */
+ uint8_t pad1[1];
+
+ uint32_t gpio_port_write_protect_sw; /* 0030 */
+ uint32_t gpio_port_recovery_sw; /* 0034 */
+ uint32_t gpio_port_developer_sw; /* 0038 */
+
+ uint8_t polarity_write_protect_sw; /* 003c */
+ uint8_t polarity_recovery_sw; /* 003d */
+ uint8_t polarity_developer_sw; /* 003e */
+ uint8_t pad2[1];
+
+ uint8_t binf[5]; /* 0040 */
+ uint8_t pad3[1];
+ uint32_t chsw; /* 0046 */
+
+ uint8_t hwid[ID_LEN]; /* 004a */
+ uint8_t fwid[ID_LEN]; /* 014a */
+ uint8_t frid[ID_LEN]; /* 024a */
+
+ uint32_t fmap_base; /* 034a */
+ uint8_t pad4[2];
+
+ /*
+ * VbSharedData contains fields of long word (64-bit) type, and so it
+ * should better be aligned on a 8-byte boundary on ARM platforms.
+ * Although ARM processors can access unaligned addresses, this feature
+ * is generally not enabled in U-Boot.
+ */
+ uint8_t vbshared_data[VB_SHARED_DATA_REC_SIZE]; /* 0350 */
+} __attribute__((packed)) crossystem_data_t;
/**
* This initializes the data blob that we will pass to kernel, and later be
@@ -69,11 +87,20 @@ typedef struct {
* @param devsw stores the value of developer mode gpio
* @return 0 if it succeeds; non-zero if it fails
*/
-int crossystem_data_init(crossystem_data_t *cdata, char *frid,
+int crossystem_data_init(crossystem_data_t *cdata, uint8_t *frid,
uint32_t fmap_data, void *gbb_data, void *nvcxt_raw,
cros_gpio_t *wpsw, cros_gpio_t *recsw, cros_gpio_t *devsw);
/**
+ * This checks sanity of the crossystem data blob. Readwrite main firmware
+ * should check the sanity of crossystem data that bootstub passes to it.
+ *
+ * @param cdata is the data blob shared with crossystem
+ * @return 0 if it succeeds; non-zero if the sanity check fails
+ */
+int crossystem_data_check_integrity(crossystem_data_t *cdata);
+
+/**
* This sets rewritable firmware id. It should only be called in non-recovery
* boots.
*
@@ -81,7 +108,7 @@ int crossystem_data_init(crossystem_data_t *cdata, char *frid,
* @param fwid r/w firmware id; a zero-terminated string shorter than ID_LEN
* @return 0 if it succeeds; non-zero if it fails
*/
-int crossystem_data_set_fwid(crossystem_data_t *cdata, char *fwid);
+int crossystem_data_set_fwid(crossystem_data_t *cdata, uint8_t *fwid);
/**
* This sets active main firmware and its type.