cros_ec: Correct collection of EC hash

The EC now requires that the offset field be set correctly when checking
on hash status. Update the code to handle this. Use the same message
struct in both functions to reduce stack space.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/misc/cros_ec.c b/drivers/misc/cros_ec.c
index c367490..1b22f18 100644
--- a/drivers/misc/cros_ec.c
+++ b/drivers/misc/cros_ec.c
@@ -495,18 +495,18 @@
 }
 
 static int cros_ec_wait_on_hash_done(struct udevice *dev,
+				     struct ec_params_vboot_hash *p,
 				     struct ec_response_vboot_hash *hash)
 {
-	struct ec_params_vboot_hash p;
 	ulong start;
 
 	start = get_timer(0);
 	while (hash->status == EC_VBOOT_HASH_STATUS_BUSY) {
 		mdelay(50);	/* Insert some reasonable delay */
 
-		p.cmd = EC_VBOOT_HASH_GET;
-		if (ec_command(dev, EC_CMD_VBOOT_HASH, 0, &p, sizeof(p),
-		       hash, sizeof(*hash)) < 0)
+		p->cmd = EC_VBOOT_HASH_GET;
+		if (ec_command(dev, EC_CMD_VBOOT_HASH, 0, p, sizeof(*p), hash,
+			       sizeof(*hash)) < 0)
 			return -1;
 
 		if (get_timer(start) > CROS_EC_CMD_HASH_TIMEOUT_MS) {
@@ -530,7 +530,7 @@
 		return -1;
 
 	/* If the EC is busy calculating the hash, fidget until it's done. */
-	rv = cros_ec_wait_on_hash_done(dev, hash);
+	rv = cros_ec_wait_on_hash_done(dev, &p, hash);
 	if (rv)
 		return rv;
 
@@ -553,9 +553,13 @@
 		       hash, sizeof(*hash)) < 0)
 		return -1;
 
-	rv = cros_ec_wait_on_hash_done(dev, hash);
+	rv = cros_ec_wait_on_hash_done(dev, &p, hash);
 	if (rv)
 		return rv;
+	if (hash->status != EC_VBOOT_HASH_STATUS_DONE) {
+		log_err("Hash did not complete, status=%d\n", hash->status);
+		return -EIO;
+	}
 
 	debug("%s: hash done\n", __func__);