flmstr register bits have slightly different meaning for IFD v2. BUG=chrome-os-partner:45091, chrome-os-partner:43461 TEST=Run `ifdtool -d image.bin` on IFD v1 locked squawks image: Found Master Section FLMSTR1: 0x0a0b0000 (Host CPU/BIOS) Platform Data Region Write Access: disabled GbE Region Write Access: enabled Intel ME Region Write Access: disabled Host CPU/BIOS Region Write Access: enabled Flash Descriptor Write Access: disabled Platform Data Region Read Access: disabled GbE Region Read Access: enabled Intel ME Region Read Access: disabled Host CPU/BIOS Region Read Access: enabled Flash Descriptor Read Access: enabled Requester ID: 0x0000 FLMSTR2: 0x0c0d0000 (Intel ME) Platform Data Region Write Access: disabled GbE Region Write Access: enabled Intel ME Region Write Access: enabled Host CPU/BIOS Region Write Access: disabled Flash Descriptor Write Access: disabled Platform Data Region Read Access: disabled GbE Region Read Access: enabled Intel ME Region Read Access: enabled Host CPU/BIOS Region Read Access: disabled Flash Descriptor Read Access: enabled Requester ID: 0x0000 FLMSTR3: 0x08080118 (GbE) Platform Data Region Write Access: disabled GbE Region Write Access: enabled Intel ME Region Write Access: disabled Host CPU/BIOS Region Write Access: disabled Flash Descriptor Write Access: disabled Platform Data Region Read Access: disabled GbE Region Read Access: enabled Intel ME Region Read Access: disabled Host CPU/BIOS Region Read Access: disabled Flash Descriptor Read Access: disabled Requester ID: 0x0118 Then, run `ifdtool -l image.bin` and verify newly locked image is identical. Next, run `ifdtool -l image.bin` on unlocked glados image. Verify that locked and unlocked regions are identical to above. Finally, burn glados image, run `flashrom -V`, and verify ME regions is locked and descriptor region is RO. BRANCH=None Change-Id: I8a65bdc5edd0d888138b88c1189f8badd1404b64 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 11c434835a66a50ab2c0c01a084edc96cbe052da Original-Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Original-Change-Id: I875dfce6f5cf57831714702872bfe636f8f953f4 Original-Reviewed-on: https://chromium-review.googlesource.com/298968 Original-Commit-Ready: Shawn N <shawnn@chromium.org> Original-Tested-by: Shawn N <shawnn@chromium.org> Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/11658 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			146 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * ifdtool - dump Intel Firmware Descriptor information
 | |
|  *
 | |
|  * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation; version 2 of the License.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program; if not, write to the Free Software
 | |
|  * Foundation, Inc.
 | |
|  */
 | |
| 
 | |
| #include <stdint.h>
 | |
| #define IFDTOOL_VERSION "1.2"
 | |
| 
 | |
| enum ifd_version {
 | |
| 	IFD_VERSION_1,
 | |
| 	IFD_VERSION_2,
 | |
| };
 | |
| 
 | |
| #define LAYOUT_LINELEN 80
 | |
| 
 | |
| enum spi_frequency {
 | |
| 	SPI_FREQUENCY_20MHZ = 0,
 | |
| 	SPI_FREQUENCY_33MHZ = 1,
 | |
| 	SPI_FREQUENCY_48MHZ = 2,
 | |
| 	SPI_FREQUENCY_50MHZ_30MHZ = 4,
 | |
| 	SPI_FREQUENCY_17MHZ = 6,
 | |
| };
 | |
| 
 | |
| enum component_density {
 | |
| 	COMPONENT_DENSITY_512KB = 0,
 | |
| 	COMPONENT_DENSITY_1MB   = 1,
 | |
| 	COMPONENT_DENSITY_2MB   = 2,
 | |
| 	COMPONENT_DENSITY_4MB   = 3,
 | |
| 	COMPONENT_DENSITY_8MB   = 4,
 | |
| 	COMPONENT_DENSITY_16MB  = 5,
 | |
| 	COMPONENT_DENSITY_32MB  = 6,
 | |
| 	COMPONENT_DENSITY_64MB  = 7,
 | |
| 	COMPONENT_DENSITY_UNUSED = 0xf
 | |
| };
 | |
