blob: 4b60a9cfc3f632fc0c04202259b59f90492b2de2 [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) {
Marc Jonesfede56b2017-11-16 18:53:47 -070032 printk(BIOS_ERR, "Error: spd.bin not found\n");
33 return -1;
34 }
35
Julius Wernera9b44f42021-02-05 17:27:45 -080036 if (len != CONFIG_DIMM_SPD_SIZE) {
Marc Jonesfede56b2017-11-16 18:53:47 -070037 printk(BIOS_ERR, "Error: spd.bin is not the correct size\n");
38 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}