1# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import datetime, logging 6from autotest_lib.client.bin import test 7from autotest_lib.client.common_lib import error, smogcheck_ttci, smogcheck_util 8 9 10class hardware_TPMttci(test.test): 11 """ 12 Autotest test case to utilized C shared library for TPM SmogCheck. 13 """ 14 version = 1 15 16 def setup(self): 17 smogcheck_util.enableI2C() 18 self.ttci_obj = None 19 20 def _prepareTtciController(self): 21 """Prepare PcaController and InaController instances for use. 22 23 Returns: 24 an operational PcaController instance, ready to use. 25 an operational InaController instance, ready to use. 26 27 Raises: 28 TestFail: if error creating a new TtciController instance. 29 """ 30 try: 31 self.ttci_obj = smogcheck_ttci.TtciController() 32 except smogcheck_ttci.TtciError as e: 33 raise error.TestFail('Error creating a TtciController: %s' % e) 34 35 def _getMainPowerStatus(self): 36 """Wraps TTCI_Get_Main_Power_Status(). 37 38 Raises: 39 TestFail: if error getting main power status. 40 """ 41 ret, status = self.ttci_obj.TTCI_Get_Main_Power_Status() 42 if ret: 43 raise error.TestFail('TTCI_Get_Main_Power_Status() error: %s' % 44 self.ttci_obj.err) 45 logging.info('Main Power status = %r', status) 46 47 48 def _getBackupPowerStatus(self): 49 """Wraps TTCI_Get_Backup_Power_Status(). 50 51 Raises: 52 TestFail: if error getting backup power status. 53 """ 54 ret, status = self.ttci_obj.TTCI_Get_Backup_Power_Status() 55 if ret: 56 raise error.TestFail('TTCI_Get_Backup_Power_Status() error: %s' % 57 self.ttci_obj.err) 58 logging.info('Backup Power status = %r', status) 59 60 61 def _getTPMPhysicalPresenceStatus(self): 62 """Wraps TTCI_Get_PP_Status(). 63 64 Raises: 65 TestFail: if error getting Physical Presence status. 66 """ 67 ret, status = self.ttci_obj.TTCI_Get_PP_Status() 68 if ret: 69 raise error.TestFail('TTCI_Get_PP_Status() error: %s' % 70 self.ttci_obj.err) 71 logging.info('PP status = %r', status) 72 73 74 def _getTpmI2cStatus(self): 75 """Wraps TTCI_Get_TPM_I2C_Status(). 76 77 Raises: 78 TestFail: if error getting TPM I2C status. 79 """ 80 ret, status = self.ttci_obj.TTCI_Get_TPM_I2C_Status() 81 if ret: 82 raise error.TestFail('TTCI_Get_TPM_I2C_Status() error: %s' % 83 self.ttci_obj.err) 84 logging.info('TPM I2C status = %r', status) 85 86 def run_once(self): 87 # Initialize modules on TTCI 88 self._prepareTtciController() 89 90 start_time = datetime.datetime.now() 91 # Turn on LEDs sequentially 92 if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False): 93 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 94 self.ttci_obj.err) 95 96 if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False): 97 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 98 self.ttci_obj.err) 99 100 if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False): 101 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 102 self.ttci_obj.err) 103 104 if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False): 105 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 106 self.ttci_obj.err) 107 108 if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True): 109 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 110 self.ttci_obj.err) 111 112 if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=True, warning=True): 113 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 114 self.ttci_obj.err) 115 116 # Turn off LEDs sequentially 117 if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True): 118 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 119 self.ttci_obj.err) 120 121 if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False): 122 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 123 self.ttci_obj.err) 124 125 if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False): 126 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 127 self.ttci_obj.err) 128 129 if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False): 130 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 131 self.ttci_obj.err) 132 133 if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False): 134 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 135 self.ttci_obj.err) 136 137 if self.ttci_obj.TTCI_Set_LEDs(0x0, failure=False, warning=False): 138 raise error.TestFail('TTCI_Set_LEDs() error: %s' % 139 self.ttci_obj.err) 140 141 # Get bit status 142 ret, status = self.ttci_obj.TTCI_Get_Switch_Status() 143 if ret: 144 raise error.TestFail('TTCI_Get_Switch_Status() error: %s' % 145 self.ttci_obj.err) 146 logging.info('Switch status = %r', status) 147 148 ret, bit_value, failure, warning = self.ttci_obj.TTCI_Get_LED_Status() 149 if ret: 150 raise error.TestFail('TTCI_Get_LED_Status() error: %s' % 151 self.ttci_obj.err) 152 logging.info('LED status: bit_value=%r, failure=%r, warning=%r', 153 bit_value, failure, warning) 154 155 # Test Main Power 156 self._getMainPowerStatus() 157 if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=True): 158 raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' % 159 self.ttci_obj.err) 160 self._getMainPowerStatus() 161 if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=False): 162 raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' % 163 self.ttci_obj.err) 164 self._getMainPowerStatus() 165 166 # Test Backup Power 167 self._getBackupPowerStatus() 168 if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=True): 169 raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' % 170 self.ttci_obj.err) 171 self._getBackupPowerStatus() 172 if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=False): 173 raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' % 174 self.ttci_obj.err) 175 self._getBackupPowerStatus() 176 177 # Test Physical Presence 178 self._getTPMPhysicalPresenceStatus() 179 if self.ttci_obj.TTCI_Set_PP_Control(turn_on=True): 180 raise error.TestFail('TTCI_Set_PP_Control() error: %s' % 181 self.ttci_obj.err) 182 self._getTPMPhysicalPresenceStatus() 183 if self.ttci_obj.TTCI_Set_PP_Control(turn_on=False): 184 raise error.TestFail('TTCI_Set_PP_Control() error: %s' % 185 self.ttci_obj.err) 186 self._getTPMPhysicalPresenceStatus() 187 188 # Test TPM I2C bit 189 self._getTpmI2cStatus() 190 if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=True): 191 raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' % 192 self.ttci_obj.err) 193 self._getTpmI2cStatus() 194 if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=False): 195 raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' % 196 self.ttci_obj.err) 197 self._getTpmI2cStatus() 198 199 # Test Reset 200 if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=True): 201 raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' % 202 self.ttci_obj.err) 203 204 if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=False): 205 raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' % 206 self.ttci_obj.err) 207 208 end_time = datetime.datetime.now() 209 smogcheck_util.computeTimeElapsed(end_time, start_time) 210