Home | History | Annotate | Line # | Download | only in gemini
      1  1.10   andvar /*	$NetBSD: gemini_reg.h,v 1.10 2024/11/19 05:00:08 andvar Exp $	*/
      2   1.1     matt 
      3   1.1     matt #ifndef _ARM_GEMINI_REG_H_
      4   1.1     matt #define _ARM_GEMINI_REG_H_
      5   1.1     matt 
      6   1.1     matt /*
      7   1.1     matt  * Register definitions for Gemini SOC
      8   1.1     matt  */
      9   1.1     matt 
     10   1.1     matt #include "opt_gemini.h"
     11   1.1     matt #include <machine/endian.h>
     12   1.1     matt #include <sys/cdefs.h>
     13   1.1     matt 
     14   1.1     matt #if defined(SL3516)
     15   1.1     matt /*
     16   1.1     matt  * Gemini SL3516 memory map
     17   1.1     matt  */
     18   1.1     matt #define GEMINI_SRAM_BASE	0x00000000	/* Internal SRAM  */
     19   1.2    cliff 						/* NOTE: use the SHADOW to avoid conflict w/ DRAM */
     20   1.1     matt #define GEMINI_SRAM_SIZE	0x10000000 	/* 128 MB */
     21   1.2    cliff #define GEMINI_DRAM_BASE	0x00000000 	/* DRAM (via DDR Control Module) */
     22   1.2    cliff 						/* NOTE: this is a shadow of 0x10000000 */
     23   1.1     matt #define GEMINI_DRAM_SIZE	0x20000000	/* 512 MB */
     24   1.2    cliff 						/* NOTE: size of addr space, not necessarily populated */
     25   1.1     matt #define GEMINI_FLASH_BASE	0x30000000 	/* DRAM (via DDR Control Module) */
     26   1.1     matt #define GEMINI_FLASH_SIZE	0x10000000	/* 128 MB */
     27   1.1     matt 
     28   1.1     matt /*
     29   1.1     matt  * Gemini SL3516 device map
     30   1.1     matt  */
     31   1.1     matt #define GEMINI_GLOBAL_BASE	0x40000000 	/* Global registers */
     32   1.1     matt #define GEMINI_WATCHDOG_BASE	0x41000000 	/* Watch dog timer module */
     33   1.1     matt #define GEMINI_UART_BASE	0x42000000 	/* UART control module */
     34   1.1     matt #define GEMINI_UART_SIZE	0x20
     35   1.1     matt #define GEMINI_TIMER_BASE	0x43000000 	/* Timer module */
     36   1.1     matt #define GEMINI_LCD_BASE		0x44000000 	/* LCD Interface module */
     37   1.1     matt #define GEMINI_RTC_BASE		0x45000000 	/* Real Time Clock module */
     38   1.1     matt #define GEMINI_SATA_BASE	0x46000000 	/* Serial ATA module */
     39  1.10   andvar #define GEMINI_LPCHC_BASE	0x47000000 	/* LPC Host Controller module */
     40   1.4    cliff #define GEMINI_LPCIO_BASE	0x47800000 	/* LPC Peripherals IO space */
     41   1.1     matt #define GEMINI_IC0_BASE		0x48000000 	/* Interrupt Control module #0 */
     42   1.1     matt #define GEMINI_IC1_BASE		0x49000000 	/* Interrupt Control module #1 */
     43   1.1     matt #define GEMINI_SSPC_BASE	0x4a000000 	/* Synchronous Serial Port Control module */
     44   1.1     matt #define GEMINI_PWRC_BASE	0x4b000000 	/* Power Control module */
     45   1.1     matt #define GEMINI_CIR_BASE		0x4c000000 	/* CIR Control module */
     46   1.1     matt #define GEMINI_GPIO0_BASE	0x4d000000 	/* GPIO module #0 */
     47   1.1     matt #define GEMINI_GPIO1_BASE	0x4e000000 	/* GPIO module #1 */
     48   1.1     matt #define GEMINI_GPIO2_BASE	0x4f000000 	/* GPIO module #2 */
     49   1.1     matt #define GEMINI_PCICFG_BASE	0x50000000 	/* PCI IO, configuration and control space */
     50   1.1     matt #define GEMINI_PCIIO_BASE	0x50001000 	/* PCI IO     space      */
     51   1.1     matt #define GEMINI_PCIIO_SIZE	0x0007f000 	/* PCI IO     space size */
     52   1.1     matt #define GEMINI_PCIMEM_BASE	0x58000000 	/* PCI Memory space      */
     53   1.1     matt #define GEMINI_PCIMEM_SIZE	0x08000000 	/* PCI Memory space size */
     54   1.7     matt #define GEMINI_GMAC_BASE	0x60000000 	/* NetEngine & GMAC Configuration registers */
     55   1.7     matt #define GEMINI_GMAC_SIZE	0x00010000 	/* NetEngine & GMAC Configuration size */
     56   1.1     matt #define GEMINI_SDC_BASE		0x62000000 	/* Security DMA and Configure registers */
     57   1.1     matt #define GEMINI_MIDE_BASE	0x63000000 	/* Multi IDE registers */
     58   1.1     matt #define GEMINI_RXDC_BASE	0x64000000 	/* RAID XOR DMA Configuration registers */
     59   1.1     matt #define GEMINI_FLASHC_BASE	0x65000000 	/* Flash Controller registers */
     60   1.1     matt #define GEMINI_DRAMC_BASE	0x66000000 	/* DRAM (DDR/SDR) Controller registers */
     61   1.1     matt #define GEMINI_GDMA_BASE	0x67000000 	/* General DMA registers */
     62   1.1     matt #define GEMINI_USB0_BASE	0x68000000 	/* USB #0 registers */
     63   1.1     matt #define GEMINI_USB1_BASE	0x69000000 	/* USB #1 registers */
     64   1.1     matt #define GEMINI_TVE_BASE		0x6a000000 	/* TVE registers */
     65   1.1     matt #define GEMINI_SRAM_SHADOW_BASE	0x70000000 	/* Shadow of internal SRAM */
     66   1.1     matt 
     67   1.1     matt /*
     68   1.3    cliff  * Gemini SL3516 Global register offsets and bits
     69   1.3    cliff  */
     70   1.3    cliff #define GEMINI_GLOBAL_WORD_ID	0x0		/* Global Word ID */			/* ro */
     71   1.3    cliff #define  GLOBAL_ID_CHIP_ID	__BITS(31,8)
     72   1.3    cliff #define  GLOBAL_ID_CHIP_REV	__BITS(7,0)
     73   1.3    cliff #define GEMINI_GLOBAL_RESET_CTL	0xc		/* Global Soft Reset Control */		/* rw */
     74   1.4    cliff #define GLOBAL_RESET_GLOBAL	__BIT(31)	/* Global Soft Reset */
     75   1.4    cliff #define GLOBAL_RESET_CPU1	__BIT(30)	/* CPU#1 reset hold */
     76   1.8     matt #define GLOBAL_RESET_GMAC1	__BIT(6)	/* GMAC1 reset hold */
     77   1.8     matt #define GLOBAL_RESET_GMAC0	__BIT(5)	/* CGMAC reset hold */
     78   1.4    cliff #define GEMINI_GLOBAL_MISC_CTL	0x30		/* Miscellaneous Control */		/* rw */
     79   1.5    cliff #define GEMINI_GLOBAL_CPU0	0x38		/* CPU #0 Status and Control */		/* rw */
     80   1.5    cliff #define  GLOBAL_CPU0_IPICPU1	__BIT(31)	/* IPI to CPU#1 */
     81   1.5    cliff #define GEMINI_GLOBAL_CPU1	0x3c		/* CPU #1 Status and Control */		/* rw */
     82   1.5    cliff #define  GLOBAL_CPU1_IPICPU0	__BIT(31)	/* IPI to CPU#0 */
     83   1.3    cliff 
     84   1.3    cliff /*
     85   1.1     matt  * Gemini SL3516 Watchdog device register offsets and bits
     86   1.1     matt  */
     87   1.1     matt #define GEMINI_WDT_WDCOUNTER	0x0		/* Watchdog Timer Counter */		/* ro */
     88   1.1     matt #define GEMINI_WDT_WDLOAD	0x4		/* Watchdog Timer Load */		/* rw */
     89   1.1     matt #define  WDT_WDLOAD_DFLT	0x3EF1480	/* default Load reg val */
     90   1.1     matt #define GEMINI_WDT_WDRESTART	0x8		/* Watchdog Timer Restart */		/* wo */
     91   1.1     matt #define  WDT_WDRESTART_Resv	__BITS(31,16)
     92   1.1     matt #define  WDT_WDRESTART_RST	__BITS(15,0)
     93   1.1     matt #define   WDT_WDRESTART_MAGIC	0x5ab9
     94   1.1     matt #define GEMINI_WDT_WDCR		0xc		/* Watchdog Timer Control */		/* rw */
     95   1.1     matt #define  WDT_WDCR_Resv		__BITS(31,5)
     96   1.1     matt #define  WDT_WDCR_CLKSRC	__BIT(4)	/* Timer Clock Source: 5 MHz clock */
     97   1.1     matt #define   WDCR_CLKSRC_PCLK	(0 << 4)	/* Timer Clock Source: PCLK (APB CLK) */
     98   1.1     matt #define   WDCR_CLKSRC_5MHZ	(1 << 4)	/* Timer Clock Source: 5 MHz clock */
     99   1.1     matt #define  WDT_WDCR_EXTSIG_ENB	__BIT(3)	/* Timer External Signal Enable */
    100   1.1     matt #define  WDT_WDCR_INTR_ENB	__BIT(2)	/* Timer System Interrupt Enable */
    101   1.1     matt #define  WDT_WDCR_RESET_ENB	__BIT(1)	/* Timer System Reset Enable */
    102   1.1     matt #define  WDT_WDCR_ENB		__BIT(0)	/* Timer Enable */
    103   1.1     matt #define GEMINI_WDT_WDSTATUS	0x10		/* Watchdog Timer Status */		/* ro */
    104   1.1     matt #define  WDT_WDSTATUS_Resv	__BITS(31,1)
    105   1.1     matt #define  WDT_WDSTATUS_ZERO	__BIT(0)	/* non-zero if timer counted down to zero! */
    106   1.1     matt #define GEMINI_WDT_WDCLEAR	0x14		/* Watchdog Timer Clear */		/* wo */
    107   1.1     matt #define  WDT_WDCLEAR_Resv	__BITS(31,1)
    108   1.1     matt #define  WDT_WDCLEAR_CLEAR	__BIT(0)	/* write this bit to clear Status */
    109   1.1     matt #define GEMINI_WDT_WDINTERLEN	0x18		/* Watchdog Timer Interrupt Length */	/* rw */
    110   1.1     matt 						/*  duration of signal assertion,  */
    111   1.1     matt 						/*  in units of clock cycles       */
    112   1.1     matt #define  WDT_WDINTERLEN_DFLT	0xff		/*  default is 256 cycles          */
    113   1.1     matt 
    114   1.1     matt 
    115   1.1     matt /*
    116   1.1     matt  * Gemini SL3516 Timer device register offsets and bits
    117   1.1     matt  *
    118   1.1     matt  * have 3 timers, here indexed 1<=(n)<=3 as in the doc
    119   1.1     matt  * each has 4 sequential 32bit rw regs
    120   1.1     matt  */
    121   1.1     matt #define GEMINI_NTIMERS			3
    122   1.1     matt #define GEMINI_TIMERn_REG(n, o)		((((n) - 1) * 0x10) + (o))
    123   1.1     matt #define GEMINI_TIMERn_COUNTER(n)	GEMINI_TIMERn_REG((n), 0x0)			/* rw */
    124   1.1     matt #define GEMINI_TIMERn_LOAD(n)		GEMINI_TIMERn_REG((n), 0x4)			/* rw */
    125   1.1     matt #define GEMINI_TIMERn_MATCH1(n)		GEMINI_TIMERn_REG((n), 0x08)			/* rw */
    126   1.1     matt #define GEMINI_TIMERn_MATCH2(n) 	GEMINI_TIMERn_REG((n), 0x0C)			/* rw */
    127   1.1     matt #define GEMINI_TIMER_TMCR		0x30						/* rw */
    128   1.1     matt #define  TIMER_TMCR_Resv		__BITS(31,12)
    129   1.1     matt #define  TIMER_TMCR_TMnUPDOWN(n)	__BIT(9 + (n) - 1)
    130   1.1     matt #define  TIMER_TMCR_TMnOFENABLE(n)	__BIT((((n) - 1) * 3) + 2)
    131   1.1     matt #define  TIMER_TMCR_TMnCLOCK(n)		__BIT((((n) - 1) * 3) + 1)
    132   1.1     matt #define  TIMER_TMCR_TMnENABLE(n)	__BIT((((n) - 1) * 3) + 0)
    133   1.1     matt #define  GEMINI_TIMER_TMnCR_MASK(n) 		\
    134   1.1     matt 		( TIMER_TMCR_TMnUPDOWN(n)	\
    135   1.1     matt 		| TIMER_TMCR_TMnOFENABLE(n)	\
    136   1.1     matt 		| TIMER_TMCR_TMnCLOCK(n)	\
    137   1.1     matt 		| TIMER_TMCR_TMnENABLE(n) )
    138   1.1     matt #define GEMINI_TIMER_INTRSTATE		0x34						/* rw */
    139   1.1     matt #define  TIMER_INTRSTATE_Resv		__BITS(31,9)
    140   1.1     matt #define  TIMER_INTRSTATE_TMnOVFLOW(n)	__BIT((((n) -1) * 3) + 2)
    141   1.1     matt #define  TIMER_INTRSTATE_TMnMATCH2(n)	__BIT((((n) -1) * 3) + 1)
    142   1.1     matt #define  TIMER_INTRSTATE_TMnMATCH1(n)	__BIT((((n) -1) * 3) + 0)
    143   1.1     matt #define GEMINI_TIMER_INTRMASK		0x38						/* rw */
    144   1.1     matt #define  TIMER_INTRMASK_Resv		__BITS(31,9)
    145   1.1     matt #define  TIMER_INTRMASK_TMnOVFLOW(n)	__BIT((((n) -1) * 3) + 2)
    146   1.1     matt #define  TIMER_INTRMASK_TMnMATCH2(n)	__BIT((((n) -1) * 3) + 1)
    147   1.1     matt #define  TIMER_INTRMASK_TMnMATCH1(n)	__BIT((((n) -1) * 3) + 0)
    148   1.1     matt #define GEMINI_TIMERn_INTRMASK(n) \
    149   1.1     matt 		( TIMER_INTRMASK_TMnOVFLOW(n)	\
    150   1.1     matt 		| TIMER_INTRMASK_TMnMATCH2(n)	\
    151   1.1     matt 		| TIMER_INTRMASK_TMnMATCH1(n) )
    152   1.1     matt 
    153   1.1     matt /*
    154   1.1     matt  * Gemini SL3516 Interrupt Controller device register offsets and bits
    155   1.1     matt  */
    156   1.1     matt #define GEMINI_ICU_IRQ_SOURCE		0x0						/* ro */
    157   1.1     matt #define GEMINI_ICU_IRQ_ENABLE		0x4						/* rw */
    158   1.1     matt #define GEMINI_ICU_IRQ_CLEAR		0x8						/* wo */
    159   1.1     matt #define GEMINI_ICU_IRQ_TRIGMODE		0xc						/* rw */
    160   1.1     matt #define  ICU_IRQ_TRIGMODE_EDGE		1		/* edge triggered */
    161   1.1     matt #define  ICU_IRQ_TRIGMODE_LEVEL		0		/* level triggered */
    162   1.1     matt #define GEMINI_ICU_IRQ_TRIGLEVEL	0x10						/* rw */
    163   1.1     matt #define  ICU_IRQ_TRIGLEVEL_LO		1		/* active low or falling edge */
    164   1.1     matt #define  ICU_IRQ_TRIGLEVEL_HI		0		/* active high or rising edge */
    165   1.1     matt #define GEMINI_ICU_IRQ_STATUS		0x14						/* ro */
    166   1.1     matt 
    167   1.1     matt #define GEMINI_ICU_FIQ_SOURCE		0x20						/* ro */
    168   1.1     matt #define GEMINI_ICU_FIQ_ENABLE		0x24						/* rw */
    169   1.1     matt #define GEMINI_ICU_FIQ_CLEAR		0x28						/* wo */
    170   1.1     matt #define GEMINI_ICU_FIQ_TRIGMODE		0x2c						/* rw */
    171   1.1     matt #define GEMINI_ICU_FIQ_TRIGLEVEL	0x30						/* rw */
    172   1.1     matt #define GEMINI_ICU_FIQ_STATUS		0x34						/* ro */
    173   1.1     matt 
    174   1.1     matt #define GEMINI_ICU_REVISION		0x50						/* ro */
    175   1.1     matt #define GEMINI_ICU_INPUT_NUM		0x54						/* ro */
    176   1.1     matt #define  ICU_INPUT_NUM_RESV		__BITS(31,16)
    177   1.1     matt #define  ICU_INPUT_NUM_IRQ		__BITS(15,8)
    178   1.1     matt #define  ICU_INPUT_NUM_FIQ		__BITS(7,0)
    179   1.1     matt #define GEMINI_ICU_IRQ_DEBOUNCE		0x58						/* ro */
    180   1.1     matt #define GEMINI_ICU_FIQ_DEBOUNCE		0x5c						/* ro */
    181   1.1     matt 
    182   1.1     matt 
    183   1.1     matt /*
    184   1.4    cliff  * Gemini LPC controller register offsets and bits
    185   1.4    cliff  */
    186   1.4    cliff #define GEMINI_LPCHC_ID			0x00						/* ro */
    187   1.4    cliff # define LPCHC_ID_DEVICE		__BITS(31,8)	/* Device ID */
    188   1.4    cliff # define LPCHC_ID_REV			__BITS(7,0)	/* Revision */
    189   1.4    cliff # define _LPCHC_ID_DEVICE(r)		((typeof(r))(((r) & LPCHC_ID_DEVICE) >> 8))
    190   1.4    cliff # define _LPCHC_ID_REV(r)		((typeof(r))(((r) & LPCHC_ID_REV) >> 0))
    191   1.4    cliff #define GEMINI_LPCHC_CSR		0x04						/* rw */
    192   1.4    cliff # define LPCHC_CSR_RESa			__BITS(31,24)
    193   1.4    cliff # define LPCHC_CSR_STO			__BIT(23)	/* Sync Time Out */
    194   1.4    cliff # define LPCHC_CSR_SERR			__BIT(22)	/* Sync Error */
    195   1.4    cliff # define LPCHC_CSR_RESb			__BITS(21,8)
    196   1.4    cliff # define LPCHC_CSR_STOE			__BIT(7)	/* Sync Time Out Enable */
    197   1.4    cliff # define LPCHC_CSR_SERRE		__BIT(6)	/* Sync Error Enable */
    198   1.4    cliff # define LPCHC_CSR_RESc			__BITS(5,1)
    199   1.4    cliff # define LPCHC_CSR_BEN			__BIT(0)	/* Bridge Enable */
    200   1.4    cliff #define GEMINI_LPCHC_IRQCTL		0x08						/* rw */
    201   1.4    cliff # define LPCHC_IRQCTL_RESV		__BITS(31,8)
    202   1.4    cliff # define LPCHC_IRQCTL_SIRQEN		__BIT(7)	/* Serial IRQ Enable */
    203   1.4    cliff # define LPCHC_IRQCTL_SIRQMS		__BIT(6)	/* Serial IRQ Mode Select */
    204   1.4    cliff # define LPCHC_IRQCTL_SIRQFN		__BITS(5,2)	/* Serial IRQ Frame Number */
    205   1.4    cliff # define LPCHC_IRQCTL_SIRQFW		__BITS(1,0)	/* Serial IRQ Frame Width */
    206   1.4    cliff #  define IRQCTL_SIRQFW_4		0
    207   1.4    cliff #  define IRQCTL_SIRQFW_6		1
    208   1.4    cliff #  define IRQCTL_SIRQFW_8		2
    209   1.4    cliff #  define IRQCTL_SIRQFW_RESV		3
    210   1.4    cliff #define GEMINI_LPCHC_SERIRQSTS		0x0c						/* rwc */
    211   1.4    cliff # define LPCHC_SERIRQSTS_RESV		__BITS(31,17)
    212   1.4    cliff #define GEMINI_LPCHC_SERIRQTYP		0x10						/* rw */
    213   1.4    cliff # define LPCHC_SERIRQTYP_RESV		__BITS(31,17)
    214   1.4    cliff #  define SERIRQTYP_EDGE		1
    215   1.4    cliff #  define SERIRQTYP_LEVEL		0
    216   1.4    cliff #define GEMINI_LPCHC_SERIRQPOLARITY	0x14						/* rw */
    217   1.4    cliff # define LPCHC_SERIRQPOLARITY_RESV	__BITS(31,17)
    218   1.4    cliff #  define SERIRQPOLARITY_HI		1
    219   1.4    cliff #  define SERIRQPOLARITY_LO		0
    220   1.4    cliff #define GEMINI_LPCHC_SIZE		(GEMINI_LPCHC_SERIRQPOLARITY + 4)
    221   1.4    cliff #define GEMINI_LPCHC_NSERIRQ		17
    222   1.4    cliff 
    223   1.4    cliff /*
    224   1.6    cliff  * Gemini GPIO controller register offsets and bits
    225   1.6    cliff  */
    226   1.6    cliff #define GEMINI_GPIO_DATAOUT		0x00		/* Data Out */			/* rw */
    227   1.6    cliff #define GEMINI_GPIO_DATAIN		0x04		/* Data Out */			/* ro */
    228   1.6    cliff #define GEMINI_GPIO_PINDIR		0x08		/* Pin Direction */		/* rw */
    229   1.6    cliff #define  GPIO_PINDIR_INPUT		0
    230   1.6    cliff #define  GPIO_PINDIR_OUTPUT		1
    231   1.6    cliff #define GEMINI_GPIO_PINBYPASS		0x0c		/* Pin Bypass */		/* rw */
    232   1.6    cliff #define GEMINI_GPIO_DATASET		0x10		/* Data Set */			/* wo */
    233   1.6    cliff #define GEMINI_GPIO_DATACLR		0x14		/* Data Clear */		/* wo */
    234   1.6    cliff #define GEMINI_GPIO_PULLENB		0x18		/* Pullup Enable */		/* rw */
    235   1.6    cliff #define GEMINI_GPIO_PULLTYPE		0x1c		/* Pullup Type */		/* rw */
    236   1.6    cliff #define  GPIO_PULLTYPE_LOW		0
    237   1.6    cliff #define  GPIO_PULLTYPE_HIGH		1
    238   1.6    cliff #define GEMINI_GPIO_INTRENB		0x20		/* Interrupt Enable */		/* rw */
    239   1.6    cliff #define GEMINI_GPIO_INTRRAWSTATE	0x24		/* Interrupt Raw State */	/* ro */
    240   1.6    cliff #define GEMINI_GPIO_INTRMSKSTATE	0x28		/* Interrupt Masked State */	/* ro */
    241   1.6    cliff #define GEMINI_GPIO_INTRMASK		0x2c		/* Interrupt Mask */		/* rw */
    242   1.6    cliff #define GEMINI_GPIO_INTRCLR		0x30		/* Interrupt Clear */		/* wo */
    243   1.6    cliff #define GEMINI_GPIO_INTRTRIG		0x34		/* Interrupt Trigger Method */	/* rw */
    244   1.6    cliff #define  GPIO_INTRTRIG_EDGE		0
    245   1.6    cliff #define  GPIO_INTRTRIG_LEVEL		1
    246   1.6    cliff #define GEMINI_GPIO_INTREDGEBOTH	0x38		/* Both edges trigger Intr. */	/* rw */
    247   1.6    cliff #define GEMINI_GPIO_INTRDIR		0x3c		/* edge/level direction */	/* rw */
    248   1.6    cliff #define  GPIO_INTRDIR_EDGE_RISING	0
    249   1.6    cliff #define  GPIO_INTRDIR_EDGE_FALLING	1
    250   1.6    cliff #define  GPIO_INTRDIR_LEVEL_HIGH	0
    251   1.6    cliff #define  GPIO_INTRDIR_LEVEL_LOW		1
    252   1.6    cliff #define GEMINI_GPIO_BOUNCEENB		0x40		/* Bounce Enable */		/* rw */
    253   1.6    cliff #define GEMINI_GPIO_BOUNCESCALE		0x44		/* Bounce Pre-Scale */		/* rw */
    254   1.6    cliff #define  GPIO_BOUNCESCALE_RESV		__BITS(31,16)
    255   1.6    cliff #define  GPIO_BOUNCESCALE_VAL		__BITS(15,0)	/* NOTE:
    256   1.6    cliff 							 * if bounce is enabled, and bounce pre-scale == 0
    257   1.9  mbalmer 							 * then the pin will not detect any interrupt
    258   1.6    cliff 							 */
    259   1.6    cliff #define GEMINI_GPIO_SIZE		(GEMINI_GPIO_BOUNCESCALE + 4)
    260   1.6    cliff 
    261   1.6    cliff /*
    262   1.1     matt  * Gemini PCI controller register offsets and bits
    263   1.1     matt  */
    264   1.1     matt #define GEMINI_PCI_IOSIZE		0x00		/* I/O Space Size */		/* rw */
    265   1.1     matt #define GEMINI_PCI_PROT			0x04		/* AHB Protection */		/* rw */
    266   1.1     matt #define GEMINI_PCI_PCICTRL		0x08		/* PCI Control Signal */	/* rw */
    267   1.1     matt #define GEMINI_PCI_ERREN		0x0c		/* Soft Reset Counter and
    268   1.1     matt 							 * Response Error Enable */	/* rw */
    269   1.1     matt #define GEMINI_PCI_SOFTRST		0x10		/* Soft Reset */
    270   1.1     matt #define GEMINI_PCI_CFG_CMD		0x28		/* PCI Configuration Command */	/* rw */
    271   1.1     matt #define  PCI_CFG_CMD_ENB		__BIT(31)	/*  Enable */
    272   1.1     matt #define  PCI_CFG_CMD_RESa		__BITS(30,24)
    273   1.1     matt #define  PCI_CFG_CMD_BUSNO		__BITS(23,16)	/*  Bus      Number */
    274   1.1     matt #define  PCI_CFG_CMD_BUSn(n)		(((n) << 16) & PCI_CFG_CMD_BUSNO)
    275   1.1     matt #define  PCI_CFG_CMD_DEVNO		__BITS(15,11)	/*  Device   Number */
    276   1.1     matt #define  PCI_CFG_CMD_DEVn(n)		(((n) << 11) & PCI_CFG_CMD_DEVNO)
    277   1.1     matt #define  PCI_CFG_CMD_FUNCNO		__BITS(10,8)	/*  Function Number */
    278   1.1     matt #define  PCI_CFG_CMD_FUNCn(n)		(((n) << 8) & PCI_CFG_CMD_FUNCNO)
    279   1.1     matt #define  PCI_CFG_CMD_REGNO		__BITS(7,2)	/*  Register Number */
    280   1.1     matt #define  PCI_CFG_CMD_REGn(n)		(((n) << 0) & PCI_CFG_CMD_REGNO)
    281   1.1     matt #define  PCI_CFG_CMD_RESb		__BITS(1,0)
    282   1.1     matt #define  PCI_CFG_CMD_RESV	\
    283   1.1     matt 		(PCI_CFG_CMD_RESa | PCI_CFG_CMD_RESb)
    284   1.1     matt #define GEMINI_PCI_CFG_DATA		0x2c		/* PCI Configuration Data */	/* rw */
    285   1.1     matt 
    286   1.1     matt /*
    287   1.1     matt  * Gemini machine dependent PCI config registers
    288   1.1     matt  */
    289   1.1     matt #define	GEMINI_PCI_CFG_REG_PMR1		0x40		/* Power Management 1 */	/* rw */
    290   1.1     matt #define	GEMINI_PCI_CFG_REG_PMR2		0x44		/* Power Management 2 */	/* rw */
    291   1.1     matt #define	GEMINI_PCI_CFG_REG_CTL1		0x48		/* Control 1 */			/* rw */
    292   1.1     matt #define	GEMINI_PCI_CFG_REG_CTL2		0x4c		/* Control 2 */			/* rw */
    293   1.1     matt #define	 PCI_CFG_REG_CTL2_INTSTS	__BITS(31,28)
    294   1.1     matt #define	  CFG_REG_CTL2_INTSTS_INTD	__BIT(28 + 3)
    295   1.1     matt #define	  CFG_REG_CTL2_INTSTS_INTC	__BIT(28 + 2)
    296   1.1     matt #define	  CFG_REG_CTL2_INTSTS_INTB	__BIT(28 + 1)
    297   1.1     matt #define	  CFG_REG_CTL2_INTSTS_INTA	__BIT(28 + 0)
    298   1.1     matt #define	 PCI_CFG_REG_CTL2_INTMASK	__BITS(27,16)
    299   1.1     matt #define	  CFG_REG_CTL2_INTMASK_CMDERR	__BIT(16 + 11)
    300   1.1     matt #define	  CFG_REG_CTL2_INTMASK_PARERR	__BIT(16 + 10)
    301   1.1     matt #define	  CFG_REG_CTL2_INTMASK_INTD	__BIT(16 + 9)
    302   1.1     matt #define	  CFG_REG_CTL2_INTMASK_INTC	__BIT(16 + 8)
    303   1.1     matt #define	  CFG_REG_CTL2_INTMASK_INTB	__BIT(16 + 7)
    304   1.1     matt #define	  CFG_REG_CTL2_INTMASK_INTA	__BIT(16 + 6)
    305   1.1     matt #define	  CFG_REG_CTL2_INTMASK_INT_ABCD	__BITS(16+9,16+6)
    306   1.1     matt #define	  CFG_REG_CTL2_INTMASK_MABRT_RX	__BIT(16 + 5)
    307   1.1     matt #define	  CFG_REG_CTL2_INTMASK_TABRT_RX	__BIT(16 + 4)
    308   1.1     matt #define	  CFG_REG_CTL2_INTMASK_TABRT_TX	__BIT(16 + 3)
    309   1.1     matt #define	  CFG_REG_CTL2_INTMASK_RETRY4	__BIT(16 + 2)
    310   1.1     matt #define	  CFG_REG_CTL2_INTMASK_SERR_RX	__BIT(16 + 1)
    311   1.1     matt #define	  CFG_REG_CTL2_INTMASK_PERR_RX	__BIT(16 + 0)
    312   1.1     matt #define	 PCI_CFG_REG_CTL2_RESa		__BIT(15)
    313   1.1     matt #define	 PCI_CFG_REG_CTL2_MSTPRI	__BITS(14,8)
    314   1.1     matt #define	  CFG_REG_CTL2_MSTPRI_REQn(n)	__BIT(8 + (n))
    315   1.1     matt #define	 PCI_CFG_REG_CTL2_RESb		__BITS(7,4)
    316   1.1     matt #define	 PCI_CFG_REG_CTL2_TRDYW		__BITS(3,0)
    317   1.1     matt #define	 PCI_CFG_REG_CTL2_RESV	\
    318   1.1     matt 		(PCI_CFG_REG_CTL2_RESa | PCI_CFG_REG_CTL2_RESb)
    319   1.1     matt #define	GEMINI_PCI_CFG_REG_MEM1		0x50		/* Memory 1 Base */		/* rw */
    320   1.1     matt #define	GEMINI_PCI_CFG_REG_MEM2		0x54		/* Memory 2 Base */		/* rw */
    321   1.1     matt #define	GEMINI_PCI_CFG_REG_MEM3		0x58		/* Memory 3 Base */		/* rw */
    322   1.1     matt #define	 PCI_CFG_REG_MEM_BASE_MASK	__BITS(31,20)
    323   1.1     matt #define	 PCI_CFG_REG_MEM_BASE(base)	((base) & PCI_CFG_REG_MEM_BASE_MASK)
    324   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_MASK	__BITS(19,16)
    325   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_1MB	(0x0 << 16)
    326   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_2MB	(0x1 << 16)
    327   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_4MB	(0x2 << 16)
    328   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_8MB	(0x3 << 16)
    329   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_16MB	(0x4 << 16)
    330   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_32MB	(0x5 << 16)
    331   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_64MB	(0x6 << 16)
    332   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_128MB	(0x7 << 16)
    333   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_256MB	(0x8 << 16)
    334   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_512MB	(0x9 << 16)
    335   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_1GB	(0xa << 16)
    336   1.1     matt #define	 PCI_CFG_REG_MEM_SIZE_2GB	(0xb << 16)
    337   1.1     matt #define	 PCI_CFG_REG_MEM_RESV		__BITS(19,16)
    338   1.1     matt 
    339   1.1     matt #ifndef _LOCORE
    340   1.1     matt static inline unsigned int
    341   1.1     matt gemini_pci_cfg_reg_mem_size(size_t sz)
    342   1.1     matt {
    343   1.1     matt 	switch (sz) {
    344   1.1     matt 	case (1 << 20):
    345   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_1MB;
    346   1.1     matt 	case (2 << 20):
    347   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_2MB;
    348   1.1     matt 	case (4 << 20):
    349   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_4MB;
    350   1.1     matt 	case (8 << 20):
    351   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_8MB;
    352   1.1     matt 	case (16 << 20):
    353   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_16MB;
    354   1.1     matt 	case (32 << 20):
    355   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_32MB;
    356   1.1     matt 	case (64 << 20):
    357   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_64MB;
    358   1.1     matt 	case (128 << 20):
    359   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_128MB;
    360   1.1     matt 	case (256 << 20):
    361   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_256MB;
    362   1.1     matt 	case (512 << 20):
    363   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_512MB;
    364   1.1     matt 	case (1024 << 20):
    365   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_1GB;
    366   1.1     matt 	case (2048 << 20):
    367   1.1     matt 		return PCI_CFG_REG_MEM_SIZE_2GB;
    368   1.1     matt 	default:
    369   1.1     matt 		panic("gemini_pci_cfg_reg_mem_size: bad size %#lx\n", sz);
    370   1.1     matt 	}
    371   1.1     matt 	/* NOTREACHED */
    372   1.1     matt }
    373   1.1     matt #endif	/* _LOCORE */
    374   1.1     matt 
    375   1.4    cliff /*
    376   1.4    cliff  * Gemini SL3516 IDE device register offsets, &etc.
    377   1.4    cliff  */
    378   1.4    cliff #define GEMINI_MIDE_NCHAN		2
    379   1.4    cliff #define GEMINI_MIDE_OFFSET(chan)	((chan == 0) ? 0x0 : 0x400000)
    380   1.4    cliff #define GEMINI_MIDE_BASEn(chan)		(GEMINI_MIDE_BASE + GEMINI_MIDE_OFFSET(chan))
    381   1.4    cliff #define GEMINI_MIDE_CMDBLK		0x20
    382   1.4    cliff #define GEMINI_MIDE_CTLBLK		0x36
    383   1.4    cliff #define GEMINI_MIDE_SIZE		0x40
    384   1.4    cliff 
    385   1.4    cliff 
    386   1.5    cliff /*
    387   1.5    cliff  * Gemini DRAM Controller register offsets, &etc.
    388   1.5    cliff  */
    389   1.5    cliff #define GEMINI_DRAMC_RMCR		0x40		/* CPU Remap Control */				/* rw */
    390   1.5    cliff #define  DRAMC_RMCR_RESa		__BITS(31,29)
    391   1.5    cliff #define  DRAMC_RMCR_RMBAR		__BITS(28,20)	/* Remap Base Address */
    392   1.5    cliff #define  DRAMC_RMCR_RMBAR_SHFT		20
    393   1.5    cliff #define  DRAMC_RMCR_RESb		__BITS(19,9)
    394   1.5    cliff #define  DRAMC_RMCR_RMSZR		__BITS(8,0)	/* Remap Size Address */
    395   1.5    cliff #define  DRAMC_RMCR_RMSZR_SHFT		0
    396   1.5    cliff 
    397   1.1     matt #else
    398   1.1     matt # error unknown gemini cpu type
    399   1.1     matt #endif
    400   1.1     matt 
    401   1.1     matt #endif	/* _ARM_GEMINI_REG_H_ */
    402