summaryrefslogtreecommitdiff
path: root/src/mainboard/sifive/hifive-unleashed
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/sifive/hifive-unleashed')
-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);
+}