1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <console/console.h>
5 #include <mainboard/google/cyan/spd/spd_util.h>
8 * 0b0000 - 4GiB total - 2 x 2GiB Samsung K4E8E304EE-EGCF
9 * 0b0001 - 2GiB total - 1 x 2GiB Samsung K4E8E304EE-EGCF
10 * 0b0010 - 4GiB total - 2 x 2GiB Hynix H9CCNNN8GTMLAR-NUD
11 * 0b0011 - 2GiB total - 1 x 2GiB Hynix H9CCNNN8GTMLAR-NUD
12 * 0b0100 - 4GiB total - 2 x 2GiB Micron MT52L256M32D1PF-107
13 * 0b0101 - 2GiB total - 1 x 2GiB Micron MT52L256M32D1PF-107
14 * 0b0110 - 2GiB total - 1 x 2GiB Samsung K4E8E324EB-EGCF
15 * 0b0111 - 4GiB total - 2 x 2GiB Samsung K4E8E324EB-EGCF
16 * 0b1000 - 2GiB total - 1 x 2GiB Hynix H9CCNNN8GTALAR-NUD
17 * 0b1001 - 4GiB total - 2 x 4GiB Hynix H9CCNNN8GTALAR-NUD
20 static const uint32_t dual_channel_config
=
21 (1 << 0) | (1 << 2) | (1 << 4) | (1 << 7) | (1 << 9);
23 uint8_t get_ramid(void)
25 gpio_t spd_gpios
[] = {
26 GP_SW_64
, /* I2C3_SDA, RAMID0 */
27 GP_SE_02
, /* MF_PLT_CLK1, RAMID1 */
28 GP_SW_67
, /* I2C3_SCL, RAMID2 */
29 GP_SW_80
, /* SATA_GP3, RAMID3 */
32 return gpio_base2_value(spd_gpios
, ARRAY_SIZE(spd_gpios
));
35 int get_variant_spd_index(int ram_id
, int *dual
)
37 /* Determine if single or dual channel memory system */
38 *dual
= (dual_channel_config
& (1 << ram_id
)) ? 1 : 0;
40 /* Display the RAM type */
43 printk(BIOS_DEBUG
, "4GiB Samsung K4E8E304EE-EGCF\n");
46 printk(BIOS_DEBUG
, "2GiB Samsung K4E8E304EE-EGCF\n");
49 printk(BIOS_DEBUG
, "4GiB Hynix H9CCNNN8GTMLAR-NUD\n");
52 printk(BIOS_DEBUG
, "2GiB Hynix H9CCNNN8GTMLAR-NUD\n");
55 printk(BIOS_DEBUG
, "4GiB Micron MT52L256M32D1PF-107\n");
58 printk(BIOS_DEBUG
, "2GiB Micron MT52L256M32D1PF-107\n");
61 printk(BIOS_DEBUG
, "2GiB Samsung K4E8E324EB-EGCF\n");
64 printk(BIOS_DEBUG
, "4GiB Samsung K4E8E324EB-EGCF\n");
67 printk(BIOS_DEBUG
, "2GiB Hynix H9CCNNN8GTALAR-NUD\n");
70 printk(BIOS_DEBUG
, "4GiB Hynix H9CCNNN8GTALAR-NUD\n");
74 /* 1:1 mapping between ram_id and spd_index for setzer */