diff options
author | Alec Berg <alecaberg@chromium.org> | 2014-08-14 18:31:05 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-08-26 23:06:23 +0000 |
commit | e913bc15b8a631757b362da09fc1385a7f509def (patch) | |
tree | 166afea132ba5e162988cb5346eeb48ba054d1a8 /include | |
parent | b22c10ce2e5d8186cff4623dbf6fb18ee6a62017 (diff) | |
download | chrome-ec-e913bc15b8a631757b362da09fc1385a7f509def.tar.gz |
samus: add host commands for flashing zinger RW
This adds a new host commmand for sending RW updates to PD devices.
The host command has a variety of sub-commands for performing the
update, including: erase RW, reboot, write new hash, write flash.
To program zinger RW, you should send host commands in this order:
write new hash to all 0's
reboot (zinger boots into RO since RW hash doesn't match)
erase RW
write flash
write new hash to match contents of RW
reboot
This also adds an ectool command to write a new RW. Just pass it
the RW .flat or .bin file.
BUG=chrome-os-partner:31361
BRANCH=none
TEST=ectool --dev=1 --interface=lpc flashpd 0 0 zinger.RW.flat
Change-Id: Ia81615001b83ad7ee69b1af2bf1d7059177cde04
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/213239
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/ec_commands.h | 20 | ||||
-rw-r--r-- | include/sha1.h | 5 | ||||
-rw-r--r-- | include/usb_pd.h | 3 |
3 files changed, 27 insertions, 1 deletions
diff --git a/include/ec_commands.h b/include/ec_commands.h index a8c9ab450b..83bca00c84 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -2528,6 +2528,26 @@ struct ec_params_usb_pd_control { uint8_t mux; } __packed; +/* Write USB-PD device FW */ +#define EC_CMD_USB_PD_FW_UPDATE 0x110 + +enum usb_pd_fw_update_cmds { + USB_PD_FW_REBOOT, + USB_PD_FW_FLASH_ERASE, + USB_PD_FW_FLASH_WRITE, + USB_PD_FW_FLASH_HASH, +}; + +struct ec_params_usb_pd_fw_update { + uint8_t cmd; + uint8_t dev_id; + uint8_t port; + uint8_t reserved; /* reserved */ + uint32_t size; /* Size to write in bytes */ + /* Followed by data to write */ +} __packed; + + /*****************************************************************************/ /* * Passthru commands diff --git a/include/sha1.h b/include/sha1.h index 152c5757d7..79ede0206a 100644 --- a/include/sha1.h +++ b/include/sha1.h @@ -9,7 +9,12 @@ #define _SHA1_H #include "common.h" +#ifdef HOST_TOOLS_BUILD +#include <string.h> +#define DIV_ROUND_UP(x, y) (((x) + ((y) - 1)) / (y)) +#else #include "util.h" +#endif #define SHA1_DIGEST_SIZE 20 #define SHA1_BLOCK_SIZE 64 diff --git a/include/usb_pd.h b/include/usb_pd.h index 3afef69d1a..83fee88cf0 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -301,7 +301,8 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload); * @param data Pointer to payload to send * @param data number of data objects in payload */ -void pd_send_vdm(int port, uint32_t vid, int cmd, uint32_t *data, int count); +void pd_send_vdm(int port, uint32_t vid, int cmd, const uint32_t *data, + int count); /* Power Data Objects for the source and the sink */ extern const uint32_t pd_src_pdo[]; |