Update SDFP commit

Moved sfdp to common configuration
updated spi hal to use register functions opposed to xml parsing

Signed-off-by: BrentHoltsclaw <brent.holtsclaw@intel.com>
This commit is contained in:
BrentHoltsclaw
2020-01-14 09:44:40 -08:00
committed by npmitche
parent 407ab6a4bc
commit 24e97b3e56
4 changed files with 64 additions and 129 deletions
+26 -22
View File
@@ -1,5 +1,7 @@
<SFDP>
<register name="DWORD1" offset="0x00" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 1st DWORD " >
<?xml version="1.0"?>
<configuration>
<registers>
<register name="DWORD1" offset="0x00" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 1st DWORD " >
<field name="BLK_ERASE_SUPPORT" bit="0" size="2" desc="Block Sector Erase Sizes" />
<field name="WR_GRANULTY" bit="2" size="1" desc="Write Granularity" />
<field name="BLK_PRT_VOL_STATUS" bit="3" size="1" desc="Write Enable Instruction Required for Writing to Volatile Status Register" />
@@ -14,10 +16,10 @@
<field name="FASTREAD_114_SUPPORT" bit="22" size="1" desc="Supports ( 1-4-4) fast read" />
<field name="UNUSED" bit="23" size="9" desc="Unused" />
</register>
<register name="DWORD2" offset="0x04" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 2nd DWORD " >
<register name="DWORD2" offset="0x04" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 2nd DWORD " >
<field name="FLASH_MEM_DENSITY" bit="0" size="32" desc="Flash Memory Density" />
</register>
<register name="DWORD3" offset="0x08" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 3rd DWORD " >
<register name="DWORD3" offset="0x08" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 3rd DWORD " >
<field name="144_FR_NUM_WAIT_STATES" bit="0" size="5" desc="(1-4-4) fast read number of wait states (dummy clocks) needed before valid
output" />
<field name="144_FR_QUAD_NUM_MODE_CLKS" bit="5" size="3" desc="Quad Input Address Quad Output (1-4-4) Fast Read Number of Mode Bits" />
@@ -27,7 +29,7 @@ output" />
<field name="114_FR_INST" bit="24" size="8" desc="(1-1-4) fast read Opcode" />
</register>
<register name="DWORD4" offset="0xC" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 4th DWORD " >
<register name="DWORD4" offset="0xC" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 4th DWORD " >
<field name="112_FR_NUM_WAIT_STATES" bit="0" size="5" desc="(1-1-2) fast read Number of Wait states (dummy clocks) needed before valid
output" />
<field name="112_FR_NUM_MODE_CLKS" bit="5" size="3" desc="(1-1-2) fast read Number of Mode Bits" />
@@ -37,14 +39,14 @@ output" />
<field name="122_FR_INST" bit="24" size="8" desc="(1-2-2) fast read Opcode" />
</register>
<register name="DWORD5" offset="0x10" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 5th DWORD " >
<register name="DWORD5" offset="0x10" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 5th DWORD " >
<field name="222_FR_SUPPORT" bit="0" size="1" desc="Supports (2-2-2) fast read" />
<field name="Reserved" bit="1" size="3" desc="Reserved" />
<field name="444_FR_SUPPORT" bit="4" size="1" desc="Supports ( 4-4-4) fast read" />
<field name="RESERVED" bit="5" size="27" desc="Reserved" />
</register>
<register name="DWORD6" offset="0x14" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 6th DWORD " >
<register name="DWORD6" offset="0x14" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 6th DWORD " >
<field name="RESERVED" bit="0" size="16" desc="Reserved" />
<field name="222_FR_NUM_WAIT_STATES" bit="16" size="5" desc="(2-2-2) fast read Number of Wait states (dummy clocks) needed before valid
output" />
@@ -52,7 +54,7 @@ output" />
<field name="222_FR_INST" bit="24" size="8" desc="(2-2-2) fast read Opcode" />
</register>
<register name="DWORD7" offset="0x18" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 7th DWORD " >
<register name="DWORD7" offset="0x18" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 7th DWORD " >
<field name="RESERVED" bit="0" size="16" desc="Reserved" />
<field name="444_FR_NUM_WAIT_STATES" bit="16" size="5" desc="(4-4-4) fast read number of wait states (dummy clocks) needed before valid
output" />
@@ -60,21 +62,21 @@ output" />
<field name="444_FR_INST" bit="24" size="8" desc="(4-4-4) fast read Opcode" />
</register>
<register name="DWORD8" offset="0x1C" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 8th DWORD " >
<register name="DWORD8" offset="0x1C" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 8th DWORD " >
<field name="ERASE_TYPE1_SIZE" bit="0" size="8" desc="Sector Type 1 size" />
<field name="ERASE_TYPE1_INST" bit="8" size="8" desc="Sector Type 1 Opcode" />
<field name="ERASE_TYPE2_SIZE" bit="16" size="8" desc="Sector Type 2 size" />
<field name="ERASE_TYPE1_INST" bit="24" size="8" desc="Sector Type 2 Opcode" />
</register>
<register name="DWORD9" offset="0x20" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 9th DWORD " >
<register name="DWORD9" offset="0x20" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 9th DWORD " >
<field name="ERASE_TYPE3_SIZE" bit="0" size="8" desc="Sector Type 3 size" />
<field name="ERASE_TYPE3_OPCODE" bit="8" size="8" desc="Sector Type 3 Opcode" />
<field name="ERASE_TYPE4_SIZE" bit="16" size="8" desc="Sector Type 4 size" />
<field name="ERASE_TYPE4_OPCODE" bit="24" size="8" desc="Sector Type 4 Opcode" />
</register>
<register name="DWORD10" offset="0x24" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 10th DWORD " >
<register name="DWORD10" offset="0x24" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 10th DWORD " >
<field name="MULTIPLIER" bit="0" size="4" desc="Multiplier from typical erase time to maximum erase time" />
<field name="ERASE_TYPE1_TIME" bit="4" size="7" desc="Erase Type 1 Erase, Typical time" />
<field name="ERASE_TYPE2_TIME" bit="11" size="7" desc="Erase Type 2 Erase, Typical time" />
@@ -82,7 +84,7 @@ output" />
<field name="ERASE_TYPE4_TIME" bit="25" size="7" desc="Erase Type 4 Erase, Typical time" />
</register>
<register name="DWORD11" offset="0x28" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 11th DWORD " >
<register name="DWORD11" offset="0x28" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 11th DWORD " >
<field name="MULTIPLIER" bit="0" size="4" desc="Multiplier from typical to maximum erase time for page or Byte program" />
<field name="PAGE_SIZE" bit="4" size="4" desc="Page Size" />
<field name="PAGE_PRG_TYPICAL_TIME" bit="8" size="6" desc="Page Program Typical time" />
@@ -92,7 +94,7 @@ output" />
<field name="Reserved" bit="31" size="1" desc="Reserved" />
</register>
<register name="DWORD12" offset="0x2C" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 12th DWORD " >
<register name="DWORD12" offset="0x2C" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 12th DWORD " >
<field name="PO_PRG_SUSPEND" bit="0" size="4" desc="Prohibited Operations During Program Suspend" />
<field name="PO_ERASE_SUSPEND" bit="4" size="4" desc="Prohibited Operations During Erase Suspend" />
<field name="Reserved" bit="8" size="1" desc="Reserved" />
@@ -103,14 +105,14 @@ output" />
<field name="SUSPEND_RESUME_SUPPORT" bit="31" size="1" desc="Suspend/Resume Supported" />
</register>
<register name="DWORD13" offset="0x30" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 13th DWORD " >
<register name="DWORD13" offset="0x30" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 13th DWORD " >
<field name="PRG_RESUME_INST" bit="0" size="8" desc="Program Resume Instruction" />
<field name="PRG_SUSP_INST" bit="8" size="8" desc="Program Suspend Instruction" />
<field name="RESUME_INST" bit="16" size="8" desc="Resume Instruction" />
<field name="SUSP_INST" bit="24" size="8" desc="Suspend Instruction" />
</register>
<register name="DWORD14" offset="0x34" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 14th DWORD " >
<register name="DWORD14" offset="0x34" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 14th DWORD " >
<field name="RESERVED" bit="0" size="2" desc="Reserved" />
<field name="STS_POLLING_BUSY" bit="2" size="6" desc="Status Register Polling Device Busy" />
<field name="EXIT_DPWDOWN_DELAY" bit="8" size="7" desc="Exit Deep Powerdown to next operation delay" />
@@ -119,7 +121,7 @@ output" />
<field name="DPWDOWN_SUPPORT" bit="31" size="1" desc="Deep Powerdown Supported" />
</register>
<register name="DWORD15" offset="0x38" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 15th DWORD " >
<register name="DWORD15" offset="0x38" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 15th DWORD " >
<field name="444_DISABLE_SEQ" bit="0" size="4" desc="4-4-4 mode disable sequences" />
<field name="444_ENABLE_SEQ" bit="4" size="5" desc="4-4-4 mode enable sequences" />
<field name="044_MODE_SUPPORTED" bit="9" size="1" desc="0-4-4 mode supported" />
@@ -130,14 +132,14 @@ output" />
<field name="RESERVED" bit="24" size="8" desc="Reserved" />
</register>
<register name="DWORD16" offset="0x3C" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 16th DWORD " >
<register name="DWORD16" offset="0x3C" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 16th DWORD " >
<field name="VLT_WRENABLE_INST" bit="0" size="7" desc="Volatile or Non-Volatile Register and Write Enable Instruction for Status Register 1" />
<field name="RESERVED" bit="7" size="1" desc="Reserved" />
<field name="SRESET_RESC_SUPPORT" bit="8" size="6" desc="Soft Reset and Rescue Sequence Support" />
<field name="EXIT_4BYTE_ADDR" bit="14" size="10" desc="Exit 4 Byte Addressing" />
<field name="ENTER_4BYTE_ADDR" bit="24" size="8" desc="Enter 4 Byte Addressing" />
</register>
<register name="DWORD17" offset="0x40" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 17th DWORD " >
<register name="DWORD17" offset="0x40" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 17th DWORD " >
<field name="188_FR_NUM_WAIT_STATES" bit="0" size="5" desc="(1-8-8) Fast Read Number of Wait states (dummy clocks) needed before valid output" />
<field name="188_FR_NUM_MOD_CLKS" bit="5" size="3" desc="(1-8-8) Fast Read Number of Mode Clocks" />
<field name="188_FR_INST" bit="8" size="8" desc="(1-8-8) Fast Read Instruction" />
@@ -145,7 +147,7 @@ output" />
<field name="118_FR_NUM_MOD_CLKS" bit="21" size="3" desc="(1-1-8) Fast Read Number of Mode Clocks" />
<field name="118_FR_INST" bit="24" size="8" desc="(1-8-8) Fast Read Instruction" />
</register>
<register name="DWORD18" offset="0x44" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 18th DWORD " >
<register name="DWORD18" offset="0x44" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 18th DWORD " >
<field name="Reserved" bit="0" size="18" desc="Reserved" />
<field name="VAR_OUT_DRV_STRENGTH" bit="18" size="5" desc="Variable Output Driver Strength" />
<field name="JEDEC_SPI_RESET" bit="23" size="1" desc="JEDEC SPI Protocol Reset (In-Band Reset)" />
@@ -157,7 +159,7 @@ output" />
<field name="8D8D8D_BYTE_ORDER_MODE" bit="31" size="1" desc="Octal DTR (8D-8D-8D) Command and Command Extension" />
</register>
<register name="DWORD19" offset="0x48" access="R Byte" desc="JEDEC Basic Flash Parameter Table: 19th DWORD " >
<register name="DWORD19" offset="0x48" type="R Byte" desc="JEDEC Basic Flash Parameter Table: 19th DWORD " >
<field name="8S8S8S_DISABLE_SEQ" bit="0" size="4" desc="8S-8S-8S mode disable sequences" />
<field name="8S8S8S_ENABLE_SEQ" bit="4" size="5" desc="8S-8S-8S mode enable sequences" />
<field name="088_MODE_SUPPORTED" bit="9" size="1" desc="0-8-8 mode supported" />
@@ -167,7 +169,7 @@ output" />
<field name="RESERVED" bit="23" size="9" desc="Reserved" />
</register>
<register name="DWORD20" offset="0x4C" access="R Byte" desc=" " >
<register name="DWORD20" offset="0x4C" type="R Byte" desc=" " >
<field name="MAX4SMODE_SPEED_WITHOUT_STRB" bit="0" size="4" desc="Maximum operation speed of device in 4S-4S-4S mode when not utilizing Data Strobe" />
<field name="MAX4SMODE_SPEED_WITH_STRB" bit="4" size="4" desc="Maximum operation speed of device in 4S-4S-4S mode when utilizing Data Strobe" />
<field name="MAX4S4D4DMODE_SPEED_WITHOUT_STRB" bit="8" size="4" desc="Maximum operation speed of device in 4S-4D-4D mode when not utilizing Data Strobe" />
@@ -178,5 +180,7 @@ output" />
<field name="MAX8DMODE_SPEED_WITH_STRB" bit="28" size="4" desc="Maximum operation speed of device in 8D-8D-8D mode when utilizing Data Strobe" />
</register>
</SFDP>
</registers>
</configuration>
+4 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/python
#CHIPSEC: Platform Security Assessment Framework
#Copyright (c) 2010-2019, Intel Corporation
#Copyright (c) 2010-2020, Intel Corporation
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
@@ -1095,7 +1095,9 @@ class Chipset:
elif RegisterType.IOBAR == rtype:
reg_str = "[*] {} = {} << {} (I/O {} + 0x{:X})".format(reg_name, reg_val_str, reg['desc'], reg['bar'], int(reg['offset'],16))
elif RegisterType.MSGBUS == rtype or RegisterType.MM_MSGBUS == rtype:
reg_str = "[*] {} = {} << {} (msgbus port 0x{:X}, off 0x{:X})".format(reg_name, reg_val_str, reg['desc'], int(reg['port'],16), int(reg['offset'],16))
reg_str = "[*] %s = %s << %s (msgbus port 0x%X, off 0x%X)" % (reg_name, reg_val_str, reg['desc'], int(reg['port'],16), int(reg['offset'],16))
else:
reg_str = "[*] {} = {} << {}".format(reg_name, reg_val_str, reg['desc'])
reg_str += self._register_fields_str(reg, reg_val)
logger().log( reg_str )
+26 -97
View File
@@ -1,6 +1,6 @@
#!/usr/bin/python
#CHIPSEC: Platform Security Assessment Framework
#Copyright (c) 2010-2019, Intel Corporation
#Copyright (c) 2010-2020, Intel Corporation
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
@@ -55,7 +55,6 @@ usage:
import struct
import sys
import time
import xml.etree.ElementTree as ET
import chipsec.defines
from chipsec.file import *
@@ -176,10 +175,6 @@ class SpiAccessError (RuntimeError):
class SPI(hal_base.HALBase):
# XML device definition files stuff
XML_ROOT_NAME = "SFDP"
XML_COMMAND_NODE_TAG = "register"
XML_FIELD_NODE_TAG = "field"
def __init__(self, cs):
super(SPI, self).__init__(cs)
@@ -699,94 +694,39 @@ class SPI(hal_base.HALBase):
#
# SPI SFDP operations
#
def parse_dev_file(self, file_path):
return ET.parse(file_path)
def check_def_file(self, filename):
base_name = os.path.basename(filename)
full_path = os.path.join( chipsec.file.get_main_dir(), 'chipsec/cfg', base_name )
if not os.path.exists(full_path):
self.logger.error("The file %s does not exist!" % base_name)
return False
else:
if logger().VERBOSE: self.logger.log("checking file {0} ...".format(base_name))
try:
tree = self.parse_dev_file(full_path)
except:
logger().log( "Failed parsing the sfdp.xml file provided")
return False
if tree.getroot().tag == self.XML_ROOT_NAME :
if logger().VERBOSE: self.logger.log("file {0} looks OK ...".format(base_name))
return full_path
else:
self.logger.error("The file {0} has an inappropriate structure!".format(base_name))
return False
def get_formated_list_str(self, _list):
return "[ " + ", ".join("0x{0:02x}".format(int(i)) for i in _list) + " ]"
def show_command_result(self, command, result):
self.logger.log(" name: {0:<20} reg_value: {1} : {2:s}".format(
command.attrib["name"],
self.get_formated_list_str(result),
command.attrib["desc"]))
# look if command in XML dev file has some <field> childs
for child in command:
if child.tag and child.tag == self.XML_FIELD_NODE_TAG:
# mask all found bit fields...
byte = int(result[0])
bitno = int(child.attrib["bit"])
length = int(child.attrib["size"])
mask = (2 ** length) - 1
bitval = (byte & (mask << bitno)) >> bitno
# ...and self.logger.log them
self.logger.log("\tfield: {0:<25} value: {1:<12s} \t: {2:s}".format(
child.attrib["name"],
"0x{0:02x}".format(bitval),
#"0b{0:0{width}b}".format(bitval, width=length),
child.attrib["desc"]))
def ptmesg(self, offset):
self.spi_reg_write(self.bios_ptinx, offset)
self.spi_reg_read(self.bios_ptinx)
return self.spi_reg_read(self.bios_ptdata)
def get_SPI_SFDP(self):
ret = False
for component in range(0,2):
logger().log( "Scanning for Flash device %d" % (component+1))
offset = 0x0000
offset = offset | (component << 14)
self.spi_reg_write(self.bios_ptinx, offset)
self.spi_reg_read(self.bios_ptinx)
sfdp_signature = self.spi_reg_read(self.bios_ptdata)
logger().log( "Scanning for Flash device {:d}".format(component+1))
offset = 0x0000 | (component << 14)
sfdp_signature = self.ptmesg(offset)
if sfdp_signature == SFDP_HEADER:
logger().log( " * Found valid SFDP header for Flash device %d" % (component+1))
logger().log( " * Found valid SFDP header for Flash device {:d}".format(component+1))
ret = True
else:
logger().log ( " * Didn't find a valid SFDP header for Flash device %d" % (component+1))
logger().log ( " * Didn't find a valid SFDP header for Flash device {:d}".format(component+1))
continue
# Increment offset to read second dword of SFDP header structure
offset += 0x4
self.spi_reg_write(self.bios_ptinx, offset)
self.spi_reg_read(self.bios_ptinx)
sfdp_data = self.spi_reg_read(self.bios_ptdata)
sfdp_data = self.ptmesg(offset+0x4)
sfdp_minor_version = sfdp_data & 0xFF
sfdp_major_version = ( sfdp_data >> 8) & 0xFF
logger().log( " SFDP version number: %s.%s" % (sfdp_major_version, sfdp_minor_version))
logger().log( " SFDP version number: {}.{}".format(sfdp_major_version, sfdp_minor_version))
num_of_param_headers = ((sfdp_data >> 16) & 0xFF) +1
logger().log( " Number of parameter headers: %d" % num_of_param_headers)
offset = 0x0000
offset = offset | (component << 14)
logger().log( " Number of parameter headers: {:d}".format(num_of_param_headers))
# Set offset to read 1st Parameter Table in the SFDP header structure
offset = offset | 0x1000
self.spi_reg_write(self.bios_ptinx, offset)
self.spi_reg_read(self.bios_ptinx)
parameter_1 = self.spi_reg_read(self.bios_ptdata)
parameter_1 = self.ptmesg(offset)
param1_minor_version = (parameter_1 >> 8) & 0xFF
param1_major_version = (parameter_1 >> 16) & 0xFF
param1_length = (parameter_1 >> 24) & 0xFF
logger().log( " * Parameter Header 1 (JEDEC)" )
logger().log( " ** Parameter version number: %s.%s" % (param1_major_version, param1_minor_version))
logger().log( " ** Parameter length in double words: %s" % hex(param1_length))
logger().log( " ** Parameter version number: {}.{}".format(param1_major_version, param1_minor_version))
logger().log( " ** Parameter length in double words: {}".format(hex(param1_length)))
if (num_of_param_headers > 1) and self.cs.register_has_field( 'HSFS', 'FCYCLE' ):
self.check_hardware_sequencing()
self.spi_reg_write( self.fdata12_off, 0x00000000 )
@@ -800,7 +740,7 @@ class SPI(hal_base.HALBase):
pTable_length = []
# Calculate which fdata_offset registers to read, based on number of parameter headers present
for i in range(1,num_of_param_headers):
logger().log( " * Parameter Header:%d" % (i+1) )
logger().log( " * Parameter Header:{:d}".format(i+1) )
data_reg_1 = "self.fdata" + str(2+(2*i)) + "_off"
data_reg_2 = "self.fdata" + str(2+(2*i)+1) + "_off"
data_dword_1 = self.spi_reg_read( eval(data_reg_1))
@@ -810,33 +750,22 @@ class SPI(hal_base.HALBase):
param_major_version = (data_dword_1 >> 16) & 0xFF
param_length = (data_dword_1 >> 24) & 0xFF
param_table_pointer = (data_dword_2 & 0x00FFFFFF)
logger().log( " ** Parameter version number: %s.%s" % (param_major_version, param_minor_version))
logger().log( " ** Pramaeter length in double words: %s" % hex(param_length))
logger().log( " ** Parameter ID: %s" % hex(id_manuf))
logger().log( " ** Parameter Table Pointer(byte address): %s " % hex(param_table_pointer))
logger().log( " ** Parameter version number:{}.{}".format(param_major_version, param_minor_version))
logger().log( " ** Pramaeter length in double words: {}".format(hex(param_length)))
logger().log( " ** Parameter ID: {}".format(hex(id_manuf)))
logger().log( " ** Parameter Table Pointer(byte address): {} ".format(hex(param_table_pointer)))
pTable_offset_list.append(param_table_pointer)
pTable_length.append(param_length)
offset = 0
offset = offset | (component << 14)
offset = 0x0000 | (component << 14)
# Set offset to read 1st Parameter table ( JEDEC Basic Flash Parameter Table) content and Parse it
offset = offset | 0x2000
logger().log( " ")
logger().log( " * 1'st Parameter Table Content ")
self.dev_file = self.check_def_file("sfdp.xml")
if self.dev_file is False:
continue
tree = self.parse_dev_file(self.dev_file)
root = tree.getroot()
count = 0
for child in root:
if ( count >= param1_length):
break
self.spi_reg_write(self.bios_ptinx, offset)
self.spi_reg_read(self.bios_ptinx)
sfdp_data = self.spi_reg_read(self.bios_ptdata)
count +=1
for count in range(1,param1_length+1):
sfdp_data = self.ptmesg(offset)
offset +=4
self.show_command_result(child, [sfdp_data])
self.cs.print_register("DWORD{}".format(count), sfdp_data)
return ret
#
# SPI JEDEC ID operations
+8 -8
View File
@@ -1,6 +1,6 @@
#!/usr/bin/python
#CHIPSEC: Platform Security Assessment Framework
#Copyright (c) 2010-2018, Intel Corporation
#Copyright (c) 2010-2020, Intel Corporation
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
@@ -75,7 +75,7 @@ class SPICommand(BaseCommand):
spi_op = self.argv[2]
if spi_op in ['read', 'write','erase'] and len(self.argv) < 4:
print SPICommand.__doc__
print (SPICommand.__doc__)
return
t = time.time()
@@ -92,12 +92,12 @@ class SPICommand(BaseCommand):
if 5 == len(self.argv):
filename = self.argv[4]
if not os.path.exists(filename):
self.logger.error( "File %s doesn't exist" % filename)
self.logger.error( "File {} doesn't exist".format(filename))
return
else:
print SPICommand.__doc__
print (SPICommand.__doc__)
return
self.logger.log( "[CHIPSEC] writing to SPI flash memory at FLA = 0x{:X} from '{:64}'".format(spi_fla, filename) )
self.logger.log( "[CHIPSEC] writing to SPI flash memory at FLA = 0x{:X} from '{:64s}'".format(spi_fla, filename) )
ok = _spi.write_spi_from_file( spi_fla, filename )
if ok: self.logger.log( "[CHIPSEC] completed SPI flash memory write" )
@@ -108,14 +108,14 @@ class SPICommand(BaseCommand):
length = int(self.argv[4],16)
else:
length = 0x4
self.logger.log( "[CHIPSEC] reading 0x{:X} bytes from SPI Flash starting at FLA = 0x{:X}".format(length, spi_fla) )
self.logger.log( "[CHIPSEC] reading 0x{:x} bytes from SPI Flash starting at FLA = 0x{:X}".format(length, spi_fla) )
self.logger.log( "[CHIPSEC] {}".format(_msg) )
out_file = None
if 6 == len(self.argv):
if os.path.exists(self.argv[5]):
out_file = self.argv[5]
else:
self.logger.error( "File %s doesn't exist" % self.argv[5])
self.logger.error( "File {} doesn't exist".format(self.argv[5]))
return
buf = _spi.read_spi_to_file( spi_fla, length, out_file )
if (buf is None): self.logger.error( "SPI flash read didn't return any data (turn on VERBOSE)" )
@@ -165,7 +165,7 @@ class SPICommand(BaseCommand):
else:
self.logger.log( ' JEDEC ID command is not supported ')
else:
print SPICommand.__doc__
print (SPICommand.__doc__)
return
elif ( 'sfdp' == spi_op):
_spi.get_SPI_SFDP()