summaryrefslogtreecommitdiff
path: root/src/mainboard/sifive
diff options
context:
space:
mode:
authorXiang Wang <wxjstz@126.com>2019-05-29 15:39:48 +0800
committerPatrick Rudolph <siro@das-labor.org>2019-08-12 08:35:17 +0000
commitf4e158337683640220e3662fd6ca135bd3bad31b (patch)
treeecf48ac9a68ffe399fd64b40986cc53754470651 /src/mainboard/sifive
parent8adaffcbed6372970f34b85177bd42bb508d03e2 (diff)
soc/sifive/fu540: add code for spi and map flash to memory spaces
SiFive's ZSBL has initialized flash, but only 16MB of space is available. 1. add code for spi 2. add code to map flash to memory spaces Change-Id: I106688c65ac7dd70be7479dc4691797b700682d9 Signed-off-by: Xiang Wang <merle@hardenedlinux.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/33055 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Diffstat (limited to 'src/mainboard/sifive')
-rw-r--r--src/mainboard/sifive/hifive-unleashed/Makefile.inc3
-rw-r--r--src/mainboard/sifive/hifive-unleashed/media.c49
2 files changed, 52 insertions, 0 deletions
diff --git a/src/mainboard/sifive/hifive-unleashed/Makefile.inc b/src/mainboard/sifive/hifive-unleashed/Makefile.inc
index 207898e973..8ce266f034 100644
--- a/src/mainboard/sifive/hifive-unleashed/Makefile.inc
+++ b/src/mainboard/sifive/hifive-unleashed/Makefile.inc
@@ -12,12 +12,15 @@
# GNU General Public License for more details.
bootblock-y += memlayout.ld
+bootblock-y += media.c
romstage-y += memlayout.ld
romstage-y += romstage.c
+romstage-y += media.c
ramstage-y += memlayout.ld
ramstage-y += fixup_fdt.c
+ramstage-y += media.c
DTB=$(obj)/hifive-unleashed.dtb
diff --git a/src/mainboard/sifive/hifive-unleashed/media.c b/src/mainboard/sifive/hifive-unleashed/media.c
new file mode 100644
index 0000000000..b0198a7abe
--- /dev/null
+++ b/src/mainboard/sifive/hifive-unleashed/media.c
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2018 Jonathan Neuschäfer
+ * Copyright (C) 2019 HardenedLinux
+ *
+ * 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 <boot_device.h>
+#include <soc/spi.h>
+
+/* At 0x20000000: A 256MiB long memory-mapped view of the flash at QSPI0 */
+static struct mem_region_device mdev =
+ MEM_REGION_DEV_RO_INIT((void *)0x20000000, CONFIG_ROM_SIZE);
+
+const struct region_device *boot_device_ro(void)
+{
+ return &mdev.rdev;
+}
+
+const static struct fu540_spi_mmap_config spi_mmap_config = {
+ .cmd_en = 1,
+ .addr_len = 4,
+ .pad_cnt = 6,
+ .cmd_proto = FU540_SPI_PROTO_S,
+ .addr_proto = FU540_SPI_PROTO_Q,
+ .data_proto = FU540_SPI_PROTO_Q,
+ .cmd_code = 0xec,
+ .pad_code = 0
+};
+
+void boot_device_init(void)
+{
+ struct spi_slave slave;
+
+ /* initialize spi controller */
+ spi_setup_slave(0, 0, &slave);
+
+ /* map flash to memory space */
+ fu540_spi_mmap(&slave, &spi_mmap_config);
+}