Skip to content

Commit bacdfd5

Browse files
committed
Update chipsec so XML names are not case sensitive
Signed-off-by: Nathaniel Mitchell <[email protected]>
1 parent 4f139a4 commit bacdfd5

File tree

7 files changed

+26
-4
lines changed

7 files changed

+26
-4
lines changed

chipsec/cfg/parsers/core_parser_helper.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class ConversionRules:
4949
int_list_keys: Set[str]
5050
str_list_keys: Set[str]
5151
range_list_keys: Set[str]
52+
case_insensitive_keys: Set[str]
5253

5354
@classmethod
5455
def default_rules(cls) -> 'ConversionRules':
@@ -68,7 +69,8 @@ def default_rules(cls) -> 'ConversionRules':
6869
bool_keys={'req_pch'},
6970
int_list_keys={'bus'},
7071
str_list_keys={'config'},
71-
range_list_keys=range_list_keys
72+
range_list_keys=range_list_keys,
73+
case_insensitive_keys={'name'}
7274
)
7375

7476
def set_did_as_range(self):
@@ -141,6 +143,8 @@ def _convert_attribute(self, key: str, value: str,
141143
return self._parse_range_data(value)
142144
elif key in rules.bool_keys:
143145
return value.lower() == 'true'
146+
elif key in rules.case_insensitive_keys:
147+
return value.upper()
144148
else:
145149
return value
146150
except ValueError as e:

chipsec/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,7 @@ def load_platform_config(self):
948948
###
949949
def set_scope(self, scope: Dict[str, str]) -> None:
950950
"""Set the current scope for register access."""
951-
self.scope.update(scope)
951+
self.scope.update((k.upper() if k is not None else None, v.upper() if v is not None else None) for k, v in scope.items())
952952

953953
def clear_scope(self) -> None:
954954
"""Clear the current scope for register access."""
@@ -975,7 +975,7 @@ def convert_platform_scope(self, scope, name):
975975
sname = scope + '.' + name
976976
else:
977977
sname = name
978-
return sname.split('.')
978+
return sname.upper().split('.')
979979

980980
def get_objlist(self, name: str):
981981
scope = self.get_scope(name)

chipsec/hal/intel/mmcfg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ def _find_base_instance(self, bus: int) -> Optional['PCIObj']:
9090
"""
9191
base_instance = None
9292
for _instance in self.base_list:
93+
if _instance is None or _instance.bus is None:
94+
continue
9395
if bus >= _instance.bus:
9496
base_instance = _instance
9597
else:

chipsec/hal/intel/spi.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import time
4747
from typing import Dict, List, Tuple, Optional
4848
from chipsec.library.defines import BIT0, BIT1, BIT2, BIT5
49+
from chipsec.library.register import NullRegister
4950
from chipsec.library.file import write_file, read_file
5051
from chipsec.library.logger import print_buffer_bytes
5152
from chipsec.hal import hal_base
@@ -124,6 +125,8 @@ def __init__(self, cs):
124125
# which are required to send SPI cycles once for performance reasons
125126
def get_registers(self) -> None:
126127
self.hsfs = self.cs.register.get_instance_by_name('8086.SPI.SPIBAR.HSFS', self.instance)
128+
if type(self.hsfs) is NullRegister:
129+
raise HALInitializationError(f"Missing SPIBAR registers [{self.hsfs.name}]. Be sure to have them defined for the SPI HAL to work.")
127130
self.hsfc = self.cs.register.get_instance_by_name('8086.SPI.SPIBAR.HSFC', self.instance)
128131
self.faddr = self.cs.register.get_instance_by_name('8086.SPI.SPIBAR.FADDR', self.instance)
129132
self.fdata0 = self.cs.register.get_instance_by_name('8086.SPI.SPIBAR.FDATA0', self.instance)

chipsec/library/control.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def get_list_by_name(self, control_name: str) -> ObjList:
5656
Returns:
5757
List of control objects matching the name
5858
"""
59+
control_name = control_name.upper()
5960
controls = ObjList()
6061
if control_name in self.cs.Cfg.CONTROLS:
6162
controls.extend(self.cs.Cfg.CONTROLS[control_name])
@@ -72,6 +73,7 @@ def get_instance_by_name(self, control_name: str, instance: Any) -> Optional[Any
7273
Returns:
7374
Control instance if found, None otherwise
7475
"""
76+
control_name = control_name.upper()
7577
if control_name in self.cs.Cfg.CONTROLS:
7678
for ctrl in self.cs.Cfg.CONTROLS[control_name]:
7779
if instance == ctrl.instance:
@@ -91,6 +93,7 @@ def get_def(self, control_name: str) -> List[Any]:
9193
Raises:
9294
KeyError: If control_name is not found in configuration
9395
"""
96+
control_name = control_name.upper()
9497
return self.cs.Cfg.CONTROLS[control_name]
9598

9699
def is_defined(self, control_name: str) -> bool:
@@ -103,4 +106,5 @@ def is_defined(self, control_name: str) -> bool:
103106
Returns:
104107
True if control is defined, False otherwise
105108
"""
109+
control_name = control_name.upper()
106110
return control_name in self.cs.Cfg.CONTROLS

chipsec/library/register.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ def set_value(self, value: int) -> None:
483483
self.value = value
484484

485485
def set_field(self, field_name: str, field_value: int) -> int:
486+
field_name = field_name.upper()
486487
field_attrs = self.fields[field_name]
487488
bit = field_attrs['bit']
488489
size = field_attrs['size']
@@ -492,6 +493,7 @@ def set_field(self, field_name: str, field_value: int) -> int:
492493
def get_field(
493494
self, field_name: str, preserve_field_position: Optional[bool] = False
494495
) -> int:
496+
field_name = field_name.upper()
495497
if self.value is None:
496498
self.read()
497499
field_attrs = self.fields[field_name]
@@ -500,6 +502,7 @@ def get_field(
500502
return get_bits(self.value, field_bit, field_size, preserve_field_position)
501503

502504
def has_field(self, field_name: str) -> bool:
505+
field_name = field_name.upper()
503506
return self.fields.get(field_name, None) is not None
504507

505508
def has_all_fields(self, field_names: List[str]) -> bool:
@@ -645,6 +648,8 @@ def is_any_value(self, value: int, mask: Optional[int] = None) -> bool:
645648

646649
def get_field_value_if_equivalent(self, field: str, preserve_field_position: bool = False) -> Optional[int]:
647650
"""Get field value if all instances have the same value for that field"""
651+
if len(self) == 0:
652+
return None
648653
field_value = self[0].get_field(field, preserve_field_position)
649654
if any(inst.get_field(field, preserve_field_position) != field_value for inst in self[1:]):
650655
return None
@@ -740,6 +745,10 @@ def has_field(self, field_name: str) -> bool:
740745
def get_field(self, field_name: str,
741746
preserve_field_position: bool = False) -> int:
742747
"""Null implementation of get_field."""
748+
field_name = field_name.upper()
743749
logger().log_warning(f'Attempted to get field {field_name} '
744750
f'from null register {self.name}')
745751
return 0
752+
753+
def read_field(self, field_name: str, preserve_field_position: bool = False) -> int:
754+
return self.get_field(field_name, preserve_field_position)

chipsec/modules/common/cpu/ia_untrusted.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def check_untrusted(self) -> int:
7777
if ia_untrusted == 0:
7878
res = ModuleResult.FAILED
7979
self.result.setStatusBit(self.result.status.CONFIGURATION)
80-
self.logger.log_bad(f'IA_UNTRUSTED not set on thread {bd.get_instace()}.')
80+
self.logger.log_bad(f'IA_UNTRUSTED not set on thread {bd.get_instance()}.')
8181
else:
8282
self.logger.log_good(f'IA_UNTRUSTED set on thread {bd.get_instance()}.')
8383
return res

0 commit comments

Comments
 (0)