summaryrefslogtreecommitdiff
path: root/src/mainboard/google/cyan/spd
diff options
context:
space:
mode:
authorMatt DeVillier <matt.devillier@gmail.com>2017-08-20 14:48:57 -0500
committerMartin Roth <martinroth@google.com>2017-09-15 02:36:13 +0000
commite69a9c75816dd3cd6a9af50a09eb090ea00cfed4 (patch)
tree63f4440d3739a1e1efe266572f3c2e8a9e7455b5 /src/mainboard/google/cyan/spd
parent982688a41ae91218fbb2cfbdb8ff19005ffce0f9 (diff)
google/cyan: convert to variant configuration
Setup cyan to be the baseboard for other Google Braswell boards, to be added in subsequent commits: - Keep code common to all Google Braswell boards in the baseboard, and separate out the board-specific bits into the new cyan variant. - Define the I2C ACPI devices such that they can be easily reused for other variants. - Switch the trackpad/touchscreen interrupts from edge to level, for better performance/compatibility, as was done with all previous Google boards. - Add code to the baseboard to allow optional variant-specific parameters to be used for both memory and silicon init. - Remove superfluous includes, replace some hardcoded values with variables, and correct typos/formatting errors. Change-Id: Iabbbad16efa9cfa79338f4e94d0771779900d8d9 Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/21126 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/mainboard/google/cyan/spd')
-rw-r--r--src/mainboard/google/cyan/spd/Makefile.inc42
-rw-r--r--src/mainboard/google/cyan/spd/spd.c67
-rw-r--r--src/mainboard/google/cyan/spd/spd_util.h22
3 files changed, 38 insertions, 93 deletions
diff --git a/src/mainboard/google/cyan/spd/Makefile.inc b/src/mainboard/google/cyan/spd/Makefile.inc
deleted file mode 100644
index f5960863ae..0000000000
--- a/src/mainboard/google/cyan/spd/Makefile.inc
+++ /dev/null
@@ -1,42 +0,0 @@
-##
-## This file is part of the coreboot project.
-##
-## Copyright (C) 2013 Google Inc.
-## Copyright (C) 2015 Intel Corp.
-##
-## 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_SOURCES = samsung_2GiB_dimm_K4B4G1646Q-HYK0
-SPD_SOURCES += hynix_2GiB_dimm_HMT425S6CFR6A_H5TC4G63CFR
-SPD_SOURCES += samsung_2GiB_dimm_K4B4G1646Q-HYK0
-SPD_SOURCES += hynix_2GiB_dimm_HMT425S6CFR6A_H5TC4G63CFR
-SPD_SOURCES += samsung_2GiB_dimm_K4B4G1646E-BYK0
-SPD_SOURCES += micron_2GiB_dimm_MT41K256M16TW-107
-SPD_SOURCES += samsung_2GiB_dimm_K4B4G1646E-BYK0
-SPD_SOURCES += micron_2GiB_dimm_MT41K256M16TW-107
-
-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/cyan/spd/spd.c b/src/mainboard/google/cyan/spd/spd.c
index 0c0d4f5651..f38fc58ff8 100644
--- a/src/mainboard/google/cyan/spd/spd.c
+++ b/src/mainboard/google/cyan/spd/spd.c
@@ -26,24 +26,10 @@
#include <soc/romstage.h>
#include <string.h>
#include <spd_bin.h>
+#include "spd_util.h"
-/*
- * 0b0000 - 4GiB total - 2 x 2GiB Samsung K4B4G1646Q-HYK0 1600MHz
- * 0b0001 - 4GiB total - 2 x 2GiB Hynix H5TC4G63CFR-PBA 1600MHz
- * 0b0010 - 2GiB total - 1 x 2GiB Samsung K4B4G1646Q-HYK0 1600MHz
- * 0b0011 - 2GiB total - 1 x 2GiB Hynix H5TC4G63CFR-PBA 1600MHz
- * 0b0100 - 4GiB total - 2 x 2GiB Samsung K4B4G1646E-BYK0 1600MHz
- * 0b0101 - 4GiB total - 2 x 2GiB Micro MT41K256M16TW-107 1600MHz
- * 0b0110 - 2GiB total - 1 x 2GiB Samsung K4B4G1646E-BYK0 1600MHz
- * 0b0111 - 2GiB total - 1 x 2GiB Micro MT41K256M16TW-107 1600MHz
- */
-static const uint32_t dual_channel_config = (1 << 0) | (1 << 1)
- | (1 << 4) | (1 << 5);
-
-static void *get_spd_pointer(char *spd_file_content, int total_spds, int *dual)
+__attribute__ ((weak)) uint8_t get_ramid(void)
{
- int ram_id = 0;
-
gpio_t spd_gpios[] = {
GP_SW_80, /* SATA_GP3, RAMID0 */
GP_SW_67, /* I2C3_SCL, RAMID1 */
@@ -51,45 +37,24 @@ static void *get_spd_pointer(char *spd_file_content, int total_spds, int *dual)
GP_SW_64, /* I2C3_SDA, RAMID3 */
};
- ram_id = gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios));
- printk(BIOS_DEBUG, "ram_id=%d, total_spds: %d\n", ram_id, total_spds);
- if (ram_id >= total_spds)
- return NULL;
+ return gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios));
+}
+
+static void *get_spd_pointer(char *spd_file_content, int total_spds, int *dual)
+{
+ int ram_id = 0;
+ int spd_index = 0;
- /* Determine if this is a single or dual channel memory system */
- if (dual_channel_config & (1 << ram_id))
- *dual = 1;
+ ram_id = get_ramid();
+ printk(BIOS_DEBUG, "ram_id=%d, total_spds: %d\n", ram_id, total_spds);
- /* Display the RAM type */
- switch (ram_id) {
- case 0:
- printk(BIOS_DEBUG, "4GiB Samsung K4B4G1646Q-HYK0 1600MHz\n");
- break;
- case 2:
- printk(BIOS_DEBUG, "2GiB Samsung K4B4G1646Q-HYK0 1600MHz\n");
- break;
- case 1:
- printk(BIOS_DEBUG, "4GiB Hynix H5TC4G63CFR-PBA 1600MHz\n");
- break;
- case 3:
- printk(BIOS_DEBUG, "2GiB Hynix H5TC4G63CFR-PBA 1600MHz\n");
- break;
- case 4:
- printk(BIOS_DEBUG, "4GiB Samsung K4B4G1646E-BYK0 1600MHz\n");
- break;
- case 5:
- printk(BIOS_DEBUG, "4GiB Micro MT41K256M16TW-107 1600MHz\n");
- break;
- case 6:
- printk(BIOS_DEBUG, "2GiB Samsung K4B4G1646E-BYK0 1600MHz\n");
- break;
- case 7:
- printk(BIOS_DEBUG, "2GiB Micro MT41K256M16TW-107 1600MHz\n");
- break;
+ spd_index = get_variant_spd_index(ram_id, dual);
+ if (spd_index >= total_spds) {
+ printk(BIOS_ERR, "SPD index > total SPDs\n");
+ return NULL;
}
-
/* Return the serial product data for the RAM */
- return &spd_file_content[SPD_PAGE_LEN * ram_id];
+ return &spd_file_content[SPD_PAGE_LEN * spd_index];
}
/* Copy SPD data for on-board memory */
diff --git a/src/mainboard/google/cyan/spd/spd_util.h b/src/mainboard/google/cyan/spd/spd_util.h
new file mode 100644
index 0000000000..11d6eaa16d
--- /dev/null
+++ b/src/mainboard/google/cyan/spd/spd_util.h
@@ -0,0 +1,22 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2017 Matt DeVillier
+ *
+ * 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.
+ */
+
+#ifndef SPD_UTIL_H
+#define SPD_UTIL_H
+
+uint8_t get_ramid(void);
+int get_variant_spd_index(int ram_id, int *dual);
+
+#endif /* SPD_UTIL_H */