[coreboot-gerrit] Patch set updated for coreboot: riscv: Move SBI call implementations under arch/riscv/

Jonathan Neuschäfer (j.neuschaefer@gmx.net) gerrit at coreboot.org
Tue Oct 25 16:02:33 CEST 2016


Jonathan Neuschäfer (j.neuschaefer at gmx.net) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17057

-gerrit

commit e20d89c925df00f5b3b34246137a259a7a27f40b
Author: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
Date:   Wed Oct 19 02:18:53 2016 +0200

    riscv: Move SBI call implementations under arch/riscv/
    
    Change-Id: Icce96ab3f41ae0f34bd86e30f9ff17c30317854e
    Signed-off-by: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
---
 src/arch/riscv/Makefile.inc                      |   2 +
 src/arch/riscv/include/mcall.h                   |  70 ++++++++++++++++
 src/arch/riscv/include/spike_util.h              |  70 ----------------
 src/arch/riscv/mcall.c                           | 100 +++++++++++++++++++++++
 src/arch/riscv/trap_handler.c                    |   2 +-
 src/mainboard/emulation/qemu-riscv/Makefile.inc  |   3 -
 src/mainboard/emulation/qemu-riscv/qemu_util.c   | 100 -----------------------
 src/mainboard/emulation/spike-riscv/Makefile.inc |   3 -
 src/mainboard/emulation/spike-riscv/spike_util.c | 100 -----------------------
 src/mainboard/emulation/spike-riscv/uart.c       |   1 -
 10 files changed, 173 insertions(+), 278 deletions(-)

diff --git a/src/arch/riscv/Makefile.inc b/src/arch/riscv/Makefile.inc
index cf6ce99..ac788b5 100644
--- a/src/arch/riscv/Makefile.inc
+++ b/src/arch/riscv/Makefile.inc
@@ -34,6 +34,7 @@ $(call src-to-obj,bootblock,$(dir)/id.S): $(obj)/build.h
 bootblock-y = bootblock.S stages.c
 bootblock-y += trap_util.S
 bootblock-y += trap_handler.c
+bootblock-y += mcall.c
 bootblock-y += virtual_memory.c
 bootblock-y += boot.c
 bootblock-y += misc.c
@@ -90,6 +91,7 @@ ifeq ($(CONFIG_ARCH_RAMSTAGE_RISCV),y)
 
 ramstage-y =
 ramstage-y += trap_handler.c
+ramstage-y += mcall.c
 ramstage-y += virtual_memory.c
 ramstage-y += stages.c
 ramstage-y += misc.c
