aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/google/glados/spd
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/glados/spd')
-rw-r--r--src/mainboard/google/glados/spd/Makefile.inc39
-rw-r--r--src/mainboard/google/glados/spd/spd.c21
2 files changed, 10 insertions, 50 deletions
diff --git a/src/mainboard/google/glados/spd/Makefile.inc b/src/mainboard/google/glados/spd/Makefile.inc
deleted file mode 100644
index 0d6da9ebcc..0000000000
--- a/src/mainboard/google/glados/spd/Makefile.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-##
-## This file is part of the coreboot project.
-##
-## Copyright (C) 2015 Google Inc.
-## Copyright (C) 2015 Intel Corporation
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; version 2 of the License.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-##
-
-romstage-y += spd.c
-
-SPD_BIN = $(obj)/spd.bin
-
-# SPD data by index. No method for board identification yet
-SPD_SOURCES = empty # 0b0000
-SPD_SOURCES += samsung_dimm_K4E6E304EE-EGCF # 0b0001
-SPD_SOURCES += hynix_dimm_H9CCNNN8JTBLAR # 0b0010
-SPD_SOURCES += hynix_dimm_H9CCNNNBLTALAR # 0b0011
-
-SPD_DEPS := $(foreach f, $(SPD_SOURCES), src/mainboard/$(MAINBOARDDIR)/spd/$(f).spd.hex)
-
-# Include spd ROM data
-$(SPD_BIN): $(SPD_DEPS)
- for f in $+; \
- do for c in $$(cat $$f | grep -v ^#); \
- do printf $$(printf '\%o' 0x$$c); \
- done; \
- done > $@
-
-cbfs-files-y += spd.bin
-spd.bin-file := $(SPD_BIN)
-spd.bin-type := spd
diff --git a/src/mainboard/google/glados/spd/spd.c b/src/mainboard/google/glados/spd/spd.c
index 251b6de3cb..391b702172 100644
--- a/src/mainboard/google/glados/spd/spd.c
+++ b/src/mainboard/google/glados/spd/spd.c
@@ -22,8 +22,7 @@
#include <soc/pei_data.h>
#include <soc/romstage.h>
#include <string.h>
-
-#include "../gpio.h"
+#include <baseboard/variant.h>
#include "spd.h"
static void mainboard_print_spd_info(uint8_t spd[])
@@ -77,6 +76,12 @@ static void mainboard_print_spd_info(uint8_t spd[])
}
}
+__weak int is_dual_channel(const int spd_index)
+{
+ /* default to dual channel */
+ return 1;
+}
+
/* Copy SPD data for on-board memory */
void mainboard_fill_spd_data(struct pei_data *pei_data)
{
@@ -84,14 +89,7 @@ void mainboard_fill_spd_data(struct pei_data *pei_data)
size_t spd_file_len;
int spd_index;
- gpio_t spd_gpios[] = {
- GPIO_MEM_CONFIG_0,
- GPIO_MEM_CONFIG_1,
- GPIO_MEM_CONFIG_2,
- GPIO_MEM_CONFIG_3,
- };
-
- spd_index = gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios));
+ spd_index = pei_data->mem_cfg_id;
printk(BIOS_INFO, "SPD index %d\n", spd_index);
/* Load SPD data from CBFS */
@@ -113,7 +111,8 @@ void mainboard_fill_spd_data(struct pei_data *pei_data)
/* Assume same memory in both channels */
spd_index *= SPD_LEN;
memcpy(pei_data->spd_data[0][0], spd_file + spd_index, SPD_LEN);
- memcpy(pei_data->spd_data[1][0], spd_file + spd_index, SPD_LEN);
+ if (is_dual_channel(spd_index))
+ memcpy(pei_data->spd_data[1][0], spd_file + spd_index, SPD_LEN);
/* Make sure a valid SPD was found */
if (pei_data->spd_data[0][0][0] == 0)