From 42fcb2a8f4f9b395ceb84f7d644864c596b0a9a2 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Bokka Date: Wed, 10 Nov 2021 05:22:47 +0530 Subject: [PATCH] libpayload: Parse DDR Information using coreboot tables BUG=b:182963902,b:177917361 TEST=Validated on qualcomm sc7280 development board Signed-off-by: Ravi Kumar Bokka Change-Id: Ieca7e9fc0e1a018fcb2e9315aebee088edac858e Reviewed-on: https://review.coreboot.org/c/coreboot/+/59193 Reviewed-by: Shelley Chen Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) --- payloads/libpayload/include/libpayload.h | 1 + payloads/libpayload/include/sysinfo.h | 1 + payloads/libpayload/libc/coreboot.c | 3 ++ .../bsd/include/commonlib/bsd/mem_chip_info.h | 28 +++++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 src/commonlib/bsd/include/commonlib/bsd/mem_chip_info.h 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_ */