xref: /aosp_15_r20/external/coreboot/src/vendorcode/google/chromeos/dram_part_num_override.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <ec/google/chromeec/ec.h>
5 #include <memory_info.h>
6 
mainboard_get_dram_part_num(void)7 const char *mainboard_get_dram_part_num(void)
8 {
9 	static char part_num_store[DIMM_INFO_PART_NUMBER_SIZE];
10 	static enum {
11 		PART_NUM_NOT_READ,
12 		PART_NUM_AVAILABLE,
13 		PART_NUM_NOT_IN_CBI,
14 	} part_num_state = PART_NUM_NOT_READ;
15 
16 	if (part_num_state == PART_NUM_NOT_READ) {
17 		if (google_chromeec_cbi_get_dram_part_num(part_num_store,
18 						  sizeof(part_num_store)) < 0) {
19 			printk(BIOS_DEBUG,
20 			  "Couldn't obtain DRAM part number from CBI\n");
21 			part_num_state = PART_NUM_NOT_IN_CBI;
22 		} else {
23 			part_num_state = PART_NUM_AVAILABLE;
24 		}
25 	}
26 
27 	if (part_num_state == PART_NUM_NOT_IN_CBI)
28 		return NULL;
29 
30 	return part_num_store;
31 }
32