aboutsummaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8183/sspm.c
diff options
context:
space:
mode:
authorErin Lo <erin.lo@mediatek.com>2019-03-11 14:54:21 +0800
committerJulius Werner <jwerner@chromium.org>2019-07-22 21:25:42 +0000
commitb1a2b22d8b904ea9bc5e7038fe2c2b3c1df8c1b2 (patch)
treede201816538e4c250d009942480023d4a53d045c /src/soc/mediatek/mt8183/sspm.c
parentea61c0ee98e7fde76eac47ae02bce4d0dd8a971d (diff)
soc/mediatek/mt8183: Support SSPM
SSPM is "Secure System Power Manager" that provides power control in secure domain. The initialization flow is to load SSPM firmware to its SRAM space and then enable. BUG=b:80501386 BRANCH=none Test=Build pass Change-Id: I4ae6034454326f5115cd3948819adc448b67fb1c Signed-off-by: Erin Lo <erin.lo@mediatek.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/31516 Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/mediatek/mt8183/sspm.c')
-rw-r--r--src/soc/mediatek/mt8183/sspm.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/soc/mediatek/mt8183/sspm.c b/src/soc/mediatek/mt8183/sspm.c
new file mode 100644
index 0000000000..559034eacb
--- /dev/null
+++ b/src/soc/mediatek/mt8183/sspm.c
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2019 MediaTek Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <arch/barrier.h>
+#include <cbfs.h>
+#include <console/console.h>
+#include <arch/mmio.h>
+#include <soc/sspm.h>
+#include <string.h>
+
+#define BUF_SIZE (64 * KiB)
+static uint8_t sspm_bin[BUF_SIZE] __aligned(8);
+
+void sspm_init(void)
+{
+ const char *file_name = "sspm.bin";
+ size_t fw_size = cbfs_boot_load_file(file_name,
+ sspm_bin,
+ sizeof(sspm_bin),
+ CBFS_TYPE_RAW);
+
+ if (fw_size == 0)
+ die("SSPM file :sspm.bin not found.");
+
+ memcpy((void *)SSPM_SRAM_BASE, sspm_bin, fw_size);
+ /* Memory barrier to ensure that all fw code is loaded
+ before we release the reset pin. */
+ mb();
+ write32(&mt8183_sspm->sw_rstn, 0x1);
+}