xref: /aosp_15_r20/external/autotest/client/site_tests/hardware_TPMttci/hardware_TPMttci.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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