Skip to content

Commit 5bb516e

Browse files
committed
Add hst_block_db to enable smbus block_reads
Signed-off-by: Nathaniel Mitchell <nathaniel.p.mitchell@intel.com>
1 parent 32aed14 commit 5bb516e

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

chipsec/cfg/8086/SMBUS/smbus1.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@
8080
<register name="HST_D1" type="iobar" bar="SMBUS_BASE" offset="0x06" size="1" desc="SMBus Host Data 1">
8181
<field name="Data" bit="0" size="8" desc="Data1" />
8282
</register>
83+
<register name="HST_BLOCK_DB" type="iobar" bar="SMBUS_BASE" offset="0x07" size="1" desc="SMBus Host Block Data">
84+
<field name="BDTA" bit="0" size="8" desc="Block Data" />
85+
</register>
8386

8487
<!-- PCH TCOBASE (SMBus TCO) I/O registers -->
8588
<register name="TCO1_CNT" type="iobar" bar="TCOBASE" offset="0x8" size="2" desc="TCO1 Control">

chipsec/library/bits.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,11 @@ def get_bits(value: int, field_bit: int, size: int, preserve_field_position: Opt
126126

127127

128128

129-
def set_bits(bit: int, size: int, initial_value: int, value: int) -> int:
129+
def set_bits(bit: int, size: int, initial_value: int, value: int, preserve_field_position: Optional[bool] = False) -> int:
130130
field_mask = make_mask(size)
131131
new_value = initial_value & ~(field_mask << bit)
132-
new_value |= ((value & field_mask) << bit)
132+
if preserve_field_position:
133+
new_value |= (value & (field_mask << bit))
134+
else:
135+
new_value |= ((value & field_mask) << bit)
133136
return new_value

chipsec/library/register.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,12 +484,12 @@ def get_instance(self) -> Any:
484484
def set_value(self, value: int) -> None:
485485
self.value = value
486486

487-
def set_field(self, field_name: str, field_value: int) -> int:
487+
def set_field(self, field_name: str, field_value: int, preserve_field_position: Optional[bool] = False) -> int:
488488
field_name = field_name.upper()
489489
field_attrs = self.fields[field_name]
490490
bit = field_attrs['bit']
491491
size = field_attrs['size']
492-
self.value = set_bits(bit, size, self.value, field_value)
492+
self.value = set_bits(bit, size, self.value, field_value, preserve_field_position)
493493
return self.value
494494

495495
def get_field(
@@ -526,13 +526,13 @@ def get_field_mask(
526526
return mask
527527

528528
def write_field(
529-
self, field_name: str, field_value: int, update_value: bool = False
529+
self, field_name: str, field_value: int, update_value: bool = False, preserve_field_position: Optional[bool] = False
530530
) -> None:
531531
if update_value or self.value is None:
532532
if self.value is None:
533533
self.logger.log_debug(f'Value is None for {self.name}. Reading value')
534534
self.read()
535-
new_value = self.set_field(field_name, field_value)
535+
new_value = self.set_field(field_name, field_value, preserve_field_position)
536536
self.write(new_value)
537537

538538
def read_field(

0 commit comments

Comments
 (0)