summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainboard/google/herobrine/romstage.c2
-rw-r--r--src/soc/qualcomm/common/include/soc/symbols_common.h1
-rw-r--r--src/soc/qualcomm/sc7280/Makefile.inc9
-rw-r--r--src/soc/qualcomm/sc7280/include/soc/shrm.h8
-rw-r--r--src/soc/qualcomm/sc7280/memlayout.ld2
-rw-r--r--src/soc/qualcomm/sc7280/shrm_load_reset.c22
6 files changed, 44 insertions, 0 deletions
diff --git a/src/mainboard/google/herobrine/romstage.c b/src/mainboard/google/herobrine/romstage.c
index 64aeaaad14..ad2d2a0c46 100644
--- a/src/mainboard/google/herobrine/romstage.c
+++ b/src/mainboard/google/herobrine/romstage.c
@@ -3,9 +3,11 @@
#include <arch/stages.h>
#include <soc/qclib_common.h>
#include "board.h"
+#include <soc/shrm.h>
void platform_romstage_main(void)
{
+ shrm_fw_load_reset();
/* QCLib: DDR init & train */
qclib_load_and_run();
diff --git a/src/soc/qualcomm/common/include/soc/symbols_common.h b/src/soc/qualcomm/common/include/soc/symbols_common.h
index 60c1069aa1..953acc2657 100644
--- a/src/soc/qualcomm/common/include/soc/symbols_common.h
+++ b/src/soc/qualcomm/common/include/soc/symbols_common.h
@@ -23,5 +23,6 @@ DECLARE_REGION(dram_modem_wifi_only)
DECLARE_REGION(dram_modem_extra)
DECLARE_REGION(dram_wlan)
DECLARE_REGION(dram_wpss)
+DECLARE_REGION(shrm)
#endif // _SOC_QUALCOMM_SYMBOLS_COMMON_H_
diff --git a/src/soc/qualcomm/sc7280/Makefile.inc b/src/soc/qualcomm/sc7280/Makefile.inc
index 9214152964..364c987dc6 100644
--- a/src/soc/qualcomm/sc7280/Makefile.inc
+++ b/src/soc/qualcomm/sc7280/Makefile.inc
@@ -26,6 +26,7 @@ verstage-$(CONFIG_DRIVERS_UART) += ../common/qupv3_uart.c
################################################################################
romstage-y += cbmem.c
+romstage-y += shrm_load_reset.c
romstage-y += ../common/qclib.c
romstage-y += ../common/mmu.c
romstage-y += mmu.c
@@ -101,4 +102,12 @@ $(I2C_FW_CBFS)-type := raw
$(I2C_FW_CBFS)-compression := $(CBFS_PRERAM_COMPRESS_FLAG)
cbfs-files-y += $(I2C_FW_CBFS)
+################################################################################
+SHRM_FILE := $(SC7280_BLOB)/shrm/shrm.elf
+SHRM_CBFS := $(CONFIG_CBFS_PREFIX)/shrm
+$(SHRM_CBFS)-file := $(SHRM_FILE)
+$(SHRM_CBFS)-type := payload
+$(SHRM_CBFS)-compression := none
+cbfs-files-y += $(SHRM_CBFS)
+
endif
diff --git a/src/soc/qualcomm/sc7280/include/soc/shrm.h b/src/soc/qualcomm/sc7280/include/soc/shrm.h
new file mode 100644
index 0000000000..59661a8831
--- /dev/null
+++ b/src/soc/qualcomm/sc7280/include/soc/shrm.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_QUALCOMM_SC7280_SHRM_H__
+#define _SOC_QUALCOMM_SC7280_SHRM_H__
+
+void shrm_fw_load_reset(void);
+
+#endif // _SOC_QUALCOMM_SC7280_SHRM_H__
diff --git a/src/soc/qualcomm/sc7280/memlayout.ld b/src/soc/qualcomm/sc7280/memlayout.ld
index 64e500861c..6398dbabea 100644
--- a/src/soc/qualcomm/sc7280/memlayout.ld
+++ b/src/soc/qualcomm/sc7280/memlayout.ld
@@ -17,6 +17,8 @@
SECTIONS
{
+ REGION(shrm, 0x09060000, 64K , 4K)
+
AOPSRAM_START(0x0B000000)
REGION(aop, 0x0B000000, 0x100000, 4096)
AOPSRAM_END(0x0B100000)
diff --git a/src/soc/qualcomm/sc7280/shrm_load_reset.c b/src/soc/qualcomm/sc7280/shrm_load_reset.c
new file mode 100644
index 0000000000..78830a2df1
--- /dev/null
+++ b/src/soc/qualcomm/sc7280/shrm_load_reset.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <cbfs.h>
+#include <console/console.h>
+#include <soc/mmu.h>
+#include <soc/shrm.h>
+#include <soc/clock.h>
+
+void shrm_fw_load_reset(void)
+{
+ bool shrm_fw_entry;
+ struct prog shrm_fw_prog =
+ PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/shrm");
+
+ shrm_fw_entry = selfload(&shrm_fw_prog);
+ if (!shrm_fw_entry)
+ die("SOC image: SHRM load failed");
+
+ clock_reset_shrm();
+
+ printk(BIOS_DEBUG, "\nSOC:SHRM brought out of reset.\n");
+}