blob: e10e691399d2d6ffb229c9e9e724c65fc9ac8585 [file] [log] [blame] [edit]
#!/usr/bin/python
#
# Copyright (c) 2014 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, os
from autotest_lib.client.bin import utils, test
from autotest_lib.client.common_lib import error
class kernel_CrosECSysfs(test.test):
'''Make sure the EC sysfs interface provides meaningful output'''
version = 1
cros_ec = '/dev/cros_ec'
sysfs_path = '/sys/devices/virtual/chromeos/cros_ec'
kernel_ver = os.uname()[2]
if utils.compare_versions(kernel_ver, "3.14") >= 0:
sysfs_path = '/sys/class/chromeos/cros_ec'
def _read_file(self, filename):
"""
Return the contents of the given file or fail.
@param filename Full path to the file to be read
"""
try:
content = utils.read_file(filename)
except Exception as err:
raise error.TestFail('sysfs file problem: %s' % err)
return content
def _read_sysfs(self, filename):
"""
Read the contents of the given sysfs file or fail
@param filename Name of the file within the sysfs interface directory
"""
fullpath = os.path.join(self.sysfs_path, filename)
return self._read_file(fullpath)
def _read_field(self, filename, field):
"""
Return the given field from the sysfs file or fail
@param filename Name of the file within the sysfs interface directory
@param field Name of field to match in the file content
"""
fullpath = os.path.join(self.sysfs_path, filename)
content = self._read_file(fullpath)
match = utils.get_field(content, 0, field)
if match is None:
raise error.TestFail("no '%s' field in %s" % (field, fullpath))
return match
def run_once(self):
"""
Quick check for the existence of the basic sysfs files
"""
# If /dev/cros_ec isn't present, then the MFD_CROS_EC_DEV driver isn't
# present, so there's no point to looking for the sysfs interface to it.
if not os.path.exists(self.cros_ec):
raise error.TestFail("%s not found. No driver?" % self.cros_ec)
flashsize = self._read_field('flashinfo', 'FlashSize')
logging.info("flashsize is %s", flashsize)
build = self._read_field('version', 'Build info:')
logging.info("build is %s", build)
reboot = self._read_sysfs('reboot')
if reboot.find("ro") < 0:
raise error.TestFail('reboot help is weird: %s' % reboot)
logging.info("reboot is %s", reboot)