diff options
-rw-r--r-- | board/zinger/board.h | 1 | ||||
-rw-r--r-- | board/zinger/usb_pd_policy.c | 2 | ||||
-rw-r--r-- | common/version.c | 31 | ||||
-rw-r--r-- | include/usb_pd.h | 8 | ||||
-rw-r--r-- | include/version.h | 4 |
5 files changed, 41 insertions, 5 deletions
diff --git a/board/zinger/board.h b/board/zinger/board.h index f3a0d3dc5f..e26d5a5e96 100644 --- a/board/zinger/board.h +++ b/board/zinger/board.h @@ -44,7 +44,6 @@ /* USB PD ChromeOS VDM information */ #define USB_PD_HARDWARE_DEVICE_ID 1 -#define USB_PD_DBG_SW_VERSION 255 #ifndef __ASSEMBLER__ diff --git a/board/zinger/usb_pd_policy.c b/board/zinger/usb_pd_policy.c index 591021bb56..6ef6fee461 100644 --- a/board/zinger/usb_pd_policy.c +++ b/board/zinger/usb_pd_policy.c @@ -376,7 +376,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) /* copy other info into response */ payload[SHA1_DIGEST_SIZE/4 + 1] = VDO_INFO( USB_PD_HARDWARE_DEVICE_ID, - USB_PD_DBG_SW_VERSION, + ver_get_numcommits(), !is_ro_mode()); rsize = 7; break; diff --git a/common/version.c b/common/version.c index a2f554e58d..766b4ad56b 100644 --- a/common/version.c +++ b/common/version.c @@ -18,3 +18,34 @@ const struct version_struct version_data const char build_info[] __attribute__((section(".rodata.buildinfo"))) = CROS_EC_VERSION " " DATE " " BUILDER; + +uint32_t ver_get_numcommits(void) +{ + int i; + int numperiods = 0; + uint32_t ret = 0; + + /* + * Version string is formatted like: + * name_major.branch.numcommits-hash[dirty] + * we want to return the numcommits as an int. + */ + for (i = 0; i < 32; i++) { + if (version_data.version[i] == '.') { + numperiods++; + if (numperiods == 2) + break; + } + } + + i++; + for (; i < 32; i++) { + if (version_data.version[i] == '-') + break; + ret *= 10; + ret += version_data.version[i] - '0'; + } + + return (i == 32 ? 0 : ret); +} + diff --git a/include/usb_pd.h b/include/usb_pd.h index 4a9376a369..507a81fe7f 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -137,12 +137,14 @@ enum pd_errors { * ChromeOS specific VDO_CMD_READ_INFO responds with device info including: * RW Hash: sha1 of RW hash (20 bytes) * HW Device ID: unique descriptor for each ChromeOS model (2 bytes) - * SW Debug Version: Software version useful for debugging (1 byte) + * SW Debug Version: Software version useful for debugging (15 bits) * IS RW: True if currently in RW, False otherwise (1 bit) */ -#define VDO_INFO(id, ver, is_rw) ((id) << 16 | (ver) << 8 | (is_rw)) +#define VDO_INFO(id, ver, is_rw) ((id) << 16 \ + | ((ver) & 0x7fff) << 1 \ + | ((is_rw) & 1)) #define VDO_INFO_HW_DEV_ID(x) ((x) >> 16) -#define VDO_INFO_SW_DBG_VER(x) (((x) >> 8) & 0xff) +#define VDO_INFO_SW_DBG_VER(x) (((x) >> 1) & 0x7fff) #define VDO_INFO_IS_RW(x) ((x) & 1) /* USB Vendor ID assigned to Google Inc. */ diff --git a/include/version.h b/include/version.h index 42d176916f..8853d76561 100644 --- a/include/version.h +++ b/include/version.h @@ -23,4 +23,8 @@ extern const struct version_struct version_data; extern const char build_info[]; extern const char __version_struct_offset[]; +/** + * Get the number of commits field from version string. + */ +uint32_t ver_get_numcommits(void); #endif /* __CROS_EC_VERSION_H */ |