Add microwatt_soc.h and io.h include file
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 8 May 2020 00:27:33 +0000 (10:27 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 8 May 2020 11:06:16 +0000 (21:06 +1000)
This contains C definitions for various Microwatt internal MMIOs
and a set of accessors.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
include/io.h [new file with mode: 0644]
include/microwatt_soc.h [new file with mode: 0644]

diff --git a/include/io.h b/include/io.h
new file mode 100644 (file)
index 0000000..bc73c9a
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __IO_H
+#define __IO_H
+
+static inline uint8_t readb(unsigned long addr)
+{
+       uint8_t val;
+       __asm__ volatile("sync; lbzcix %0,0,%1" : "=r" (val) : "r" (addr) : "memory");
+       return val;
+}
+
+static inline uint16_t readw(unsigned long addr)
+{
+       uint16_t val;
+       __asm__ volatile("sync; lhzcix %0,0,%1" : "=r" (val) : "r" (addr) : "memory");
+       return val;
+}
+
+static inline uint32_t readl(unsigned long addr)
+{
+       uint32_t val;
+       __asm__ volatile("sync; lwzcix %0,0,%1" : "=r" (val) : "r" (addr) : "memory");
+       return val;
+}
+
+static inline uint64_t readq(unsigned long addr)
+{
+       uint64_t val;
+       __asm__ volatile("sync; ldcix %0,0,%1" : "=r" (val) : "r" (addr) : "memory");
+       return val;
+}
+
+static inline void writeb(uint8_t val, unsigned long addr)
+{
+       __asm__ volatile("sync; stbcix %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+}
+
+static inline void writew(uint16_t val, unsigned long addr)
+{
+       __asm__ volatile("sync; sthcix %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+}
+
+static inline void writel(uint32_t val, unsigned long addr)
+{
+       __asm__ volatile("sync; stwcix %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+}
+
+static inline void writeq(uint64_t val, unsigned long addr)
+{
+       __asm__ volatile("sync; stdcix %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+}
+
+#endif /* __IO_H */
+
diff --git a/include/microwatt_soc.h b/include/microwatt_soc.h
new file mode 100644 (file)
index 0000000..35add6b
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __MICROWATT_SOC_H
+#define __MICROWATT_SOC_H
+
+/*
+ * Definitions for the syscon registers
+ */
+#define SYSCON_BASE    0xc0000000
+
+#define SYS_REG_SIGNATURE              0x00
+#define SYS_REG_INFO                   0x08
+#define   SYS_REG_INFO_HAS_UART                (1ull << 0)
+#define   SYS_REG_INFO_HAS_DRAM                (1ull << 1)
+#define SYS_REG_BRAMINFO               0x10
+#define SYS_REG_DRAMINFO               0x18
+#define SYS_REG_CLKINFO                        0x20
+#define SYS_REG_CTRL                   0x28
+#define   SYS_REG_CTRL_DRAM_AT_0               (1ull << 0)
+#define   SYS_REG_CTRL_CORE_RESET              (1ull << 1)
+#define   SYS_REG_CTRL_SOC_RESET               (1ull << 2)
+
+/* Definition for the "Potato" UART */
+#define UART_BASE      0xc0002000
+
+#define POTATO_CONSOLE_TX              0x00
+#define POTATO_CONSOLE_RX              0x08
+#define POTATO_CONSOLE_STATUS          0x10
+#define   POTATO_CONSOLE_STATUS_RX_EMPTY               0x01
+#define   POTATO_CONSOLE_STATUS_TX_EMPTY               0x02
+#define   POTATO_CONSOLE_STATUS_RX_FULL                        0x04
+#define   POTATO_CONSOLE_STATUS_TX_FULL                        0x08
+#define POTATO_CONSOLE_CLOCK_DIV       0x18
+#define POTATO_CONSOLE_IRQ_EN          0x20
+
+#endif /* __MICROWATT_SOC_H */