]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: Init the EC properly even if no state file is available
authorSimon Glass <sjg@chromium.org>
Tue, 26 Sep 2023 14:14:48 +0000 (08:14 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 6 Oct 2023 18:38:13 +0000 (14:38 -0400)
This currently relies on sandbox attempting to read a state file. At
present it always does, even when there is no state file, in which case it
fails, but still inits the EC.

That is a bug, so update this driver to set the current image always, even
if no state is read.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/misc/cros_ec_sandbox.c

index 8dbe0b188a48a5e24d850d167e2db90de40e9054..1201535f4af4b834cedcfc0e5a1c4983bf5e8015 100644 (file)
@@ -81,6 +81,7 @@ struct ec_pwm_channel {
 /**
  * struct ec_state - Information about the EC state
  *
+ * @valid: true if this struct contains valid state data
  * @vbnv_context: Vboot context data stored by EC
  * @ec_config: FDT config information about the EC (e.g. flashmap)
  * @flash_data: Contents of flash memory
@@ -95,6 +96,7 @@ struct ec_pwm_channel {
  * @pwm: Information per PWM channel
  */
 struct ec_state {
+       bool valid;
        u8 vbnv_context[EC_VBNV_BLOCK_SIZE_V2];
        struct fdt_cros_ec ec_config;
        uint8_t *flash_data;
@@ -145,6 +147,7 @@ static int cros_ec_read_state(const void *blob, int node)
                memcpy(ec->flash_data, prop, len);
                debug("%s: Loaded EC flash data size %#x\n", __func__, len);
        }
+       ec->valid = true;
 
        return 0;
 }
@@ -589,6 +592,7 @@ static int process_cmd(struct ec_state *ec,
                printf("   ** Unknown EC command %#02x\n", req_hdr->command);
                return -1;
        }
+       debug(" - EC command %#0x, result %d\n", req_hdr->command, len);
 
        return len;
 }
@@ -675,7 +679,10 @@ int cros_ec_probe(struct udevice *dev)
        ofnode node;
        int err;
 
-       memcpy(ec, &s_state, sizeof(*ec));
+       if (s_state.valid)
+               memcpy(ec, &s_state, sizeof(*ec));
+       else
+               ec->current_image = EC_IMAGE_RO;
        err = cros_ec_decode_ec_flash(dev, &ec->ec_config);
        if (err) {
                debug("%s: Cannot device EC flash\n", __func__);