summaryrefslogtreecommitdiff
path: root/include/sbi_utils
diff options
context:
space:
mode:
authorAtish Patra <atish.patra@wdc.com>2019-06-19 00:54:03 +0300
committerAnup Patel <anup.patel@wdc.com>2019-06-19 07:18:56 +0300
commit793e5e1184f04012804914bd922e68536f3b68dd (patch)
treecb2ec2a81ed5e832de5c9c8a79dca17fce599af8 /include/sbi_utils
parent98aaf8317b74414afa78078bc056670f46c45f41 (diff)
downloadopensbi-793e5e1184f04012804914bd922e68536f3b68dd.tar.xz
platform: Move platform common to lib/utils.
Currently, platform/common contains platform/non-platform specific common minimal drivers and libraries. This is helpful is all platforms are built within opensbi framework. Move them to lib/utils so that any external platform code also can reuse the minimalistic drivers or other common libraries. This patch doesn't introduce any functional changes. Signed-off-by: Atish Patra <atish.patra@wdc.com> Acked-by: Anup Patel <anup.patel@wdc.com>
Diffstat (limited to 'include/sbi_utils')
-rw-r--r--include/sbi_utils/irqchip/plic.h21
-rw-r--r--include/sbi_utils/serial/sifive-uart.h21
-rw-r--r--include/sbi_utils/serial/uart8250.h22
-rw-r--r--include/sbi_utils/sys/clint.h35
-rw-r--r--include/sbi_utils/tinyfdt.h67
5 files changed, 166 insertions, 0 deletions
diff --git a/include/sbi_utils/irqchip/plic.h b/include/sbi_utils/irqchip/plic.h
new file mode 100644
index 0000000..eb97123
--- /dev/null
+++ b/include/sbi_utils/irqchip/plic.h
@@ -0,0 +1,21 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#ifndef __IRQCHIP_PLIC_H__
+#define __IRQCHIP_PLIC_H__
+
+#include <sbi/sbi_types.h>
+
+void plic_fdt_fixup(void *fdt, const char *compat);
+
+int plic_warm_irqchip_init(u32 target_hart, int m_cntx_id, int s_cntx_id);
+
+int plic_cold_irqchip_init(unsigned long base, u32 num_sources, u32 hart_count);
+
+#endif
diff --git a/include/sbi_utils/serial/sifive-uart.h b/include/sbi_utils/serial/sifive-uart.h
new file mode 100644
index 0000000..f323392
--- /dev/null
+++ b/include/sbi_utils/serial/sifive-uart.h
@@ -0,0 +1,21 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#ifndef __SERIAL_SIFIVE_UART_H__
+#define __SERIAL_SIFIVE_UART_H__
+
+#include <sbi/sbi_types.h>
+
+void sifive_uart_putc(char ch);
+
+int sifive_uart_getc(void);
+
+int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate);
+
+#endif
diff --git a/include/sbi_utils/serial/uart8250.h b/include/sbi_utils/serial/uart8250.h
new file mode 100644
index 0000000..0a1b5d3
--- /dev/null
+++ b/include/sbi_utils/serial/uart8250.h
@@ -0,0 +1,22 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#ifndef __SERIAL_UART8250_H__
+#define __SERIAL_UART8250_H__
+
+#include <sbi/sbi_types.h>
+
+void uart8250_putc(char ch);
+
+int uart8250_getc(void);
+
+int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
+ u32 reg_width);
+
+#endif
diff --git a/include/sbi_utils/sys/clint.h b/include/sbi_utils/sys/clint.h
new file mode 100644
index 0000000..78e1209
--- /dev/null
+++ b/include/sbi_utils/sys/clint.h
@@ -0,0 +1,35 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#ifndef __SYS_CLINT_H__
+#define __SYS_CLINT_H__
+
+#include <sbi/sbi_types.h>
+
+void clint_ipi_send(u32 target_hart);
+
+void clint_ipi_sync(u32 target_hart);
+
+void clint_ipi_clear(u32 target_hart);
+
+int clint_warm_ipi_init(void);
+
+int clint_cold_ipi_init(unsigned long base, u32 hart_count);
+
+u64 clint_timer_value(void);
+
+void clint_timer_event_stop(void);
+
+void clint_timer_event_start(u64 next_event);
+
+int clint_warm_timer_init(void);
+
+int clint_cold_timer_init(unsigned long base, u32 hart_count);
+
+#endif
diff --git a/include/sbi_utils/tinyfdt.h b/include/sbi_utils/tinyfdt.h
new file mode 100644
index 0000000..3a681d9
--- /dev/null
+++ b/include/sbi_utils/tinyfdt.h
@@ -0,0 +1,67 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Western Digital Corporation or its affiliates.
+ *
+ * Authors:
+ * Anup Patel <anup.patel@wdc.com>
+ */
+
+#ifndef __FDT_H__
+#define __FDT_H__
+
+#include <sbi/sbi_types.h>
+
+struct fdt_node {
+ char *data;
+ const struct fdt_node *parent;
+ const char *name;
+ int depth;
+ int address_cells;
+ int size_cells;
+};
+
+struct fdt_prop {
+ const struct fdt_node *node;
+ const char *name;
+ void *value;
+ u32 len;
+};
+
+/* Reverse byte-order of 32bit number */
+u32 fdt_rev32(u32 v);
+
+/* Length of a string */
+ulong fdt_strlen(const char *str);
+
+/* Compate two strings */
+int fdt_strcmp(const char *a, const char *b);
+
+/* Find index of matching string from a list of strings */
+int fdt_prop_string_index(const struct fdt_prop *prop, const char *str);
+
+/* Iterate over each property of matching node */
+int fdt_match_node_prop(void *fdt,
+ int (*match)(const struct fdt_node *node,
+ const struct fdt_prop *prop, void *priv),
+ void *match_priv,
+ void (*fn)(const struct fdt_node *node,
+ const struct fdt_prop *prop, void *priv),
+ void *fn_priv);
+
+/* Iterate over each property of compatible node */
+int fdt_compat_node_prop(void *fdt, const char *compat,
+ void (*fn)(const struct fdt_node *node,
+ const struct fdt_prop *prop, void *priv),
+ void *fn_priv);
+
+/* Iterate over each node and property */
+int fdt_walk(void *fdt,
+ void (*fn)(const struct fdt_node *node,
+ const struct fdt_prop *prop, void *priv),
+ void *fn_priv);
+
+/* Get size of FDT */
+u32 fdt_size(void *fdt);
+
+#endif