diff --git a/src/arch/riscv/include/mcall.h b/src/arch/riscv/include/mcall.h
new file mode 100644
index 0000000..a43b9cf
--- /dev/null
+++ b/src/arch/riscv/include/mcall.h
@@ -0,0 +1,70 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 The ChromiumOS Authors
+ *
+ * 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.
+ */
+
+#ifndef _MCALL_H
+#define _MCALL_H
+
+#include <arch/encoding.h>
+#include <atomic.h>
+#include <stdint.h>
+
+#define HLS_SIZE 64
+#define MENTRY_FRAME_SIZE HLS_SIZE
+
+typedef struct {
+  unsigned long base;
+  unsigned long size;
+  unsigned long node_id;
+} memory_block_info;
+
+typedef struct {
+  unsigned long dev;
+  unsigned long cmd;
+  unsigned long data;
+  unsigned long sbi_private_data;
+} sbi_device_message;
+
+
+typedef struct {
+  sbi_device_message* device_request_queue_head;
+  unsigned long device_request_queue_size;
+  sbi_device_message* device_response_queue_head;
+  sbi_device_message* device_response_queue_tail;
+
+  int hart_id;
+  int ipi_pending;
+} hls_t;
+
+#define MACHINE_STACK_TOP() ({ \
+  register uintptr_t sp asm ("sp"); \
+  (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); })
+
+// hart-local storage, at top of stack
+#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE))
+#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - HLS()->hart_id)))
+
+#define MACHINE_STACK_SIZE RISCV_PGSIZE
+
+uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *p);
+uintptr_t mcall_console_putchar(uint8_t ch);
+uintptr_t mcall_dev_req(sbi_device_message *m);
+uintptr_t mcall_dev_resp(void);
+uintptr_t mcall_set_timer(unsigned long long when);
+uintptr_t mcall_clear_ipi(void);
+uintptr_t mcall_send_ipi(uintptr_t recipient);
+uintptr_t mcall_shutdown(void);
+void hls_init(uint32_t hart_id); // need to call this before launching linux
+
+#endif
diff --git a/src/arch/riscv/include/spike_util.h b/src/arch/riscv/include/spike_util.h
deleted file mode 100644
index 175ee6c..0000000
--- a/src/arch/riscv/include/spike_util.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2013 The ChromiumOS Authors
- *
- * 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.
- */
-
-#ifndef _SPIKE_UTIL_H
-#define _SPIKE_UTIL_H
-
-#include <arch/encoding.h>
-#include <atomic.h>
-#include <stdint.h>
-
-#define HLS_SIZE 64
-#define MENTRY_FRAME_SIZE HLS_SIZE
-
-typedef struct {
-  unsigned long base;
-  unsigned long size;
-  unsigned long node_id;
-} memory_block_info;
-
-typedef struct {
-  unsigned long dev;
-  unsigned long cmd;
-  unsigned long data;
-  unsigned long sbi_private_data;
-} sbi_device_message;
-
-
-typedef struct {
-  sbi_device_message* device_request_queue_head;
-  unsigned long device_request_queue_size;
-  sbi_device_message* device_response_queue_head;
-  sbi_device_message* device_response_queue_tail;
-
-  int hart_id;
-  int ipi_pending;
-} hls_t;
-
-#define MACHINE_STACK_TOP() ({ \
-  register uintptr_t sp asm ("sp"); \
-  (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); })
-
-// hart-local storage, at top of stack
-#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE))
-#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - HLS()->hart_id)))
-
-#define MACHINE_STACK_SIZE RISCV_PGSIZE
-
-uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *p);
-uintptr_t mcall_console_putchar(uint8_t ch);
-uintptr_t mcall_dev_req(sbi_device_message *m);
-uintptr_t mcall_dev_resp(void);
-uintptr_t mcall_set_timer(unsigned long long when);
-uintptr_t mcall_clear_ipi(void);
-uintptr_t mcall_send_ipi(uintptr_t recipient);
-uintptr_t mcall_shutdown(void);
-void hls_init(uint32_t hart_id); // need to call this before launching linux
-
-#endif
diff --git a/src/arch/riscv/mcall.c b/src/arch/riscv/mcall.c
new file mode 100644
index 0000000..b571fbc
--- /dev/null
+++ b/src/arch/riscv/mcall.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2013, The Regents of the University of California (Regents).
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Regents nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+ * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
+ * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
+ * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
+ * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
+ * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#include <arch/barrier.h>
+#include <arch/errno.h>
+#include <atomic.h>
+#include <console/console.h>
+#include <mcall.h>
+#include <string.h>
+#include <vm.h>
+
+uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *info)
+{
+	if (id == 0) {
+		mprv_write_ulong(&info->base, 2U*GiB);
+
+		/* TODO: Return the correct value */
+		mprv_write_ulong(&info->size, 1*GiB);
+		return 0;
+	}
+
+	return -1;
+}
+
+uintptr_t mcall_send_ipi(uintptr_t recipient)
+{
+	die("mcall_send_ipi is currently not implemented");
+	return 0;
+}
+
+uintptr_t mcall_clear_ipi(void)
+{
+	// only clear SSIP if no other events are pending
+	if (HLS()->device_response_queue_head == NULL) {
+		clear_csr(mip, MIP_SSIP);
+		mb();
+	}
+
+	return atomic_swap(&HLS()->ipi_pending, 0);
+}
+
+uintptr_t mcall_shutdown(void)
+{
+	die("mcall_shutdown is currently not implemented");
+	return 0;
+}
+
+uintptr_t mcall_set_timer(unsigned long long when)
+{
+	printk(BIOS_DEBUG, "mcall_set_timer is currently not implemented, ignoring\n");
+	return 0;
+}
+
+uintptr_t mcall_dev_req(sbi_device_message *m)
+{
+	die("mcall_dev_req is currently not implemented");
+	return 0;
+}
+
+uintptr_t mcall_dev_resp(void)
+{
+	die("mcall_dev_resp is currently not implemented");
+	return 0;
+}
+
+void hls_init(uint32_t hart_id)
+{
+	memset(HLS(), 0, sizeof(*HLS()));
+	HLS()->hart_id = hart_id;
+}
+
+uintptr_t mcall_console_putchar(uint8_t ch)
+{
+	do_putchar(ch);
+	return 0;
+}
diff --git a/src/arch/riscv/trap_handler.c b/src/arch/riscv/trap_handler.c
index ad49928..8a7b513 100644
--- a/src/arch/riscv/trap_handler.c
+++ b/src/arch/riscv/trap_handler.c
@@ -17,7 +17,7 @@
 #include <arch/exception.h>
 #include <arch/sbi.h>
 #include <console/console.h>
