blob: 91101872f49381798f11f2193d6a4e1720faa3ae [file] [log] [blame]
Angel Ponsb5a2a522020-04-05 13:21:48 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Martin Rothac35e622017-11-07 13:43:02 -07002
Martin Rothac35e622017-11-07 13:43:02 -07003#include <baseboard/variants.h>
Marc Jonesfede56b2017-11-16 18:53:47 -07004#include <console/console.h>
Elyes HAOUAS3b3d0852021-02-01 10:09:40 +01005#include <gpio.h>
Marc Jonesfede56b2017-11-16 18:53:47 -07006#include <spd_bin.h>
Julius Wernera9b44f42021-02-05 17:27:45 -08007#include <string.h>
Martin Rothac35e622017-11-07 13:43:02 -07008#include <variant/gpio.h>
Marc Jonesfede56b2017-11-16 18:53:47 -07009#include <amdblocks/dimm_spd.h>
Martin Rothac35e622017-11-07 13:43:02 -070010
Aaron Durbin64031672018-04-21 14:45:32 -060011uint8_t __weak variant_memory_sku(void)
Martin Rothac35e622017-11-07 13:43:02 -070012{
13 gpio_t pads[] = {
14 [3] = MEM_CONFIG3,
15 [2] = MEM_CONFIG2,
16 [1] = MEM_CONFIG1,
17 [0] = MEM_CONFIG0,
18 };
19
Martin Roth1cdb6f22017-11-17 09:25:02 -070020 return gpio_base2_value(pads, ARRAY_SIZE(pads));
Martin Rothac35e622017-11-07 13:43:02 -070021}
Marc Jonesfede56b2017-11-16 18:53:47 -070022
Aaron Durbin64031672018-04-21 14:45:32 -060023int __weak variant_mainboard_read_spd(uint8_t spdAddress,
Marc Jonesfede56b2017-11-16 18:53:47 -070024 char *buf, size_t len)
25{
Marc Jonesfede56b2017-11-16 18:53:47 -070026 u8 spd_index = variant_memory_sku();
27
28 printk(BIOS_INFO, "%s SPD index %d\n", __func__, spd_index);
29
Julius Wernera9b44f42021-02-05 17:27:45 -080030 void *spd = (void *)spd_cbfs_map(spd_index);
31 if (!spd) {
Julius Wernere9665952022-01-21 17:06:20 -080032 printk(BIOS_ERR, "spd.bin not found\n");
Marc Jonesfede56b2017-11-16 18:53:47 -070033 return -1;
34 }
35
Julius Wernera9b44f42021-02-05 17:27:45 -080036 if (len != CONFIG_DIMM_SPD_SIZE) {
Julius Wernere9665952022-01-21 17:06:20 -080037 printk(BIOS_ERR, "spd.bin is not the correct size\n");
Marc Jonesfede56b2017-11-16 18:53:47 -070038 return -1;
39 }
40
Julius Wernera9b44f42021-02-05 17:27:45 -080041 memcpy(buf, spd, len);
Marc Jonesfede56b2017-11-16 18:53:47 -070042
43 return 0;
44}