aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/google/hatch/variants/baseboard/memory.c
diff options
context:
space:
mode:
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)