Add microwatt_soc.h and io.h include file
This contains C definitions for various Microwatt internal MMIOs and a set of accessors. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>pull/170/head
							parent
							
								
									025cf5efe8
								
							
						
					
					
						commit
						33de131384
					
				@ -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 */
 | 
			
		||||
 | 
			
		||||
@ -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 */
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue