From 978b47463e534c2b8325ebd9c86464555d96d4b6 Mon Sep 17 00:00:00 2001 From: Shelley Chen Date: Wed, 11 Jan 2023 16:10:07 -0800 Subject: soc/qualcomm/sc7280: init eMMC Use common sdhci driver in coreboot to initialize eMMC for sc7280. This should allow us to initialize eMMC earlier in the boot process, taking it out of the critical path. BUG=b:254092907 BRANCH=None TEST=emerge-herobrine coreboot chromeos-bootimage Change-Id: Ifa88da500e82b44d7523f2e68763e01399c89f4d Signed-off-by: Shelley Chen Reviewed-on: https://review.coreboot.org/c/coreboot/+/71829 Reviewed-by: Julius Werner Tested-by: build bot (Jenkins) --- src/soc/qualcomm/sc7280/Kconfig | 3 +++ src/soc/qualcomm/sc7280/Makefile.inc | 1 + src/soc/qualcomm/sc7280/include/soc/addressmap.h | 3 +++ src/soc/qualcomm/sc7280/include/soc/sdhci.h | 8 +++++++ src/soc/qualcomm/sc7280/sdhci.c | 27 ++++++++++++++++++++++++ 5 files changed, 42 insertions(+) create mode 100644 src/soc/qualcomm/sc7280/include/soc/sdhci.h create mode 100644 src/soc/qualcomm/sc7280/sdhci.c (limited to 'src') diff --git a/src/soc/qualcomm/sc7280/Kconfig b/src/soc/qualcomm/sc7280/Kconfig index ccba8ff9b5..985afdce80 100644 --- a/src/soc/qualcomm/sc7280/Kconfig +++ b/src/soc/qualcomm/sc7280/Kconfig @@ -21,6 +21,9 @@ config SOC_QUALCOMM_SC7280 select HAVE_UART_SPECIAL select PCI select NO_ECAM_MMCONF_SUPPORT + select COMMONLIB_STORAGE + select COMMONLIB_STORAGE_MMC + select SDHCI_CONTROLLER if SOC_QUALCOMM_SC7280 diff --git a/src/soc/qualcomm/sc7280/Makefile.inc b/src/soc/qualcomm/sc7280/Makefile.inc index bd0afe4da5..440148494d 100644 --- a/src/soc/qualcomm/sc7280/Makefile.inc +++ b/src/soc/qualcomm/sc7280/Makefile.inc @@ -55,6 +55,7 @@ ramstage-$(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT) += ../common/display/mdss.c ramstage-$(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT) += display/disp.c ramstage-$(CONFIG_PCI) += ../common/pcie_common.c ramstage-$(CONFIG_PCI) += pcie.c +ramstage-$(CONFIG_SDHCI_CONTROLLER) += sdhci.c ../common/storage/sdhci_msm.c ################################################################################ diff --git a/src/soc/qualcomm/sc7280/include/soc/addressmap.h b/src/soc/qualcomm/sc7280/include/soc/addressmap.h index 31f7d64f8f..342de9f9a4 100644 --- a/src/soc/qualcomm/sc7280/include/soc/addressmap.h +++ b/src/soc/qualcomm/sc7280/include/soc/addressmap.h @@ -91,4 +91,7 @@ /* PHY BCR */ #define GCC_PCIE_1_PHY_BCR 0x18E01C +/* eMMC base address */ +#define SDC1_HC_BASE 0x007C4000 + #endif /* __SOC_QUALCOMM_SC7280_ADDRESS_MAP_H__ */ diff --git a/src/soc/qualcomm/sc7280/include/soc/sdhci.h b/src/soc/qualcomm/sc7280/include/soc/sdhci.h new file mode 100644 index 0000000000..70635c08d3 --- /dev/null +++ b/src/soc/qualcomm/sc7280/include/soc/sdhci.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef _SOC_QUALCOMM_SC7280_SDHCI_H__ +#define _SOC_QUALCOMM_SC7280_SDHCI_H__ + +int qc_emmc_early_init(void); + +#endif // _SOC_QUALCOMM_SC7280_SDHCI_H__ diff --git a/src/soc/qualcomm/sc7280/sdhci.c b/src/soc/qualcomm/sc7280/sdhci.c new file mode 100644 index 0000000000..6e676f4feb --- /dev/null +++ b/src/soc/qualcomm/sc7280/sdhci.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include +#include +#include + +int qc_emmc_early_init(void) +{ + struct sd_mmc_ctrlr *ctrlr; + struct storage_media media = {0}; + + ctrlr = new_sdhci_msm_host((void *)(uintptr_t)SDC1_HC_BASE); + if (ctrlr == NULL) + return -1; + + media.ctrlr = ctrlr; + SET_BUS_WIDTH(ctrlr, 1); + SET_CLOCK(ctrlr, 384 * 1000); + + /* Send CMD1 */ + return mmc_send_cmd1(&media); +} -- cgit v1.2.3