| 
 | |
| // flash descriptor
 | |
| typedef struct {
 | |
| 	uint32_t flvalsig;
 | |
| 	uint32_t flmap0;
 | |
| 	uint32_t flmap1;
 | |
| 	uint32_t flmap2;
 | |
| 	uint8_t  reserved[0xefc - 0x20];
 | |
| 	uint32_t flumap1;
 | |
| } __attribute__((packed)) fdbar_t;
 | |
| 
 | |
| // regions
 | |
| #define MAX_REGIONS 9
 | |
| #define MAX_REGIONS_OLD 5
 | |
| typedef struct {
 | |
| 	uint32_t flreg0;
 | |
| 	uint32_t flreg1;
 | |
| 	uint32_t flreg2;
 | |
| 	uint32_t flreg3;
 | |
| 	uint32_t flreg4;
 | |
| 	uint32_t flreg5;
 | |
| 	uint32_t flreg6;
 | |
| 	uint32_t flreg7;
 | |
| 	uint32_t flreg8;
 | |
| } __attribute__((packed)) frba_t;
 | |
| 
 | |
| // component section
 | |
| typedef struct {
 | |
| 	uint32_t flcomp;
 | |
| 	uint32_t flill;
 | |
| 	uint32_t flpb;
 | |
| } __attribute__((packed)) fcba_t;
 | |
| 
 | |
| // pch strap
 | |
| typedef struct {
 | |
| 	uint32_t pchstrp0;
 | |
| 	uint32_t pchstrp1;
 | |
| 	uint32_t pchstrp2;
 | |
| 	uint32_t pchstrp3;
 | |
| 	uint32_t pchstrp4;
 | |
| 	uint32_t pchstrp5;
 | |
| 	uint32_t pchstrp6;
 | |
| 	uint32_t pchstrp7;
 | |
| 	uint32_t pchstrp8;
 | |
| 	uint32_t pchstrp9;
 | |
| 	uint32_t pchstrp10;
 | |
| 	uint32_t pchstrp11;
 | |
| 	uint32_t pchstrp12;
 | |
| 	uint32_t pchstrp13;
 | |
| 	uint32_t pchstrp14;
 | |
| 	uint32_t pchstrp15;
 | |
| 	uint32_t pchstrp16;
 | |
| 	uint32_t pchstrp17;
 | |
| } __attribute__((packed)) fpsba_t;
 | |
| 
 | |
| /*
 | |
|  * WR / RD bits start at different locations within the flmstr regs, but
 | |
|  * otherwise have identical meaning.
 | |
|  */
 | |
| #define FLMSTR_WR_SHIFT_V1 24
 | |
| #define FLMSTR_WR_SHIFT_V2 20
 | |
| #define FLMSTR_RD_SHIFT_V1 16
 | |
| #define FLMSTR_RD_SHIFT_V2 8
 | |
| 
 | |
| // master
 | |
| typedef struct {
 | |
| 	uint32_t flmstr1;
 | |
| 	uint32_t flmstr2;
 | |
| 	uint32_t flmstr3;
 | |
| 	uint32_t flmstr4;
 | |
| 	uint32_t flmstr5;
 | |
| } __attribute__((packed)) fmba_t;
 | |
| 
 | |
| // processor strap
 | |
| typedef struct {
 | |
| 	uint32_t data[8];
 | |
| } __attribute__((packed)) fmsba_t;
 | |
| 
 | |
| // ME VSCC
 | |
| typedef struct {
 | |
| 	uint32_t jid;
 | |
| 	uint32_t vscc;
 | |
| } vscc_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	// Actual number of entries specified in vtl
 | |
| 	vscc_t entry[8];
 | |
| } vtba_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	int base, limit, size;
 | |
| } region_t;
 | |
| 
 | |
| struct region_name {
 | |
| 	char *pretty;
 | |
| 	char *terse;
 | |
| };
 |