diff --git a/include/io.h b/include/io.h new file mode 100644 index 0000000..bc73c9a --- /dev/null +++ b/include/io.h @@ -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 index 0000000..35add6b --- /dev/null +++ b/include/microwatt_soc.h @@ -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 */