summaryrefslogtreecommitdiff
path: root/src/mainboard/google/hatch/variants/baseboard/memory.c
diff options
context:
space:
mode:
authorShelley Chen <shchen@google.com>2019-02-11 13:06:10 -0800
committerPatrick Georgi <pgeorgi@google.com>2019-03-14 11:27:58 +0000
commit2ee720ca45ea6dbdfe24893bba7a47248387ba2f (patch)
tree19c54e521fa9c2177aecf577ff3e79206027caca /src/mainboard/google/hatch/variants/baseboard/memory.c
parentfa861eea3057bbbf067c7361c35721a2681a036e (diff)
downloadcoreboot-2ee720ca45ea6dbdfe24893bba7a47248387ba2f.tar.xz
mb/google/hatch: Use MEM_CH_SEL to indicate single_channel sku
MEM_CH_SEL is used to indicate whether we are on a single or dual channel device, where MEM_CH_SEL = 1 for single channel skus and MEM_CH_SEL = 0 for dual channel skus. Initialize single_channel field (from GPP_F2), which will in turn initialize MemorySpdPtr pointers in cannonlake soc code. In the first build, we did not use GPP_F2, so we need to add an internal pulldown as those early devices were all dual channel devices. BUG=b:123062346, b:122959294 BRANCH=None TEST=Boot into current boards and ensure that we have 2 channels as expected Also, verify that GPP_F2 is set to 0. Change-Id: I89d022793580be603a93d0b177d73ce968529b5c Signed-off-by: Shelley Chen <shchen@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/31358 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src/mainboard/google/hatch/variants/baseboard/memory.c')
-rw-r--r--src/mainboard/google/hatch/variants/baseboard/memory.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/mainboard/google/hatch/variants/baseboard/memory.c b/src/mainboard/google/hatch/variants/baseboard/memory.c
index 80f3ba4260..6ca98e4c7f 100644
--- a/src/mainboard/google/hatch/variants/baseboard/memory.c
+++ b/src/mainboard/google/hatch/variants/baseboard/memory.c
@@ -17,6 +17,7 @@
#include <baseboard/gpio.h>
#include <gpio.h>
#include <soc/cnl_memcfg_init.h>
+#include <string.h>
static const struct cnl_mb_cfg baseboard_memcfg = {
/*
@@ -42,9 +43,25 @@ static const struct cnl_mb_cfg baseboard_memcfg = {
.ect = 1,
};
-const struct cnl_mb_cfg *__weak variant_memory_params(void)
+void __weak variant_memory_params(struct cnl_mb_cfg *bcfg)
{
- return &baseboard_memcfg;
+ memcpy(bcfg, &baseboard_memcfg, sizeof(baseboard_memcfg));
+ /*
+ * GPP_F2 is the MEM_CH_SEL gpio, which is set to 1 for single
+ * channel skus and 0 for dual channel skus.
+ */
+ if (gpio_get(GPP_F2) == 1) {
+ /*
+ * Single channel config: for Hatch, Channel 0 is
+ * always populated.
+ */
+ bcfg->channel_empty[0] = 0;
+ bcfg->channel_empty[1] = 1;
+ } else {
+ /* Dual channel config: both channels populated. */
+ bcfg->channel_empty[0] = 0;
+ bcfg->channel_empty[1] = 0;
+ }
}
int __weak variant_memory_sku(void)