diff options
author | Yidi Lin <yidilin@chromium.org> | 2024-02-21 18:52:05 +0800 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2024-02-26 13:00:08 +0000 |
commit | a06175523ca642985f87711fb1957e57e0025137 (patch) | |
tree | 9feb084c0bc3bcbbebf0b5b7dab845e58f6521ef | |
parent | caabde1806dc3942da7d34e9d97d9f101592e705 (diff) |
soc/mediatek: Add `MEDIATEK_DRAM_ADAPTIVE` config to support dram adaptive
Starting from MT8195, MediaTek platform supports "dram adaptive" to
automatically detect dram information, including channel, rank, die
size..., and can automatically configure EMI settings. So we can just
pass a placeholder param blob to `mt_mem_init_run` by enabling this
option.
Platforms (MT8173, MT8183, MT8192) which do not support "dram adaptive"
need to implement `get_sdram_config` to get onboard DRAM configuration
info.
TEST=emerge-geralt coreboot && emerge-asurada coreboot
TEST=CONFIG_MEDIATEK_DRAM_ADAPTIVE is set to y on geralt
TEST=CONFIG_MEDIATEK_DRAM_ADAPTIVE is no set on asurada
Change-Id: I05a01b1ab13fbf19b2a908c48a540a5c2e1ccbdc
Signed-off-by: Yidi Lin <yidilin@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/80687
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
-rw-r--r-- | src/mainboard/google/cherry/Makefile.mk | 1 | ||||
-rw-r--r-- | src/mainboard/google/cherry/sdram_configs.c | 15 | ||||
-rw-r--r-- | src/mainboard/google/corsola/Makefile.mk | 1 | ||||
-rw-r--r-- | src/mainboard/google/corsola/sdram_configs.c | 15 | ||||
-rw-r--r-- | src/mainboard/google/geralt/Makefile.mk | 1 | ||||
-rw-r--r-- | src/mainboard/google/geralt/sdram_configs.c | 15 | ||||
-rw-r--r-- | src/soc/mediatek/common/Kconfig | 15 | ||||
-rw-r--r-- | src/soc/mediatek/common/include/soc/dramc_param_common.h | 2 | ||||
-rw-r--r-- | src/soc/mediatek/common/memory.c | 8 | ||||
-rw-r--r-- | src/soc/mediatek/mt8186/include/soc/dramc_param.h | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8188/include/soc/dramc_param.h | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8192/include/soc/dramc_param.h | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8195/include/soc/dramc_param.h | 1 |
13 files changed, 24 insertions, 53 deletions
diff --git a/src/mainboard/google/cherry/Makefile.mk b/src/mainboard/google/cherry/Makefile.mk index 5fe133919c..41ec839afc 100644 --- a/src/mainboard/google/cherry/Makefile.mk +++ b/src/mainboard/google/cherry/Makefile.mk @@ -14,7 +14,6 @@ romstage-y += chromeos.c romstage-y += regulator.c romstage-y += reset.c romstage-y += romstage.c -romstage-y += sdram_configs.c ramstage-y += memlayout.ld ramstage-y += boardid.c diff --git a/src/mainboard/google/cherry/sdram_configs.c b/src/mainboard/google/cherry/sdram_configs.c deleted file mode 100644 index de6bdd1f05..0000000000 --- a/src/mainboard/google/cherry/sdram_configs.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#include <soc/dramc_param.h> - -const struct sdram_info *get_sdram_config(void) -{ - /* - * The MT8195 platform supports "dram adaptive" feature to - * automatically detect dram information, including channel, rank, die size..., - * and can automatically configure EMI settings. - * So we will be passing a placeholder param blob. - */ - static struct sdram_info params; - return ¶ms; -} diff --git a/src/mainboard/google/corsola/Makefile.mk b/src/mainboard/google/corsola/Makefile.mk index 5483167e38..1442f33d6a 100644 --- a/src/mainboard/google/corsola/Makefile.mk +++ b/src/mainboard/google/corsola/Makefile.mk @@ -14,7 +14,6 @@ romstage-y += chromeos.c romstage-y += regulator.c romstage-y += reset.c romstage-y += romstage.c -romstage-y += sdram_configs.c ramstage-y += memlayout.ld ramstage-y += boardid.c diff --git a/src/mainboard/google/corsola/sdram_configs.c b/src/mainboard/google/corsola/sdram_configs.c deleted file mode 100644 index f565f53f82..0000000000 --- a/src/mainboard/google/corsola/sdram_configs.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#include <soc/dramc_param.h> - -const struct sdram_info *get_sdram_config(void) -{ - /* - * The MT8186 platform supports "dram adaptive" feature to - * automatically detect dram information, including channel, rank, die size..., - * and can automatically configure EMI settings. - * So we will be passing a placeholder param blob. - */ - static struct sdram_info params; - return ¶ms; -} diff --git a/src/mainboard/google/geralt/Makefile.mk b/src/mainboard/google/geralt/Makefile.mk index b1af289d55..0975c5cd29 100644 --- a/src/mainboard/google/geralt/Makefile.mk +++ b/src/mainboard/google/geralt/Makefile.mk @@ -15,7 +15,6 @@ romstage-y += chromeos.c romstage-y += regulator.c romstage-y += reset.c romstage-y += romstage.c -romstage-y += sdram_configs.c ramstage-y += memlayout.ld ramstage-y += boardid.c diff --git a/src/mainboard/google/geralt/sdram_configs.c b/src/mainboard/google/geralt/sdram_configs.c deleted file mode 100644 index c4766be235..0000000000 --- a/src/mainboard/google/geralt/sdram_configs.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#include <soc/dramc_param.h> - -const struct sdram_info *get_sdram_config(void) -{ - /* - * The MT8188 platform supports "dram adaptive" feature to automatically - * detect dram information, including channel, rank, die size..., and - * can automatically configure EMI settings. Therefore, we will be - * passing a placeholder param blob. - */ - static struct sdram_info params; - return ¶ms; -} diff --git a/src/soc/mediatek/common/Kconfig b/src/soc/mediatek/common/Kconfig index 898918a621..55ea5ecd44 100644 --- a/src/soc/mediatek/common/Kconfig +++ b/src/soc/mediatek/common/Kconfig @@ -8,6 +8,21 @@ config SOC_MEDIATEK_COMMON if SOC_MEDIATEK_COMMON +config MEDIATEK_DRAM_ADAPTIVE + bool + default n if SOC_MEDIATEK_MT8173 + default n if SOC_MEDIATEK_MT8183 + default n if SOC_MEDIATEK_MT8192 + default y + help + Starting from MT8195, MediaTek platform supports "dram adaptive" to + automatically detect dram information, including channel, rank, die + size..., and can automatically configure EMI settings. So we can just + pass a placeholder param blob to `mt_mem_init_run` by enabling this + option. + Platforms (MT8173, MT8183, MT8192) which do not support "dram adaptive" + need to implement `get_sdram_config` to get the DRAM configuration info. + config MEDIATEK_DRAM_DVFS bool default n diff --git a/src/soc/mediatek/common/include/soc/dramc_param_common.h b/src/soc/mediatek/common/include/soc/dramc_param_common.h index 429f3c64a9..7dd8bba5d8 100644 --- a/src/soc/mediatek/common/include/soc/dramc_param_common.h +++ b/src/soc/mediatek/common/include/soc/dramc_param_common.h @@ -101,4 +101,6 @@ struct ddr_base_info { u32 data_rate; }; +const struct sdram_info *get_sdram_config(void); + #endif diff --git a/src/soc/mediatek/common/memory.c b/src/soc/mediatek/common/memory.c index be72023dac..72ea37eea3 100644 --- a/src/soc/mediatek/common/memory.c +++ b/src/soc/mediatek/common/memory.c @@ -313,7 +313,13 @@ static void mt_mem_init_run(struct dramc_param *dparam, void mt_mem_init(struct dramc_param *dparam) { - const struct sdram_info *sdram_param = get_sdram_config(); + const struct sdram_info *sdram_param = NULL; + static struct sdram_info fake_sdram_param; + + if (CONFIG(MEDIATEK_DRAM_ADAPTIVE)) + sdram_param = &fake_sdram_param; + else + sdram_param = get_sdram_config(); mt_mem_init_run(dparam, sdram_param); } diff --git a/src/soc/mediatek/mt8186/include/soc/dramc_param.h b/src/soc/mediatek/mt8186/include/soc/dramc_param.h index 2d6212b169..29380c2127 100644 --- a/src/soc/mediatek/mt8186/include/soc/dramc_param.h +++ b/src/soc/mediatek/mt8186/include/soc/dramc_param.h @@ -78,7 +78,6 @@ struct dramc_param { struct dramc_data dramc_datas; }; -const struct sdram_info *get_sdram_config(void); struct dramc_param *get_dramc_param_from_blob(void *blob); void dump_param_header(const void *blob); int initialize_dramc_param(void *blob); diff --git a/src/soc/mediatek/mt8188/include/soc/dramc_param.h b/src/soc/mediatek/mt8188/include/soc/dramc_param.h index 88e2a90e61..740e27b6f7 100644 --- a/src/soc/mediatek/mt8188/include/soc/dramc_param.h +++ b/src/soc/mediatek/mt8188/include/soc/dramc_param.h @@ -98,7 +98,6 @@ struct dramc_param { struct dramc_data dramc_datas; }; -const struct sdram_info *get_sdram_config(void); struct dramc_param *get_dramc_param_from_blob(void *blob); void dump_param_header(const void *blob); int validate_dramc_param(const void *blob); diff --git a/src/soc/mediatek/mt8192/include/soc/dramc_param.h b/src/soc/mediatek/mt8192/include/soc/dramc_param.h index c4f1293479..fca82bee62 100644 --- a/src/soc/mediatek/mt8192/include/soc/dramc_param.h +++ b/src/soc/mediatek/mt8192/include/soc/dramc_param.h @@ -73,7 +73,6 @@ struct dramc_param { struct dramc_data dramc_datas; }; -const struct sdram_info *get_sdram_config(void); struct dramc_param *get_dramc_param_from_blob(void *blob); void dump_param_header(const void *blob); int validate_dramc_param(const void *blob); diff --git a/src/soc/mediatek/mt8195/include/soc/dramc_param.h b/src/soc/mediatek/mt8195/include/soc/dramc_param.h index 7c66b70246..0885ee0651 100644 --- a/src/soc/mediatek/mt8195/include/soc/dramc_param.h +++ b/src/soc/mediatek/mt8195/include/soc/dramc_param.h @@ -73,7 +73,6 @@ struct dramc_param { struct dramc_data dramc_datas; }; -const struct sdram_info *get_sdram_config(void); struct dramc_param *get_dramc_param_from_blob(void *blob); void dump_param_header(const void *blob); int validate_dramc_param(const void *blob); |