blob: df32e1dbf2baf487e194d9f5465dd56f37d2d09a [file] [log] [blame]
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +05301/* SPDX-License-Identifier: GPL-2.0-or-later */
2
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +05303#include <intelbasecode/debug_feature.h>
4#include <console/console.h>
Sridhar Siricilla574f3c82022-04-21 10:33:51 +05305#include <spi_flash.h>
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +05306
7#define SI_DESC_OEM_SECTION_OFFSET 0xF00
8#define PRE_MEM_FEATURE_CTRL_OFFSET SI_DESC_OEM_SECTION_OFFSET
9#define PRE_MEM_FEATURE_CTRL_SZ 64
10#define SI_DESC_REGION_SZ 4096
11
12struct pre_mem_ft {
Sridhar Siricilla0aa1ac42022-03-09 20:35:32 +053013 uint8_t cse_fw_update_disable; /* Byte location: 0xF00 */
14 uint8_t reserved[63];
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +053015};
16
17static struct pre_mem_ft pre_mem_debug;
18
19_Static_assert(sizeof(struct pre_mem_ft) % 64 == 0 && sizeof(struct pre_mem_ft) <= 256,
20 "sizeof(struct pre_mem_ft) must be a multiple of 64 bytes and up to 256 bytes");
21
Sridhar Siricilla0aa1ac42022-03-09 20:35:32 +053022bool is_debug_cse_fw_update_disable(void)
23{
24 printk(BIOS_DEBUG, "rt_debug: pre_mem_debug.cse_fw_update_disable=%d\n",
25 pre_mem_debug.cse_fw_update_disable);
26
27 return pre_mem_debug.cse_fw_update_disable == 1;
28}
29
Sridhar Siricillab4de2612022-04-28 14:36:38 +053030enum cb_err pre_mem_debug_init(void)
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +053031{
Sridhar Siricilla574f3c82022-04-21 10:33:51 +053032 if (spi_flash_read(boot_device_spi_flash(), PRE_MEM_FEATURE_CTRL_OFFSET,
33 PRE_MEM_FEATURE_CTRL_SZ, &pre_mem_debug)) {
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +053034 printk(BIOS_ERR, "Failed to read Descriptor Region from SPI Flash\n");
Sridhar Siricillab4de2612022-04-28 14:36:38 +053035 return CB_ERR;
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +053036 }
Sridhar Siricillab4de2612022-04-28 14:36:38 +053037 return CB_SUCCESS;
Sridhar Siricilla2c2706c2022-01-25 00:15:17 +053038}