• Brian Norris's avatar
    platform/chrome: cros_ec_proto: check for missing EC_CMD_HOST_EVENT_GET_WAKE_MASK · fc8cacf3
    Brian Norris authored
    As with cros_ec_cmd_xfer_status(), etc., it's not enough to simply check
    for the return status of send_command() -- that only covers transport or
    other similarly-fatal errors. One must also check the ->result field, to
    see whether the command really succeeded. If not, we can't use the data
    it returns.
    
    The caller of cros_ec_get_host_event_wake_mask() ignores this, and so
    for example, on EC's where the command is not implemented, we're using
    junk (or in practice, all zeros) for our wake-mask. We should be using a
    non-zero default (currently, it's supposed to be all-1's).
    
    Fix this by checking the ->result field and returning -EPROTO for
    errors.
    
    I might label this as fixing commit 29d99b96 ("cros_ec: Don't signal
    wake event for non-wake host events"), except that this fix alone
    actually may make things worse, as it now allows for a lot more spurious
    wakeups. The patch "platform/chrome: cros_ec_proto: ignore battery/AC
    wakeups on old ECs" helps to mitigate this.
    Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
    Signed-off-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
    fc8cacf3
cros_ec_proto.c 23.3 KB