mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-23 17:55:01 +00:00
Add flag to GBB to allow loading PCI Option ROMs
As shipped, H2C only loads the option ROM for the built-in video, and that only when it needs display the BIOS warning screens. By setting a flag in the GBB, you can allow all option ROMs to be loaded: Note that we'll never enable this ourselves (and there's a factory test to ensure that*) because it executes non-verified code. But if a customer wants to void their warranty and set this flag in the read-only flash so they can install and use other PCI devices, they should be able to do so. BUG=chrome-os-partner:6148 TEST=none The only way to test this is to use a BIOS that was compiled with serial debugging enabled, so there's nothing for QA to do. If you have such a BIOS, you can see the difference like so: flashrom -r oldbios.bin gbb_utility -s --flags=2 oldbios.bin newbios.bin flashrom -w newbios.bin <reboot> When bit 1 of the GBB flags is 0, you'll see these lines in the serial output: LoadOpRomImage-->GetSystemConfigurationTable Status = Success LoadOpRomImage-->GetH2cBootMode Status = Success When bit 1 of the GBB flags is 1, you'll see these lines in the serial output: LoadOpRomImage-->GetSystemConfigurationTable Status = Success LoadOpRomImage-->GetH2cBootMode Status = Success LoadOpRomImage-->PCI OpRom on 1.0.0 is allowed!!! This happens in any boot mode (normal, developer, recovery). -- *The factory test for GBB zero flags is gft_clear_gbb_flags.sh, in src/platform/factory_test_tools Change-Id: I31a10cc9d562b4b83669ca8a114b60e87ae28b0a Reviewed-on: https://gerrit.chromium.org/gerrit/11505 Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Gaurav Shah <gauravsh@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
@@ -33,8 +33,14 @@
|
|||||||
#define GBB_HWID_MAX_SIZE 256
|
#define GBB_HWID_MAX_SIZE 256
|
||||||
|
|
||||||
/* Flags for .flags field */
|
/* Flags for .flags field */
|
||||||
/* Reduce the dev screen delay to 2 sec from 30 sec */
|
/* Reduce the dev screen delay to 2 sec from 30 sec to speedup factory. */
|
||||||
#define GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
|
#define GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
|
||||||
|
/* BIOS should load option ROMs from arbitrary PCI devices. We'll never enable
|
||||||
|
* this ourselves because it executes non-verified code, but if a customer wants
|
||||||
|
* to void their warranty and set this flag in the read-only flash, they should
|
||||||
|
* be able to do so.
|
||||||
|
*/
|
||||||
|
#define GBB_FLAG_LOAD_OPTION_ROMS 0x00000002
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|||||||
@@ -184,6 +184,8 @@ typedef struct VbCommonParams {
|
|||||||
#define VB_INIT_OUT_ENABLE_USB_STORAGE 0x00000008
|
#define VB_INIT_OUT_ENABLE_USB_STORAGE 0x00000008
|
||||||
/* If this is a S3 resume, do a debug reset boot instead */
|
/* If this is a S3 resume, do a debug reset boot instead */
|
||||||
#define VB_INIT_OUT_S3_DEBUG_BOOT 0x00000010
|
#define VB_INIT_OUT_S3_DEBUG_BOOT 0x00000010
|
||||||
|
/* BIOS should load any PCI option ROMs it finds, not just internal video */
|
||||||
|
#define VB_INIT_OUT_ENABLE_OPROM 0x00000020
|
||||||
|
|
||||||
|
|
||||||
/* Data only used by VbInit() */
|
/* Data only used by VbInit() */
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
VbError_t VbInit(VbCommonParams* cparams, VbInitParams* iparams) {
|
VbError_t VbInit(VbCommonParams* cparams, VbInitParams* iparams) {
|
||||||
VbSharedDataHeader* shared = (VbSharedDataHeader*)cparams->shared_data_blob;
|
VbSharedDataHeader* shared = (VbSharedDataHeader*)cparams->shared_data_blob;
|
||||||
|
GoogleBinaryBlockHeader* gbb = (GoogleBinaryBlockHeader*)cparams->gbb_data;
|
||||||
VbNvContext vnc;
|
VbNvContext vnc;
|
||||||
VbError_t retval = VBERROR_SUCCESS;
|
VbError_t retval = VBERROR_SUCCESS;
|
||||||
uint32_t recovery = VBNV_RECOVERY_NOT_REQUESTED;
|
uint32_t recovery = VBNV_RECOVERY_NOT_REQUESTED;
|
||||||
@@ -106,7 +107,11 @@ VbError_t VbInit(VbCommonParams* cparams, VbInitParams* iparams) {
|
|||||||
VB_INIT_OUT_ENABLE_USB_STORAGE);
|
VB_INIT_OUT_ENABLE_USB_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy current recovery reason to shared data */
|
/* Allow BIOS to load arbitrary option ROMs? */
|
||||||
|
if (gbb->flags & GBB_FLAG_LOAD_OPTION_ROMS)
|
||||||
|
iparams->out_flags |= VB_INIT_OUT_ENABLE_OPROM;
|
||||||
|
|
||||||
|
/* copy current recovery reason to shared data */
|
||||||
shared->recovery_reason = (uint8_t)recovery;
|
shared->recovery_reason = (uint8_t)recovery;
|
||||||
|
|
||||||
/* If this is a S3 resume, resume the TPM */
|
/* If this is a S3 resume, resume the TPM */
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "gbb_header.h"
|
||||||
#include "host_common.h"
|
#include "host_common.h"
|
||||||
#include "rollback_index.h"
|
#include "rollback_index.h"
|
||||||
#include "test_common.h"
|
#include "test_common.h"
|
||||||
@@ -24,12 +25,20 @@ static VbSharedDataHeader* shared = (VbSharedDataHeader*)shared_data;
|
|||||||
static uint64_t mock_timer;
|
static uint64_t mock_timer;
|
||||||
static int rollback_s3_retval;
|
static int rollback_s3_retval;
|
||||||
static int nv_write_called;
|
static int nv_write_called;
|
||||||
|
static GoogleBinaryBlockHeader gbb;
|
||||||
|
|
||||||
|
|
||||||
/* Reset mock data (for use before each test) */
|
/* Reset mock data (for use before each test) */
|
||||||
static void ResetMocks(void) {
|
static void ResetMocks(void) {
|
||||||
Memset(&cparams, 0, sizeof(cparams));
|
Memset(&cparams, 0, sizeof(cparams));
|
||||||
cparams.shared_data_size = sizeof(shared_data);
|
cparams.shared_data_size = sizeof(shared_data);
|
||||||
cparams.shared_data_blob = shared_data;
|
cparams.shared_data_blob = shared_data;
|
||||||
|
cparams.gbb_data = &gbb;
|
||||||
|
|
||||||
|
Memset(&gbb, 0, sizeof(gbb));
|
||||||
|
gbb.major_version = GBB_MAJOR_VER;
|
||||||
|
gbb.minor_version = GBB_MINOR_VER;
|
||||||
|
gbb.flags = 0;
|
||||||
|
|
||||||
Memset(&iparams, 0, sizeof(iparams));
|
Memset(&iparams, 0, sizeof(iparams));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user