diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h index 8d8336f559..90aeeeba0a 100644 --- a/payloads/libpayload/include/libpayload.h +++ b/payloads/libpayload/include/libpayload.h @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include diff --git a/payloads/libpayload/include/sysinfo.h b/payloads/libpayload/include/sysinfo.h index 376f298c77..eba4b89227 100644 --- a/payloads/libpayload/include/sysinfo.h +++ b/payloads/libpayload/include/sysinfo.h @@ -83,6 +83,7 @@ struct sysinfo_t { uintptr_t compiler; uintptr_t linker; uintptr_t assembler; + uintptr_t mem_chip_base; uintptr_t cb_version; diff --git a/payloads/libpayload/libc/coreboot.c b/payloads/libpayload/libc/coreboot.c index 72d7664b1a..f5695d62dd 100644 --- a/payloads/libpayload/libc/coreboot.c +++ b/payloads/libpayload/libc/coreboot.c @@ -260,6 +260,9 @@ static void cb_parse_cbmem_entry(void *ptr, struct sysinfo_t *info) case CBMEM_ID_TYPE_C_INFO: info->type_c_info = cbmem_entry->address; break; + case CBMEM_ID_MEM_CHIP_INFO: + info->mem_chip_base = cbmem_entry->address; + break; default: break; } diff --git a/src/commonlib/bsd/include/commonlib/bsd/mem_chip_info.h b/src/commonlib/bsd/include/commonlib/bsd/mem_chip_info.h new file mode 100644 index 0000000000..7194f70174 --- /dev/null +++ b/src/commonlib/bsd/include/commonlib/bsd/mem_chip_info.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef _COMMONLIB_BSD_MEM_CHIP_INFO_H_ +#define _COMMONLIB_BSD_MEM_CHIP_INFO_H_ + +enum mem_chip_type { + MEM_CHIP_DDR3 = 0x30, + MEM_CHIP_LPDDR3 = 0x38, + MEM_CHIP_DDR4 = 0x40, + MEM_CHIP_LPDDR4 = 0x48, + MEM_CHIP_LPDDR4X = 0x49, +}; + +struct mem_chip_info { + uint8_t type; /* enum mem_chip_type */ + uint8_t num_channels; + uint8_t reserved[6]; + struct { + uint64_t density; + uint8_t io_width; + uint8_t manufacturer_id; + uint8_t revision_id[2]; + uint8_t reserved[4]; + uint8_t serial_id[8]; /* LPDDR5 only */ + } channel[0]; +}; + +#endif /* _COMMONLIB_BSD_MEM_CHIP_INFO_H_ */