|
@ -0,0 +1,124 @@ |
|
|
|
|
|
/* |
|
|
|
|
|
* 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. |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
#include <stdint.h> |
|
|
|
|
|
#define IFDTOOL_VERSION "1.2" |
|
|
|
|
|
|
|
|
|
|
|
enum ifd_version { |
|
|
|
|
|
IFD_VERSION_1, |
|
|
|
|
|
IFD_VERSION_2, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
enum platform { |
|
|
|
|
|
PLATFORM_APOLLOLAKE |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
#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 flreg[MAX_REGIONS]; |
|
|
|
|
|
} __attribute__((packed)) frba_t; |
|
|
|
|
|
|
|
|
|
|
|
// component section |
|
|
|
|
|
typedef struct { |
|
|
|
|
|
uint32_t flcomp; |
|
|
|
|
|
uint32_t flill; |
|
|
|
|
|
uint32_t flpb; |
|
|
|
|
|
} __attribute__((packed)) fcba_t; |
|
|
|
|
|
|
|
|
|
|
|
// pch strap |
|
|
|
|
|
#define MAX_PCHSTRP 18 |
|
|
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
|
uint32_t pchstrp[MAX_PCHSTRP]; |
|
|
|
|
|
} __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 { |
|
|
|
|
|
const char *pretty; |
|
|
|
|
|
const char *terse; |
|
|
|
|
|
const char *filename; |
|
|
|
|
|
}; |