-#include <spike_util.h>
+#include <mcall.h>
 #include <string.h>
 #include <vm.h>
 
diff --git a/src/mainboard/emulation/qemu-riscv/Makefile.inc b/src/mainboard/emulation/qemu-riscv/Makefile.inc
index 4fbe401..36f1fca 100644
--- a/src/mainboard/emulation/qemu-riscv/Makefile.inc
+++ b/src/mainboard/emulation/qemu-riscv/Makefile.inc
@@ -13,14 +13,11 @@
 ## GNU General Public License for more details.
 
 bootblock-y += uart.c
-bootblock-y += qemu_util.c
 bootblock-y += rom_media.c
 romstage-y += romstage.c
-romstage-y += qemu_util.c
 romstage-y += uart.c
 romstage-y += rom_media.c
 ramstage-y += uart.c
-ramstage-y += qemu_util.c
 ramstage-y += rom_media.c
 
 bootblock-y += memlayout.ld
diff --git a/src/mainboard/emulation/qemu-riscv/qemu_util.c b/src/mainboard/emulation/qemu-riscv/qemu_util.c
deleted file mode 100644
index c97a61f..0000000
--- a/src/mainboard/emulation/qemu-riscv/qemu_util.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2013, The Regents of the University of California (Regents).
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Regents nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
- * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
- * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
- * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
- * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#include <arch/barrier.h>
-#include <arch/errno.h>
-#include <atomic.h>
-#include <console/console.h>
-#include <spike_util.h>
-#include <string.h>
-#include <vm.h>
-
-uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *info)
-{
-	if (id == 0) {
-		mprv_write_ulong(&info->base, 2U*GiB);
-
-		/* TODO: Return the correct value */
-		mprv_write_ulong(&info->size, 1*GiB);
-		return 0;
-	}
-
-	return -1;
-}
-
-uintptr_t mcall_send_ipi(uintptr_t recipient)
-{
-	die("mcall_send_ipi is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_clear_ipi(void)
-{
-	// only clear SSIP if no other events are pending
-	if (HLS()->device_response_queue_head == NULL) {
-		clear_csr(mip, MIP_SSIP);
-		mb();
-	}
-
-	return atomic_swap(&HLS()->ipi_pending, 0);
-}
-
-uintptr_t mcall_shutdown(void)
-{
-	die("mcall_shutdown is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_set_timer(unsigned long long when)
-{
-	printk(BIOS_DEBUG, "mcall_set_timer is currently not implemented, ignoring\n");
-	return 0;
-}
-
-uintptr_t mcall_dev_req(sbi_device_message *m)
-{
-	die("mcall_dev_req is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_dev_resp(void)
-{
-	die("mcall_dev_resp is currently not implemented");
-	return 0;
-}
-
-void hls_init(uint32_t hart_id)
-{
-	memset(HLS(), 0, sizeof(*HLS()));
-	HLS()->hart_id = hart_id;
-}
-
-uintptr_t mcall_console_putchar(uint8_t ch)
-{
-	do_putchar(ch);
-	return 0;
-}
diff --git a/src/mainboard/emulation/spike-riscv/Makefile.inc b/src/mainboard/emulation/spike-riscv/Makefile.inc
index e3c9481..36f1fca 100644
--- a/src/mainboard/emulation/spike-riscv/Makefile.inc
+++ b/src/mainboard/emulation/spike-riscv/Makefile.inc
@@ -13,14 +13,11 @@
 ## GNU General Public License for more details.
 
 bootblock-y += uart.c
-bootblock-y += spike_util.c
 bootblock-y += rom_media.c
 romstage-y += romstage.c
 romstage-y += uart.c
-romstage-y += spike_util.c
 romstage-y += rom_media.c
 ramstage-y += uart.c
-ramstage-y += spike_util.c
 ramstage-y += rom_media.c
 
 bootblock-y += memlayout.ld
diff --git a/src/mainboard/emulation/spike-riscv/spike_util.c b/src/mainboard/emulation/spike-riscv/spike_util.c
deleted file mode 100644
index c97a61f..0000000
--- a/src/mainboard/emulation/spike-riscv/spike_util.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2013, The Regents of the University of California (Regents).
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Regents nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
- * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
- * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
- * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
- * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#include <arch/barrier.h>
-#include <arch/errno.h>
-#include <atomic.h>
-#include <console/console.h>
-#include <spike_util.h>
-#include <string.h>
-#include <vm.h>
-
-uintptr_t mcall_query_memory(uintptr_t id, memory_block_info *info)
-{
-	if (id == 0) {
-		mprv_write_ulong(&info->base, 2U*GiB);
-
-		/* TODO: Return the correct value */
-		mprv_write_ulong(&info->size, 1*GiB);
-		return 0;
-	}
-
-	return -1;
-}
-
-uintptr_t mcall_send_ipi(uintptr_t recipient)
-{
-	die("mcall_send_ipi is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_clear_ipi(void)
-{
-	// only clear SSIP if no other events are pending
-	if (HLS()->device_response_queue_head == NULL) {
-		clear_csr(mip, MIP_SSIP);
-		mb();
-	}
-
-	return atomic_swap(&HLS()->ipi_pending, 0);
-}
-
-uintptr_t mcall_shutdown(void)
-{
-	die("mcall_shutdown is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_set_timer(unsigned long long when)
-{
-	printk(BIOS_DEBUG, "mcall_set_timer is currently not implemented, ignoring\n");
-	return 0;
-}
-
-uintptr_t mcall_dev_req(sbi_device_message *m)
-{
-	die("mcall_dev_req is currently not implemented");
-	return 0;
-}
-
-uintptr_t mcall_dev_resp(void)
-{
-	die("mcall_dev_resp is currently not implemented");
-	return 0;
-}
-
-void hls_init(uint32_t hart_id)
-{
-	memset(HLS(), 0, sizeof(*HLS()));
-	HLS()->hart_id = hart_id;
-}
-
-uintptr_t mcall_console_putchar(uint8_t ch)
-{
-	do_putchar(ch);
-	return 0;
-}
diff --git a/src/mainboard/emulation/spike-riscv/uart.c b/src/mainboard/emulation/spike-riscv/uart.c
index 8513849..57647fe 100644
--- a/src/mainboard/emulation/spike-riscv/uart.c
+++ b/src/mainboard/emulation/spike-riscv/uart.c
@@ -17,7 +17,6 @@
 #include <console/uart.h>
 #include <arch/io.h>
 #include <boot/coreboot_tables.h>
-#include <spike_util.h>
 
 uintptr_t uart_platform_base(int idx)
 {



More information about the coreboot-gerrit mailing list