65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import logging
|
|
import time
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.server.cros.faft.firmware_test import FirmwareTest
|
|
|
|
|
|
class firmware_ECSharedMem(FirmwareTest):
|
|
"""
|
|
Servo based EC shared memory test.
|
|
"""
|
|
version = 1
|
|
|
|
def initialize(self, host, cmdline_args):
|
|
super(firmware_ECSharedMem, self).initialize(host, cmdline_args)
|
|
# Don't bother if there is no Chrome EC.
|
|
if not self.check_ec_capability():
|
|
raise error.TestNAError("Nothing needs to be tested on this device")
|
|
# Only run in normal mode
|
|
self.switcher.setup_mode('normal')
|
|
self.ec.send_command("chan 0")
|
|
|
|
def cleanup(self):
|
|
try:
|
|
self.ec.send_command("chan 0xffffffff")
|
|
except Exception as e:
|
|
logging.error("Caught exception: %s", str(e))
|
|
super(firmware_ECSharedMem, self).cleanup()
|
|
|
|
def shared_mem_checker(self):
|
|
"""Return whether there is still EC shared memory available.
|
|
"""
|
|
match = self.ec.send_command_get_output("shmem",
|
|
["Size:\s*([0-9-]+)\r"])[0]
|
|
shmem_size = int(match[1])
|
|
logging.info("EC shared memory size if %d bytes", shmem_size)
|
|
if shmem_size <= 0:
|
|
return False
|
|
elif shmem_size <= 256:
|
|
logging.warning("EC shared memory is less than 256 bytes")
|
|
return True
|
|
|
|
def jump_checker(self):
|
|
"""Check for available EC shared memory after jumping to RW image.
|
|
"""
|
|
self.ec.send_command("sysjump RW")
|
|
time.sleep(self.faft_config.ec_boot_to_console)
|
|
return self.shared_mem_checker()
|
|
|
|
def run_once(self):
|
|
"""Execute the main body of the test.
|
|
"""
|
|
logging.info("Check shared memory in normal operation and crash EC.")
|
|
self.check_state(self.shared_mem_checker)
|
|
self.switcher.mode_aware_reboot(
|
|
'custom', lambda:self.ec.send_command('crash unaligned'))
|
|
|
|
logging.info("Check shared memory after crash and system jump.")
|
|
self.check_state([self.shared_mem_checker, self.jump_checker])
|
|
self.switcher.mode_aware_reboot('custom', self.sync_and_ec_reboot)
|