summaryrefslogtreecommitdiff
path: root/src/soc
diff options
context:
space:
mode:
authorRavi Kumar Bokka <rbokka@codeaurora.org>2021-01-04 14:28:14 +0530
committerShelley Chen <shchen@google.com>2021-10-07 09:03:05 +0000
commit5afeba30a3637792d8619d52572f95b3e80e76fb (patch)
tree2da9e7979d6a44573d86c099bda3e2789a33dd69 /src/soc
parent4dc9e5b3c71ba85e3aa19a98c58a86194a3fd8f5 (diff)
sc7280: Add SHRM firmware support
SHRM is a system hardware resource manager. It is used to manage run time DDRSS activities. DDRSS stands for DDR subsystem. BUG=b:182963902 TEST=Validated on qualcomm sc7280 development board by trying DDR clocks which through SHRM RSI command. Change-Id: I44484573a829eaefbd34907c6fe78d427506a762 Signed-off-by: Ravi Kumar Bokka <rbokka@codeaurora.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/49392 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Shelley Chen <shchen@google.com>
Diffstat (limited to 'src/soc')
-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
5 files changed, 42 insertions, 0 deletions
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");
+}