Home | History | Annotate | Line # | Download | only in ingenic
ingenic_regs.h revision 1.24
      1  1.24     skrll /*	$NetBSD: ingenic_regs.h,v 1.24 2016/08/27 05:56:33 skrll Exp $ */
      2   1.1  macallan 
      3   1.1  macallan /*-
      4   1.1  macallan  * Copyright (c) 2014 Michael Lorenz
      5   1.1  macallan  * All rights reserved.
      6   1.1  macallan  *
      7   1.1  macallan  * Redistribution and use in source and binary forms, with or without
      8   1.1  macallan  * modification, are permitted provided that the following conditions
      9   1.1  macallan  * are met:
     10   1.1  macallan  * 1. Redistributions of source code must retain the above copyright
     11   1.1  macallan  *    notice, this list of conditions and the following disclaimer.
     12   1.1  macallan  * 2. Redistributions in binary form must reproduce the above copyright
     13   1.1  macallan  *    notice, this list of conditions and the following disclaimer in the
     14   1.1  macallan  *    documentation and/or other materials provided with the distribution.
     15   1.1  macallan  *
     16   1.1  macallan  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17   1.1  macallan  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18   1.1  macallan  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19   1.1  macallan  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20   1.1  macallan  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21   1.1  macallan  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22   1.1  macallan  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23   1.1  macallan  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24   1.1  macallan  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25   1.1  macallan  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26   1.1  macallan  * POSSIBILITY OF SUCH DAMAGE.
     27   1.1  macallan  */
     28   1.1  macallan 
     29   1.1  macallan #ifndef INGENIC_REGS_H
     30   1.1  macallan #define INGENIC_REGS_H
     31   1.1  macallan 
     32  1.13  macallan /* for wbflush() */
     33  1.13  macallan #include <mips/locore.h>
     34  1.13  macallan 
     35   1.1  macallan /* UARTs, mostly 16550 compatible with 32bit spaced registers */
     36   1.1  macallan #define JZ_UART0 0x10030000
     37   1.1  macallan #define JZ_UART1 0x10031000
     38   1.1  macallan #define JZ_UART2 0x10032000
     39   1.1  macallan #define JZ_UART3 0x10033000
     40   1.1  macallan #define JZ_UART4 0x10034000
     41   1.1  macallan 
     42  1.13  macallan /* LCD controller base addresses, registers are in jzfb_regs.h */
     43  1.13  macallan #define JZ_LCDC0_BASE 0x13050000
     44  1.13  macallan #define JZ_LCDC1_BASE 0x130a0000
     45  1.13  macallan 
     46   1.1  macallan /* watchdog */
     47   1.1  macallan #define JZ_WDOG_TDR	0x10002000	/* compare */
     48   1.1  macallan #define JZ_WDOG_TCER	0x10002004
     49   1.1  macallan 	#define TCER_ENABLE	0x01	/* enable counter */
     50   1.1  macallan #define JZ_WDOG_TCNT	0x10002008	/* 16bit up count */
     51   1.1  macallan #define JZ_WDOG_TCSR	0x1000200c
     52   1.1  macallan 	#define TCSR_PCK_EN	0x01	/* PCLK */
     53   1.1  macallan 	#define TCSR_RTC_EN	0x02	/* RTCCLK - 32.768kHz */
     54   1.2  macallan 	#define TCSR_EXT_EN	0x04	/* EXTCLK - 48MHz */
     55   1.1  macallan 	#define TCSR_PRESCALE_M	0x38
     56   1.1  macallan 	#define TCSR_DIV_1	0x00
     57   1.1  macallan 	#define TCSR_DIV_4	0x08
     58   1.1  macallan 	#define TCSR_DIV_16	0x10
     59   1.1  macallan 	#define TCSR_DIV_64	0x18
     60   1.1  macallan 	#define TCSR_DIV_256	0x20
     61   1.1  macallan 	#define TCSR_DIV_1024	0x28
     62   1.1  macallan 
     63   1.1  macallan /* timers and PWMs */
     64   1.1  macallan #define JZ_TC_TER	0x10002010	/* TC enable reg, ro */
     65   1.1  macallan #define JZ_TC_TESR	0x10002014	/* TC enable set reg. */
     66  1.24     skrll 	#define TESR_TCST0	0x0001	/* enable counter 0 */
     67  1.24     skrll 	#define TESR_TCST1	0x0002	/* enable counter 1 */
     68  1.24     skrll 	#define TESR_TCST2	0x0004	/* enable counter 2 */
     69  1.24     skrll 	#define TESR_TCST3	0x0008	/* enable counter 3 */
     70  1.24     skrll 	#define TESR_TCST4	0x0010	/* enable counter 4 */
     71  1.24     skrll 	#define TESR_TCST5	0x0020	/* enable counter 5 */
     72  1.24     skrll 	#define TESR_TCST6	0x0040	/* enable counter 6 */
     73  1.24     skrll 	#define TESR_TCST7	0x0080	/* enable counter 7 */
     74  1.24     skrll 	#define TESR_OST	0x8000	/* enable OST */
     75   1.1  macallan #define JZ_TC_TECR	0x10002018	/* TC enable clear reg. */
     76   1.2  macallan #define JZ_TC_TFR	0x10002020
     77   1.2  macallan 	#define TFR_FFLAG0	0x00000001	/* channel 0 */
     78   1.2  macallan 	#define TFR_FFLAG1	0x00000002	/* channel 1 */
     79   1.2  macallan 	#define TFR_FFLAG2	0x00000004	/* channel 2 */
     80   1.2  macallan 	#define TFR_FFLAG3	0x00000008	/* channel 3 */
     81   1.2  macallan 	#define TFR_FFLAG4	0x00000010	/* channel 4 */
     82   1.2  macallan 	#define TFR_FFLAG5	0x00000020	/* channel 5 */
     83   1.2  macallan 	#define TFR_FFLAG6	0x00000040	/* channel 6 */
     84   1.2  macallan 	#define TFR_FFLAG7	0x00000080	/* channel 7 */
     85   1.2  macallan 	#define TFR_OSTFLAG	0x00008000	/* OS timer */
     86   1.2  macallan #define JZ_TC_TFSR	0x10002024	/* timer flag set */
     87   1.2  macallan #define JZ_TC_TFCR	0x10002028	/* timer flag clear */
     88   1.2  macallan #define JZ_TC_TMR	0x10002030	/* timer flag mask */
     89   1.2  macallan #define JZ_TC_TMSR	0x10002034	/* timer flag mask set */
     90   1.2  macallan #define JZ_TC_TMCR	0x10002038	/* timer flag mask clear*/
     91   1.2  macallan 
     92   1.2  macallan #define JZ_TC_TDFR(n)	(0x10002040 + (n * 0x10))	/* FULL compare */
     93   1.2  macallan #define JZ_TC_TDHR(n)	(0x10002044 + (n * 0x10))	/* HALF compare */
     94   1.2  macallan #define JZ_TC_TCNT(n)	(0x10002048 + (n * 0x10))	/* count */
     95   1.2  macallan 
     96   1.2  macallan #define JZ_TC_TCSR(n)	(0x1000204c + (n * 0x10))
     97   1.2  macallan /* same bits as in JZ_WDOG_TCSR	*/
     98   1.1  macallan 
     99   1.1  macallan /* operating system timer */
    100   1.1  macallan #define JZ_OST_DATA	0x100020e0	/* compare */
    101   1.1  macallan #define JZ_OST_CNT_LO	0x100020e4
    102   1.1  macallan #define JZ_OST_CNT_HI	0x100020e8
    103   1.1  macallan #define JZ_OST_CTRL	0x100020ec
    104   1.1  macallan 	#define OSTC_PCK_EN	0x0001	/* use PCLK */
    105   1.1  macallan 	#define OSTC_RTC_EN	0x0002	/* use RTCCLK */
    106   1.1  macallan 	#define OSTC_EXT_EN	0x0004	/* use EXTCLK */
    107   1.1  macallan 	#define OSTC_PRESCALE_M	0x0038
    108   1.1  macallan 	#define OSTC_DIV_1	0x0000
    109   1.1  macallan 	#define OSTC_DIV_4	0x0008
    110   1.1  macallan 	#define OSTC_DIV_16	0x0010
    111   1.1  macallan 	#define OSTC_DIV_64	0x0018
    112   1.1  macallan 	#define OSTC_DIV_256	0x0020
    113   1.1  macallan 	#define OSTC_DIV_1024	0x0028
    114   1.1  macallan 	#define OSTC_SHUTDOWN	0x0200
    115   1.1  macallan 	#define OSTC_MODE	0x8000	/* 0 - reset to 0 when = OST_DATA */
    116   1.1  macallan #define JZ_OST_CNT_U32	0x100020fc	/* copy of CNT_HI when reading CNT_LO */
    117   1.1  macallan 
    118   1.1  macallan static inline void
    119   1.1  macallan writereg(uint32_t reg, uint32_t val)
    120   1.1  macallan {
    121  1.21  macallan 	*(volatile int32_t *)MIPS_PHYS_TO_KSEG1(reg) = val;
    122   1.1  macallan 	wbflush();
    123   1.1  macallan }
    124   1.1  macallan 
    125   1.1  macallan static inline uint32_t
    126   1.1  macallan readreg(uint32_t reg)
    127   1.1  macallan {
    128   1.1  macallan 	wbflush();
    129  1.21  macallan 	return *(volatile int32_t *)MIPS_PHYS_TO_KSEG1(reg);
    130   1.1  macallan }
    131   1.1  macallan 
    132   1.2  macallan /* extra CP0 registers */
    133   1.2  macallan static inline uint32_t
    134   1.2  macallan MFC0(uint32_t r, uint32_t s)
    135   1.2  macallan {
    136   1.2  macallan 	uint32_t ret = 0x12345678;
    137   1.2  macallan 
    138   1.2  macallan 	__asm volatile("mfc0 %0, $%1, %2; nop;" : "=r"(ret) : "i"(r), "i"(s));
    139   1.2  macallan 	return ret;
    140   1.2  macallan }
    141   1.2  macallan 
    142   1.2  macallan #define MTC0(v, r, s) __asm volatile("mtc0 %0, $%1, %2; nop;" :: "r"(v), "i"(r), "i"(s))
    143   1.2  macallan 
    144   1.2  macallan #define CP0_CORE_CTRL	12	/* select 2 */
    145   1.2  macallan 	#define CC_SW_RST0	1	/* reset core 0 */
    146   1.2  macallan 	#define CC_SW_RST1	2	/* reset core 1 */
    147  1.20  macallan 	#define CC_RPC0		0x100	/* dedicated reset entry core 0 */
    148   1.2  macallan 	#define CC_RPC1		0x200	/* -- || -- core 1 */
    149   1.2  macallan 	#define CC_SLEEP0M	0x10000	/* mask sleep core 0 */
    150   1.2  macallan 	#define CC_SLEEP1M	0x20000	/* mask sleep core 1 */
    151   1.2  macallan 
    152   1.2  macallan /* cores status, 12 select 3 */
    153   1.2  macallan #define CS_MIRQ0_P	0x00001	/* mailbox IRQ for 0 pending */
    154   1.2  macallan #define CS_MIRQ1_P	0x00002	/* || core 1 */
    155   1.2  macallan #define CS_IRQ0_P	0x00100	/* peripheral IRQ for core 0 */
    156   1.2  macallan #define CS_IRQ1_P	0x00200	/* || core 1 */
    157   1.2  macallan #define CS_SLEEP0	0x10000	/* core 0 sleeping */
    158   1.2  macallan #define CS_SLEEP1	0x20000	/* core 1 sleeping */
    159   1.2  macallan 
    160   1.2  macallan /* cores reset entry & IRQ masks - 12 select 4 */
    161   1.2  macallan #define REIM_MIRQ0_M	0x00001	/* allow mailbox IRQ for core 0 */
    162   1.2  macallan #define REIM_MIRQ1_M	0x00002	/* allow mailbox IRQ for core 1 */
    163   1.2  macallan #define REIM_IRQ0_M	0x00100	/* allow peripheral IRQ for core 0 */
    164   1.2  macallan #define REIM_IRQ1_M	0x00200	/* allow peripheral IRQ for core 1 */
    165  1.23  macallan #define REIM_ENTRY_M	0xfffff000	/* reset exception entry if RPCn=1 */
    166   1.2  macallan 
    167   1.2  macallan #define CP0_CORE_MBOX	20	/* select 0 for core 0, 1 for 1 */
    168   1.2  macallan 
    169  1.23  macallan #define CP0_CORE0_MBOX	_(20), 0
    170  1.24     skrll #define CP0_CORE1_MBOX	_(20), 1
    171  1.23  macallan 
    172  1.23  macallan 
    173  1.23  macallan 
    174   1.3  macallan /* power management */
    175  1.12  macallan #define JZ_CPCCR	0x10000000	/* Clock Control Register */
    176  1.12  macallan 	#define JZ_PDIV_M	0x000f0000	/* PCLK divider mask */
    177  1.12  macallan 	#define JZ_PDIV_S	16		/* PCLK divider shift */
    178  1.17  macallan 	#define JZ_CDIV_M	0x0000000f	/* CPU clock divider mask */
    179  1.17  macallan 	#define JZ_CDIV_S	0		/* CPU clock divider shift */
    180  1.23  macallan #define JZ_LPCR		0x10000004	/* Low Power Control Register */
    181  1.23  macallan 	#define JZ_PD_SCPU	0x80000000	/* power down 2nd CPU */
    182  1.23  macallan 	#define JZ_SCPUS	0x08000000	/* CPU is powered down */
    183  1.23  macallan #define JZ_CPMPCR	0x10000014	/* MPLL */
    184  1.12  macallan 	#define JZ_PLLM_S	19		/* PLL multiplier shift */
    185  1.12  macallan 	#define JZ_PLLM_M	0xfff80000	/* PLL multiplier mask */
    186  1.12  macallan 	#define JZ_PLLN_S	13		/* PLL divider shift */
    187  1.12  macallan 	#define JZ_PLLN_M	0x0007e000	/* PLL divider mask */
    188  1.12  macallan 	#define JZ_PLLP_S	9		/* PLL postdivider shift */
    189  1.12  macallan 	#define JZ_PLLP_M	0x00001700	/* PLL postdivider mask */
    190  1.12  macallan 	#define JZ_PLLON	0x00000010	/* PLL is on and stable */
    191  1.12  macallan 	#define JZ_PLLBP	0x00000002	/* PLL bypass */
    192  1.12  macallan 	#define JZ_PLLEN	0x00000001	/* PLL enable */
    193  1.23  macallan #define JZ_CPVPCR	0x1000001c	/* VPLL */
    194   1.3  macallan #define JZ_CLKGR0	0x10000020	/* CLocK Gating Registers */
    195  1.15  macallan 	#define CLK_NEMC	(1 << 0)
    196  1.15  macallan 	#define CLK_BCH		(1 << 1)
    197  1.14  macallan 	#define CLK_OTG0	(1 << 2)
    198  1.15  macallan 	#define CLK_MSC0	(1 << 3)
    199  1.15  macallan 	#define CLK_SSI0	(1 << 4)
    200  1.14  macallan 	#define CLK_SMB0	(1 << 5)
    201  1.14  macallan 	#define CLK_SMB1	(1 << 6)
    202  1.15  macallan 	#define CLK_SCC		(1 << 7)
    203  1.15  macallan 	#define CLK_AIC		(1 << 8)
    204  1.15  macallan 	#define CLK_TSSI0	(1 << 9)
    205  1.15  macallan 	#define CLK_OWI		(1 << 10)
    206  1.15  macallan 	#define CLK_MSC1	(1 << 11)
    207  1.15  macallan 	#define CLK_MSC2	(1 << 12)
    208  1.15  macallan 	#define CLK_KBC		(1 << 13)
    209  1.15  macallan 	#define CLK_SADC	(1 << 14)
    210  1.15  macallan 	#define CLK_UART0	(1 << 15)
    211  1.15  macallan 	#define CLK_UART1	(1 << 16)
    212  1.15  macallan 	#define CLK_UART2	(1 << 17)
    213  1.15  macallan 	#define CLK_UART3	(1 << 18)
    214  1.15  macallan 	#define CLK_SSI1	(1 << 19)
    215  1.15  macallan 	#define CLK_SSI2	(1 << 20)
    216  1.15  macallan 	#define CLK_PDMA	(1 << 21)
    217  1.15  macallan 	#define CLK_GPS		(1 << 22)
    218  1.15  macallan 	#define CLK_MAC		(1 << 23)
    219  1.14  macallan 	#define CLK_UHC		(1 << 24)
    220  1.14  macallan 	#define CLK_SMB2	(1 << 25)
    221  1.15  macallan 	#define CLK_CIM		(1 << 26)
    222  1.15  macallan 	#define CLK_TVE		(1 << 27)
    223  1.14  macallan 	#define CLK_LCD		(1 << 28)
    224  1.15  macallan 	#define CLK_IPU		(1 << 29)
    225  1.15  macallan 	#define CLK_DDR0	(1 << 30)
    226  1.15  macallan 	#define CLK_DDR1	(1 << 31)
    227  1.15  macallan 
    228   1.3  macallan #define JZ_OPCR		0x10000024	/* Oscillator Power Control Reg. */
    229   1.5  macallan 	#define OPCR_IDLE_DIS	0x80000000	/* don't stop CPU clk on idle */
    230   1.5  macallan 	#define OPCR_GPU_CLK_ST	0x40000000	/* stop GPU clock */
    231   1.5  macallan 	#define OPCR_L2CM_M	0x0c000000
    232   1.5  macallan 	#define OPCR_L2CM_ON	0x00000000	/* L2 stays on in sleep */
    233   1.5  macallan 	#define OPCR_L2CM_RET	0x04000000	/* L2 retention mode in sleep */
    234   1.5  macallan 	#define OPCR_L2CM_OFF	0x08000000	/* L2 powers down in sleep */
    235  1.21  macallan 	#define OPCR_SPENDN0	0x00000080	/* 0 - OTG port forced down */
    236  1.21  macallan 	#define OPCR_SPENDN1	0x00000040	/* 0 - UHC port forced down */
    237   1.5  macallan 	#define OPCR_BUS_MODE	0x00000020	/* 1 - bursts */
    238   1.5  macallan 	#define OPCR_O1SE	0x00000010	/* EXTCLK on in sleep */
    239   1.5  macallan 	#define OPCR_PD		0x00000008	/* P0 down in sleep */
    240   1.5  macallan 	#define OPCR_ERCS	0x00000004	/* 1 RTCCLK, 0 EXTCLK/512 */
    241   1.5  macallan 	#define OPCR_CPU_MODE	0x00000002	/* 1 access 'accelerated' */
    242   1.5  macallan 	#define OPCR_OSE	0x00000001	/* disable EXTCLK */
    243   1.3  macallan #define JZ_CLKGR1	0x10000028	/* CLocK Gating Registers */
    244  1.14  macallan 	#define CLK_SMB3	(1 << 0)
    245  1.15  macallan 	#define CLK_TSSI1	(1 << 1)
    246  1.15  macallan 	#define CLK_VPU		(1 << 2)
    247  1.15  macallan 	#define CLK_PCM		(1 << 3)
    248  1.15  macallan 	#define CLK_GPU		(1 << 4)
    249  1.15  macallan 	#define CLK_COMPRESS	(1 << 5)
    250  1.15  macallan 	#define CLK_AIC1	(1 << 6)
    251  1.15  macallan 	#define CLK_GPVLC	(1 << 7)
    252  1.14  macallan 	#define CLK_OTG1	(1 << 8)
    253  1.14  macallan 	#define CLK_HDMI	(1 << 9)
    254  1.15  macallan 	#define CLK_UART4	(1 << 10)
    255  1.14  macallan 	#define CLK_AHB_MON	(1 << 11)
    256  1.14  macallan 	#define CLK_SMB4	(1 << 12)
    257  1.15  macallan 	#define CLK_DES		(1 << 13)
    258  1.15  macallan 	#define CLK_X2D		(1 << 14)
    259  1.15  macallan 	#define CLK_P1		(1 << 15)
    260  1.14  macallan 
    261   1.3  macallan #define JZ_USBPCR	0x1000003c
    262   1.5  macallan 	#define PCR_USB_MODE		0x80000000	/* 1 - otg */
    263   1.5  macallan 	#define PCR_AVLD_REG		0x40000000
    264   1.5  macallan 	#define PCR_IDPULLUP_MASK	0x30000000
    265   1.5  macallan 	#define PCR_INCR_MASK		0x08000000
    266   1.5  macallan 	#define PCR_TCRISETUNE		0x04000000
    267   1.5  macallan 	#define PCR_COMMONONN		0x02000000
    268   1.5  macallan 	#define PCR_VBUSVLDEXT		0x01000000
    269   1.5  macallan 	#define PCR_VBUSVLDEXTSEL	0x00800000
    270   1.5  macallan 	#define PCR_POR			0x00400000
    271   1.5  macallan 	#define PCR_SIDDQ		0x00200000
    272   1.5  macallan 	#define PCR_OTG_DISABLE		0x00100000
    273   1.5  macallan 	#define PCR_COMPDISTN_M		0x000e0000
    274   1.5  macallan 	#define PCR_OTGTUNE		0x0001c000
    275   1.5  macallan 	#define PCR_SQRXTUNE		0x00003800
    276   1.5  macallan 	#define PCR_TXFSLSTUNE		0x00000780
    277   1.5  macallan 	#define PCR_TXPREEMPHTUNE	0x00000040
    278   1.5  macallan 	#define PCR_TXHSXVTUNE		0x00000030
    279   1.5  macallan 	#define PCR_TXVREFTUNE		0x0000000f
    280   1.6  macallan #define JZ_USBRDT	0x10000040	/* Reset Detect Timer Register */
    281  1.18  macallan #define JZ_USBVBFIL	0x10000044
    282   1.3  macallan #define JZ_USBPCR1	0x10000048
    283   1.3  macallan 	#define PCR_SYNOPSYS	0x10000000	/* Mentor mode otherwise */
    284   1.3  macallan 	#define PCR_REFCLK_CORE	0x0c000000
    285   1.3  macallan 	#define PCR_REFCLK_XO25	0x04000000
    286   1.3  macallan 	#define PCR_REFCLK_CO	0x00000000
    287   1.3  macallan 	#define PCR_CLK_M	0x03000000	/* clock */
    288   1.3  macallan 	#define PCR_CLK_192	0x03000000	/* 19.2MHz */
    289   1.3  macallan 	#define PCR_CLK_48	0x02000000	/* 48MHz */
    290   1.3  macallan 	#define PCR_CLK_24	0x01000000	/* 24MHz */
    291   1.3  macallan 	#define PCR_CLK_12	0x00000000	/* 12MHz */
    292  1.24     skrll 	#define PCR_DMPD1	0x00800000	/* pull down D- on port 1 */
    293   1.3  macallan 	#define PCR_DPPD1	0x00400000	/* pull down D+ on port 1 */
    294   1.3  macallan 	#define PCR_PORT0_RST	0x00200000	/* port 0 reset */
    295   1.3  macallan 	#define PCR_PORT1_RST	0x00100000	/* port 1 reset */
    296   1.3  macallan 	#define PCR_WORD_I_F0	0x00080000	/* 1: 16bit/30M, 8/60 otherw. */
    297   1.3  macallan 	#define PCR_WORD_I_F1	0x00040000	/* same for port 1 */
    298   1.3  macallan 	#define PCR_COMPDISTUNE	0x00038000	/* disconnect threshold */
    299   1.3  macallan 	#define PCR_SQRXTUNE1	0x00007000	/* squelch threshold */
    300   1.3  macallan 	#define PCR_TXFSLSTUNE1	0x00000f00	/* FS/LS impedance adj. */
    301   1.3  macallan 	#define PCR_TXPREEMPH	0x00000080	/* HS transm. pre-emphasis */
    302   1.3  macallan 	#define PCR_TXHSXVTUNE1	0x00000060	/* dp/dm voltage adj. */
    303   1.3  macallan 	#define PCR_TXVREFTUNE1	0x00000017	/* HS DC voltage adj. */
    304   1.8  macallan 	#define PCR_TXRISETUNE1	0x00000001	/* rise/fall wave adj. */
    305   1.6  macallan 
    306   1.6  macallan #define JZ_UHCCDR	0x1000006c	/* UHC Clock Divider Register */
    307  1.17  macallan 	#define UHCCDR_SCLK_A	0x00000000
    308  1.17  macallan 	#define UHCCDR_MPLL	0x40000000
    309  1.17  macallan 	#define UHCCDR_EPLL	0x80000000
    310  1.17  macallan 	#define UHCCDR_OTG_PHY	0xc0000000
    311  1.17  macallan 	#define UHCCDR_CE	0x20000000
    312  1.17  macallan 	#define UHCCDR_BUSY	0x10000000
    313  1.17  macallan 	#define UHCCDR_STOP	0x08000000
    314  1.17  macallan 	#define UHCCDR_DIV_M	0x000000ff
    315   1.3  macallan #define JZ_SPCR0	0x100000b8	/* SRAM Power Control Registers */
    316   1.3  macallan #define JZ_SPCR1	0x100000bc
    317   1.3  macallan #define JZ_SRBC		0x100000c4	/* Soft Reset & Bus Control */
    318   1.3  macallan 
    319  1.18  macallan /* clock divider registers */
    320  1.18  macallan #define JZ_MSC0CDR	0x10000068
    321  1.18  macallan 	#define MSCCDR_SCLK_A	0x40000000
    322  1.18  macallan 	#define MSCCDR_MPLL	0x80000000
    323  1.18  macallan 	#define MSCCDR_CE	0x20000000
    324  1.18  macallan 	#define MSCCDR_BUSY	0x10000000
    325  1.18  macallan 	#define MSCCDR_STOP	0x08000000
    326  1.18  macallan 	#define MSCCDR_PHASE	0x00008000	/* 0 - 90deg phase, 1 - 180 */
    327  1.18  macallan 	#define MSCCDR_DIV_M	0x000000ff	/* src / ((div + 1) * 2) */
    328  1.18  macallan 	#define UHCCDR_DIV_M	0x000000ff
    329  1.18  macallan #define JZ_MSC1CDR	0x100000a4
    330  1.18  macallan #define JZ_MSC2CDR	0x100000a8
    331  1.18  macallan 
    332  1.21  macallan /*
    333  1.21  macallan  * random number generator
    334  1.21  macallan  *
    335  1.21  macallan  * Its function currently isn't documented by Ingenic.
    336  1.21  macallan  * However, testing suggests that it works as expected.
    337  1.21  macallan  */
    338  1.21  macallan #define JZ_ERNG	0x100000d8
    339  1.21  macallan #define JZ_RNG	0x100000dc
    340  1.21  macallan 
    341   1.2  macallan /* interrupt controller */
    342   1.2  macallan #define JZ_ICSR0	0x10001000	/* raw IRQ line status */
    343   1.2  macallan #define JZ_ICMR0	0x10001004	/* IRQ mask, 1 masks IRQ */
    344   1.2  macallan #define JZ_ICMSR0	0x10001008	/* sets bits in mask register */
    345   1.9  macallan #define JZ_ICMCR0	0x1000100c	/* clears bits in mask register */
    346   1.2  macallan #define JZ_ICPR0	0x10001010	/* line status after masking */
    347   1.2  macallan 
    348   1.2  macallan #define JZ_ICSR1	0x10001020	/* raw IRQ line status */
    349   1.2  macallan #define JZ_ICMR1	0x10001024	/* IRQ mask, 1 masks IRQ */
    350   1.2  macallan #define JZ_ICMSR1	0x10001028	/* sets bits in mask register */
    351   1.2  macallan #define JZ_ICMCR1	0x1000102c	/* clears bits in maks register */
    352   1.2  macallan #define JZ_ICPR1	0x10001030	/* line status after masking */
    353   1.2  macallan 
    354   1.2  macallan #define JZ_DSR0		0x10001034	/* source for PDMA */
    355   1.2  macallan #define JZ_DMR0		0x10001038	/* mask for PDMA */
    356   1.2  macallan #define JZ_DPR0		0x1000103c	/* pending for PDMA */
    357   1.2  macallan 
    358   1.2  macallan #define JZ_DSR1		0x10001040	/* source for PDMA */
    359   1.2  macallan #define JZ_DMR1		0x10001044	/* mask for PDMA */
    360   1.2  macallan #define JZ_DPR1		0x10001048	/* pending for PDMA */
    361   1.2  macallan 
    362   1.7  macallan /* memory controller */
    363   1.7  macallan #define JZ_DMMAP0	0x13010024
    364   1.7  macallan #define JZ_DMMAP1	0x13010028
    365   1.7  macallan 	#define	DMMAP_BASE	0x0000ff00	/* base PADDR of memory chunk */
    366   1.7  macallan 	#define DMMAP_MASK	0x000000ff	/* mask which bits of PADDR are
    367   1.7  macallan 						 * constant */
    368   1.8  macallan /* USB controllers */
    369   1.8  macallan #define JZ_EHCI_BASE	0x13490000
    370   1.8  macallan #define JZ_OHCI_BASE	0x134a0000
    371   1.8  macallan #define JZ_DWC2_BASE	0x13500000
    372   1.8  macallan 
    373   1.8  macallan /* Ethernet */
    374   1.8  macallan #define JZ_DME_BASE	0x16000000
    375   1.9  macallan #define JZ_DME_IO	0
    376   1.9  macallan #define JZ_DME_DATA	2
    377   1.7  macallan 
    378   1.9  macallan /* GPIO */
    379   1.9  macallan #define JZ_GPIO_A_BASE	0x10010000
    380   1.9  macallan #define JZ_GPIO_B_BASE	0x10010100
    381   1.9  macallan #define JZ_GPIO_C_BASE	0x10010200
    382   1.9  macallan #define JZ_GPIO_D_BASE	0x10010300
    383   1.9  macallan #define JZ_GPIO_E_BASE	0x10010400
    384   1.9  macallan #define JZ_GPIO_F_BASE	0x10010500
    385   1.9  macallan 
    386   1.9  macallan /* GPIO registers per port */
    387   1.9  macallan #define JZ_GPIO_PIN	0x00000000	/* pin level register */
    388   1.9  macallan /* 0 - normal gpio, 1 - interrupt */
    389   1.9  macallan #define JZ_GPIO_INT	0x00000010	/* interrupt register */
    390   1.9  macallan #define JZ_GPIO_INTS	0x00000014	/* interrupt set register */
    391   1.9  macallan #define JZ_GPIO_INTC	0x00000018	/* interrupt clear register */
    392   1.9  macallan /*
    393   1.9  macallan  * INT == 1: 1 disables interrupt
    394   1.9  macallan  * INT == 0: device select, see below
    395   1.9  macallan  */
    396   1.9  macallan #define JZ_GPIO_MASK	0x00000020	/* port mask register */
    397   1.9  macallan #define JZ_GPIO_MASKS	0x00000024	/* port mask set register */
    398   1.9  macallan #define JZ_GPIO_MASKC	0x00000028	/* port mask clear register */
    399   1.9  macallan /*
    400   1.9  macallan  * INT == 1: 0 - level triggered, 1 - edge triggered
    401   1.9  macallan  * INT == 0: 0 - device select, see below
    402  1.24     skrll  */
    403   1.9  macallan #define JZ_GPIO_PAT1	0x00000030	/* pattern 1 register */
    404   1.9  macallan #define JZ_GPIO_PAT1S	0x00000034	/* pattern 1 set register */
    405   1.9  macallan #define JZ_GPIO_PAT1C	0x00000038	/* pattern 1 clear register */
    406   1.9  macallan /*
    407   1.9  macallan  * INT == 1:
    408   1.9  macallan  *   PAT1 == 0: 0 - trigger on low, 1 - trigger on high
    409   1.9  macallan  *   PAT1 == 1: 0 - trigger on falling edge, 1 - trigger on rising edge
    410   1.9  macallan  * INT == 0:
    411   1.9  macallan  *   MASK == 0:
    412   1.9  macallan  *     PAT1 == 0: 0 - device 0, 1 - device 1
    413   1.9  macallan  *     PAT1 == 1: 0 - device 2, 1 - device 3
    414   1.9  macallan  *   MASK == 1:
    415   1.9  macallan  *     PAT1 == 0: set gpio output
    416   1.9  macallan  *     PAT1 == 1: pin is input
    417   1.9  macallan  */
    418   1.9  macallan #define JZ_GPIO_PAT0	0x00000040	/* pattern 0 register */
    419   1.9  macallan #define JZ_GPIO_PAT0S	0x00000044	/* pattern 0 set register */
    420   1.9  macallan #define JZ_GPIO_PAT0C	0x00000048	/* pattern 0 clear register */
    421   1.9  macallan /* 1 - interrupt happened */
    422   1.9  macallan #define JZ_GPIO_FLAG	0x00000050	/* flag register */
    423   1.9  macallan #define JZ_GPIO_FLAGC	0x00000058	/* flag clear register */
    424   1.9  macallan /* 1 - disable pull up/down resistors */
    425   1.9  macallan #define JZ_GPIO_DPULL	0x00000070	/* pull disable register */
    426   1.9  macallan #define JZ_GPIO_DPULLS	0x00000074	/* pull disable set register */
    427   1.9  macallan #define JZ_GPIO_DPULLC	0x00000078	/* pull disable clear register */
    428   1.9  macallan /* the following are uncommented in the manual */
    429   1.9  macallan #define JZ_GPIO_DRVL	0x00000080	/* drive low register */
    430   1.9  macallan #define JZ_GPIO_DRVLS	0x00000084	/* drive low set register */
    431   1.9  macallan #define JZ_GPIO_DRVLC	0x00000088	/* drive low clear register */
    432   1.9  macallan #define JZ_GPIO_DIR	0x00000090	/* direction register */
    433   1.9  macallan #define JZ_GPIO_DIRS	0x00000094	/* direction register */
    434   1.9  macallan #define JZ_GPIO_DIRC	0x00000098	/* direction register */
    435   1.9  macallan #define JZ_GPIO_DRVH	0x000000a0	/* drive high register */
    436   1.9  macallan #define JZ_GPIO_DRVHS	0x000000a4	/* drive high set register */
    437   1.9  macallan #define JZ_GPIO_DRVHC	0x000000a8	/* drive high clear register */
    438   1.9  macallan 
    439   1.9  macallan static inline void
    440   1.9  macallan gpio_as_output(uint32_t g, int pin)
    441   1.9  macallan {
    442   1.9  macallan 	uint32_t mask = 1 << pin;
    443   1.9  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    444   1.9  macallan 
    445   1.9  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* use as gpio */
    446   1.9  macallan 	writereg(reg + JZ_GPIO_MASKS, mask);
    447   1.9  macallan 	writereg(reg + JZ_GPIO_PAT1C, mask);	/* make output */
    448   1.9  macallan }
    449   1.9  macallan 
    450   1.9  macallan static inline void
    451   1.9  macallan gpio_set(uint32_t g, int pin, int level)
    452   1.9  macallan {
    453   1.9  macallan 	uint32_t mask = 1 << pin;
    454   1.9  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    455   1.9  macallan 
    456   1.9  macallan 	reg += (level == 0) ? JZ_GPIO_PAT0C : JZ_GPIO_PAT0S;
    457   1.9  macallan 	writereg(reg, mask);
    458   1.9  macallan }
    459   1.9  macallan 
    460   1.9  macallan static inline void
    461   1.9  macallan gpio_as_dev0(uint32_t g, int pin)
    462   1.9  macallan {
    463   1.9  macallan 	uint32_t mask = 1 << pin;
    464   1.9  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    465   1.9  macallan 
    466   1.9  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* use as gpio */
    467   1.9  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* device mode */
    468   1.9  macallan 	writereg(reg + JZ_GPIO_PAT1C, mask);	/* select 0 */
    469   1.9  macallan 	writereg(reg + JZ_GPIO_PAT0C, mask);
    470   1.9  macallan }
    471  1.24     skrll 
    472   1.9  macallan static inline void
    473  1.12  macallan gpio_as_dev1(uint32_t g, int pin)
    474  1.12  macallan {
    475  1.12  macallan 	uint32_t mask = 1 << pin;
    476  1.12  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    477  1.12  macallan 
    478  1.12  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* use as gpio */
    479  1.12  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* device mode */
    480  1.12  macallan 	writereg(reg + JZ_GPIO_PAT1C, mask);	/* select 1 */
    481  1.12  macallan 	writereg(reg + JZ_GPIO_PAT0S, mask);
    482  1.12  macallan }
    483  1.24     skrll 
    484  1.12  macallan static inline void
    485  1.12  macallan gpio_as_dev2(uint32_t g, int pin)
    486  1.12  macallan {
    487  1.12  macallan 	uint32_t mask = 1 << pin;
    488  1.12  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    489  1.12  macallan 
    490  1.12  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* use as gpio */
    491  1.12  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* device mode */
    492  1.12  macallan 	writereg(reg + JZ_GPIO_PAT1S, mask);	/* select 2 */
    493  1.12  macallan 	writereg(reg + JZ_GPIO_PAT0C, mask);
    494  1.12  macallan }
    495  1.24     skrll 
    496  1.12  macallan static inline void
    497  1.12  macallan gpio_as_dev3(uint32_t g, int pin)
    498  1.12  macallan {
    499  1.12  macallan 	uint32_t mask = 1 << pin;
    500  1.12  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    501  1.12  macallan 
    502  1.12  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* use as gpio */
    503  1.12  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* device mode */
    504  1.12  macallan 	writereg(reg + JZ_GPIO_PAT1S, mask);	/* select 3 */
    505  1.12  macallan 	writereg(reg + JZ_GPIO_PAT0S, mask);
    506  1.12  macallan }
    507  1.24     skrll 
    508  1.12  macallan static inline void
    509   1.9  macallan gpio_as_intr_level(uint32_t g, int pin)
    510   1.9  macallan {
    511   1.9  macallan 	uint32_t mask = 1 << pin;
    512   1.9  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    513   1.9  macallan 
    514   1.9  macallan 	writereg(reg + JZ_GPIO_MASKS, mask);	/* mask it */
    515   1.9  macallan 	writereg(reg + JZ_GPIO_INTS, mask);	/* use as interrupt */
    516   1.9  macallan 	writereg(reg + JZ_GPIO_PAT1C, mask);	/* level trigger */
    517   1.9  macallan 	writereg(reg + JZ_GPIO_PAT0S, mask);	/* trigger on high */
    518   1.9  macallan 	writereg(reg + JZ_GPIO_FLAGC, mask);	/* clear it */
    519   1.9  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* enable it */
    520   1.9  macallan }
    521  1.10  macallan 
    522  1.17  macallan static inline void
    523  1.17  macallan gpio_as_intr_level_low(uint32_t g, int pin)
    524  1.17  macallan {
    525  1.17  macallan 	uint32_t mask = 1 << pin;
    526  1.17  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    527  1.17  macallan 
    528  1.17  macallan 	writereg(reg + JZ_GPIO_MASKS, mask);	/* mask it */
    529  1.17  macallan 	writereg(reg + JZ_GPIO_INTS, mask);	/* use as interrupt */
    530  1.17  macallan 	writereg(reg + JZ_GPIO_PAT1C, mask);	/* level trigger */
    531  1.17  macallan 	writereg(reg + JZ_GPIO_PAT0C, mask);	/* trigger on low */
    532  1.17  macallan 	writereg(reg + JZ_GPIO_FLAGC, mask);	/* clear it */
    533  1.17  macallan 	writereg(reg + JZ_GPIO_MASKC, mask);	/* enable it */
    534  1.17  macallan }
    535  1.17  macallan 
    536  1.17  macallan static inline void
    537  1.17  macallan gpio_as_input(uint32_t g, int pin)
    538  1.17  macallan {
    539  1.17  macallan 	uint32_t mask = 1 << pin;
    540  1.17  macallan 	uint32_t reg = JZ_GPIO_A_BASE + (g << 8);
    541  1.17  macallan 
    542  1.17  macallan 	writereg(reg + JZ_GPIO_MASKS, mask);	/* mask it */
    543  1.17  macallan 	writereg(reg + JZ_GPIO_INTC, mask);	/* not an interrupt */
    544  1.17  macallan 	writereg(reg + JZ_GPIO_PAT1S, mask);	/* use as input */
    545  1.17  macallan 	writereg(reg + JZ_GPIO_FLAGC, mask);	/* clear it just in case */
    546  1.17  macallan }
    547  1.17  macallan 
    548  1.10  macallan /* I2C / SMBus */
    549  1.10  macallan #define JZ_SMB0_BASE	0x10050000
    550  1.10  macallan #define JZ_SMB1_BASE	0x10051000
    551  1.10  macallan #define JZ_SMB2_BASE	0x10052000
    552  1.10  macallan #define JZ_SMB3_BASE	0x10053000
    553  1.10  macallan #define JZ_SMB4_BASE	0x10054000
    554  1.10  macallan 
    555  1.11  macallan /* SMBus register offsets, per port */
    556  1.11  macallan #define JZ_SMBCON	0x00 /* SMB control */
    557  1.11  macallan 	#define JZ_STPHLD	0x80 /* Stop Hold Enable bit */
    558  1.11  macallan 	#define JZ_SLVDIS	0x40 /* 1 - slave disabled */
    559  1.11  macallan 	#define JZ_REST		0x20 /* 1 - allow RESTART */
    560  1.11  macallan 	#define JZ_MATP		0x10 /* 1 - enable 10bit addr. for master */
    561  1.11  macallan 	#define JZ_SATP		0x08 /* 1 - enable 10bit addr. for slave */
    562  1.11  macallan 	#define JZ_SPD_M	0x06 /* bus speed control */
    563  1.11  macallan 	#define JZ_SPD_100KB	0x02 /* 100kBit/s mode */
    564  1.11  macallan 	#define JZ_SPD_400KB	0x04 /* 400kBit/s mode */
    565  1.11  macallan 	#define JZ_MD		0x01 /* enable master */
    566  1.11  macallan #define JZ_SMBTAR	0x04 /* SMB target address */
    567  1.11  macallan 	#define JZ_SMATP	0x1000 /* enable 10bit master addr */
    568  1.11  macallan 	#define JZ_SPECIAL	0x0800 /* 1 - special command */
    569  1.11  macallan 	#define JZ_START	0x0400 /* 1 - send START */
    570  1.11  macallan 	#define JZ_SMBTAR_M	0x03ff /* target address */
    571  1.11  macallan #define JZ_SMBSAR	0x08 /* SMB slave address */
    572  1.11  macallan #define JZ_SMBDC	0x10 /* SMB data buffer and command */
    573  1.11  macallan 	#define JZ_CMD	0x100 /* 1 - read, 0 - write */
    574  1.11  macallan 	#define JZ_DATA	0x0ff
    575  1.11  macallan #define JZ_SMBSHCNT	0x14 /* Standard speed SMB SCL high count */
    576  1.11  macallan #define JZ_SMBSLCNT	0x18 /* Standard speed SMB SCL low count */
    577  1.11  macallan #define JZ_SMBFHCNT	0x1C /* Fast speed SMB SCL high count */
    578  1.11  macallan #define JZ_SMBFLCNT	0x20 /* Fast speed SMB SCL low count */
    579  1.11  macallan #define JZ_SMBINTST	0x2C /* SMB Interrupt Status */
    580  1.11  macallan 	#define JZ_ISTT		0x400	/* START or RESTART occured */
    581  1.11  macallan 	#define JZ_ISTP		0x200	/* STOP occured */
    582  1.11  macallan 	#define JZ_TXABT	0x40	/* ABORT occured */
    583  1.11  macallan 	#define JZ_TXEMP	0x10	/* TX FIFO is low */
    584  1.11  macallan 	#define JZ_TXOF		0x08	/* TX FIFO is high */
    585  1.13  macallan 	#define JZ_RXFL		0x04	/* RX FIFO is at  JZ_SMBRXTL*/
    586  1.11  macallan 	#define JZ_RXOF		0x02	/* RX FIFO is high */
    587  1.11  macallan 	#define JZ_RXUF		0x01	/* RX FIFO underflow */
    588  1.11  macallan #define JZ_SMBINTM	0x30 /* SMB Interrupt Mask */
    589  1.11  macallan #define JZ_SMBRXTL	0x38 /* SMB RxFIFO Threshold */
    590  1.11  macallan #define JZ_SMBTXTL	0x3C /* SMB TxFIFO Threshold */
    591  1.11  macallan #define JZ_SMBCINT	0x40 /* Clear Interrupts */
    592  1.11  macallan 	#define JZ_CLEARALL	0x01
    593  1.11  macallan #define JZ_SMBCRXUF	0x44 /* Clear RXUF Interrupt */
    594  1.11  macallan #define JZ_SMBCRXOF	0x48 /* Clear RX_OVER Interrupt */
    595  1.11  macallan #define JZ_SMBCTXOF	0x4C /* Clear TX_OVER Interrupt */
    596  1.11  macallan #define JZ_SMBCRXREQ	0x50 /* Clear RDREQ Interrupt */
    597  1.11  macallan #define JZ_SMBCTXABT	0x54 /* Clear TX_ABRT Interrupt */
    598  1.11  macallan #define JZ_SMBCRXDN	0x58 /* Clear RX_DONE Interrupt */
    599  1.11  macallan #define JZ_SMBCACT	0x5c /* Clear ACTIVITY Interrupt */
    600  1.11  macallan #define JZ_SMBCSTP	0x60 /* Clear STOP Interrupt */
    601  1.11  macallan #define JZ_SMBCSTT	0x64 /* Clear START Interrupt */
    602  1.11  macallan #define JZ_SMBCGC	0x68 /* Clear GEN_CALL Interrupt */
    603  1.11  macallan #define JZ_SMBENB	0x6C /* SMB Enable */
    604  1.11  macallan 	#define JZ_ENABLE	0x01
    605  1.11  macallan #define JZ_SMBST	0x70 /* SMB Status register */
    606  1.11  macallan 	#define JZ_SLVACT	0x40 /* slave is active */
    607  1.11  macallan 	#define JZ_MSTACT	0x20 /* master is active */
    608  1.11  macallan 	#define JZ_RFF		0x10 /* RX FIFO is full */
    609  1.11  macallan 	#define JZ_RFNE		0x08 /* RX FIFO not empty */
    610  1.11  macallan 	#define JZ_TFE		0x04 /* TX FIFO is empty */
    611  1.11  macallan 	#define JZ_TFNF		0x02 /* TX FIFO is not full */
    612  1.11  macallan 	#define JZ_ACT		0x01 /* JZ_SLVACT | JZ_MSTACT */
    613  1.11  macallan #define JZ_SMBABTSRC	0x80 /* SMB Transmit Abort Status Register */
    614  1.11  macallan #define JZ_SMBDMACR	0x88 /* DMA Control Register */
    615  1.11  macallan #define JZ_SMBDMATDL	0x8c /* DMA Transmit Data Level */
    616  1.11  macallan #define JZ_SMBDMARDL	0x90 /* DMA Receive Data Level */
    617  1.11  macallan #define JZ_SMBSDASU	0x94 /* SMB SDA Setup Register */
    618  1.11  macallan #define JZ_SMBACKGC	0x98 /* SMB ACK General Call Register */
    619  1.11  macallan #define JZ_SMBENBST	0x9C /* SMB Enable Status Register */
    620  1.11  macallan #define JZ_SMBSDAHD	0xD0 /* SMB SDA HolD time Register */
    621  1.12  macallan 	#define JZ_HDENB	0x100	/* enable hold time */
    622  1.11  macallan 
    623  1.15  macallan /* SD/MMC hosts */
    624  1.15  macallan #define JZ_MSC0_BASE	0x13450000
    625  1.15  macallan #define JZ_MSC1_BASE	0x13460000
    626  1.15  macallan #define JZ_MSC2_BASE	0x13470000
    627  1.15  macallan 
    628  1.16  macallan #define JZ_MSC_CTRL	0x00
    629  1.16  macallan 	#define JZ_SEND_CCSD		0x8000
    630  1.16  macallan 	#define JZ_SEND_AS_CCSD		0x4000
    631  1.16  macallan 	#define JZ_EXIT_MULTIPLE	0x0080
    632  1.16  macallan 	#define JZ_EXIT_TRANSFER	0x0040
    633  1.16  macallan 	#define JZ_START_READWAIT	0x0020
    634  1.16  macallan 	#define JZ_STOP_READWAIT	0x0010
    635  1.16  macallan 	#define JZ_RESET		0x0008
    636  1.16  macallan 	#define JZ_START_OP		0x0004
    637  1.16  macallan 	#define JZ_CLOCK_CTRL_M		0x0003
    638  1.16  macallan 	#define JZ_CLOCK_START		0x0002
    639  1.16  macallan 	#define JZ_CLOCK_STOP		0x0001
    640  1.16  macallan #define JZ_MSC_STAT	0x04
    641  1.16  macallan 	#define JZ_AUTO_CMD12_DONE	0x80000000
    642  1.16  macallan 	#define JZ_AUTO_CMD23_DONE	0x40000000
    643  1.16  macallan 	#define JZ_SVS			0x20000000
    644  1.16  macallan 	#define JZ_PIN_LEVEL_M		0x1f000000
    645  1.16  macallan 	#define JZ_BCE			0x00100000 /* boot CRC error */
    646  1.16  macallan 	#define JZ_BDE			0x00080000 /* boot data end */
    647  1.16  macallan 	#define JZ_BAE			0x00040000 /* boot acknowledge error */
    648  1.16  macallan 	#define JZ_BAR			0x00020000 /* boot ack. received */
    649  1.16  macallan 	#define JZ_DMAEND		0x00010000
    650  1.16  macallan 	#define JZ_IS_RESETTING		0x00008000
    651  1.16  macallan 	#define JZ_SDIO_INT_ACTIVE	0x00004000
    652  1.16  macallan 	#define JZ_PRG_DONE		0x00002000
    653  1.16  macallan 	#define JZ_DATA_TRAN_DONE	0x00001000
    654  1.16  macallan 	#define JZ_END_CMD_RES		0x00000800
    655  1.16  macallan 	#define JZ_DATA_FIFO_AFULL	0x00000400
    656  1.16  macallan 	#define JZ_IS_READWAIT		0x00000200
    657  1.16  macallan 	#define JZ_CLK_EN		0x00000100
    658  1.16  macallan 	#define JZ_DATA_FIFO_FULL	0x00000080
    659  1.16  macallan 	#define JZ_DATA_FIFO_EMPTY	0x00000040
    660  1.16  macallan 	#define JZ_CRC_RES_ERR		0x00000020
    661  1.16  macallan 	#define JZ_CRC_READ_ERR		0x00000010
    662  1.16  macallan 	#define JZ_CRC_WRITE_ERR_M	0x0000000c
    663  1.16  macallan 	#define JZ_CRC_WRITE_OK		0x00000000
    664  1.16  macallan 	#define JZ_CRC_CARD_ERR		0x00000004
    665  1.16  macallan 	#define JZ_CRC_NO_STATUS	0x00000008
    666  1.16  macallan 	#define JZ_TIME_OUT_RES		0x00000002
    667  1.16  macallan 	#define JZ_TIME_OUT_READ	0x00000001
    668  1.16  macallan #define JZ_MSC_CLKRT	0x08
    669  1.16  macallan 	#define JZ_DEV_CLK	0x0
    670  1.16  macallan 	#define JZ_DEV_CLK_2	0x1	/* DEV_CLK / 2 */
    671  1.16  macallan 	#define JZ_DEV_CLK_4	0x2	/* DEV_CLK / 4 */
    672  1.16  macallan 	#define JZ_DEV_CLK_8	0x3	/* DEV_CLK / 8 */
    673  1.16  macallan 	#define JZ_DEV_CLK_16	0x4	/* DEV_CLK / 16 */
    674  1.16  macallan 	#define JZ_DEV_CLK_32	0x5	/* DEV_CLK / 32 */
    675  1.16  macallan 	#define JZ_DEV_CLK_64	0x6	/* DEV_CLK / 64 */
    676  1.16  macallan 	#define JZ_DEV_CLK_128	0x7	/* DEV_CLK / 128 */
    677  1.16  macallan #define JZ_MSC_CMDAT	0x0c
    678  1.16  macallan 	#define JZ_CCS_EXPECTED	0x80000000
    679  1.16  macallan 	#define JZ_READ_CEATA	0x40000000
    680  1.16  macallan 	#define JZ_DIS_BOOT	0x08000000
    681  1.16  macallan 	#define JZ_ENA_BOOT	0x04000000
    682  1.16  macallan 	#define JZ_EXP_BOOT_ACK	0x02000000
    683  1.16  macallan 	#define JZ_BOOT_MODE	0x01000000
    684  1.16  macallan 	#define JZ_AUTO_CMD23	0x00040000
    685  1.16  macallan 	#define JZ_SDIO_PRDT	0x00020000
    686  1.16  macallan 	#define JZ_AUTO_CMD12	0x00010000
    687  1.16  macallan 	#define JZ_RTRG_M	0x0000c000 /* receive FIFO trigger */
    688  1.16  macallan 	#define JZ_RTRG_16	0x00000000 /* >= 16 */
    689  1.16  macallan 	#define JZ_RTRG_32	0x00004000 /* >= 32 */
    690  1.16  macallan 	#define JZ_RTRG_64	0x00008000 /* >= 64 */
    691  1.16  macallan 	#define JZ_RTRG_96	0x0000c000 /* >= 96 */
    692  1.16  macallan 	#define JZ_TTRG_M	0x00003000 /* transmit FIFO trigger */
    693  1.16  macallan 	#define JZ_TTRG_16	0x00000000 /* >= 16 */
    694  1.16  macallan 	#define JZ_TTRG_32	0x00001000 /* >= 32 */
    695  1.16  macallan 	#define JZ_TTRG_64	0x00002000 /* >= 64 */
    696  1.16  macallan 	#define JZ_TTRG_96	0x00003000 /* >= 96 */
    697  1.16  macallan 	#define JZ_IO_ABORT	0x00000800
    698  1.16  macallan 	#define JZ_BUS_WIDTH_M	0x00000600
    699  1.16  macallan 	#define JZ_BUS_1BIT	0x00000000
    700  1.16  macallan 	#define JZ_BUS_4BIT	0x00000200
    701  1.16  macallan 	#define JZ_BUS_8BIT	0x00000300
    702  1.16  macallan 	#define JZ_INIT		0x00000080 /* send 80 clk init before cmd */
    703  1.16  macallan 	#define JZ_BUSY		0x00000040
    704  1.16  macallan 	#define JZ_STREAM	0x00000020
    705  1.16  macallan 	#define JZ_WRITE	0x00000010 /* read otherwise */
    706  1.16  macallan 	#define JZ_DATA_EN	0x00000008
    707  1.16  macallan 	#define JZ_RESPONSE_M	0x00000007 /* response format */
    708  1.16  macallan 	#define JZ_RES_NONE	0x00000000
    709  1.16  macallan 	#define JZ_RES_R1	0x00000001 /* R1 and R1b */
    710  1.16  macallan 	#define JZ_RES_R2	0x00000002
    711  1.16  macallan 	#define JZ_RES_R3	0x00000003
    712  1.16  macallan 	#define JZ_RES_R4	0x00000004
    713  1.16  macallan 	#define JZ_RES_R5	0x00000005
    714  1.16  macallan 	#define JZ_RES_R6	0x00000006
    715  1.16  macallan 	#define JZ_RES_R7	0x00000007
    716  1.16  macallan #define JZ_MSC_RESTO	0x10 /* 16bit response timeout in MSC_CLK */
    717  1.16  macallan #define JZ_MSC_RDTO RW	0x14 /* 32bit read timeout in MSC_CLK */
    718  1.16  macallan #define JZ_MSC_BLKLEN	0x18 /* 16bit block length */
    719  1.19  macallan #define JZ_MSC_NOB	0x1c /* 16bit block counter */
    720  1.16  macallan #define JZ_MSC_SNOB	0x20 /* 16bit successful block counter */
    721  1.16  macallan #define JZ_MSC_IMASK	0x24 /* interrupt mask */
    722  1.16  macallan 	#define JZ_INT_AUTO_CMD23_DONE	0x40000000
    723  1.16  macallan 	#define JZ_INT_SVS		0x20000000
    724  1.16  macallan 	#define JZ_INT_PIN_LEVEL_M	0x1f000000
    725  1.16  macallan 	#define JZ_INT_BCE		0x00100000
    726  1.16  macallan 	#define JZ_INT_BDE		0x00080000
    727  1.16  macallan 	#define JZ_INT_BAE		0x00040000
    728  1.16  macallan 	#define JZ_INT_BAR		0x00020000
    729  1.16  macallan 	#define JZ_INT_DMAEND		0x00010000
    730  1.16  macallan 	#define JZ_INT_AUTO_CMD12_DONE	0x00008000
    731  1.16  macallan 	#define JZ_INT_DATA_FIFO_FULL	0x00004000
    732  1.16  macallan 	#define JZ_INT_DATA_FIFO_EMPTY	0x00002000
    733  1.16  macallan 	#define JZ_INT_CRC_RES_ERR	0x00001000
    734  1.16  macallan 	#define JZ_INT_CRC_READ_ERR	0x00000800
    735  1.16  macallan 	#define JZ_INT_CRC_WRITE_ERR	0x00000400
    736  1.16  macallan 	#define JZ_INT_TIMEOUT_RES	0x00000200
    737  1.16  macallan 	#define JZ_INT_TIMEOUT_READ	0x00000100
    738  1.16  macallan 	#define JZ_INT_SDIO		0x00000080
    739  1.16  macallan 	#define JZ_INT_TXFIFO_WR_REQ	0x00000040
    740  1.16  macallan 	#define JZ_INT_RXFIFO_RD_REQ	0x00000020
    741  1.16  macallan 	#define JZ_INT_EMD_CMD_RES	0x00000004
    742  1.16  macallan 	#define JZ_INT_PRG_DONE		0x00000002
    743  1.16  macallan 	#define JZ_INT_DATA_TRAN_DONE	0x00000001
    744  1.16  macallan #define JZ_MSC_IFLG	0x28 /* interrupt flags */
    745  1.16  macallan #define JZ_MSC_CMD	0x2c /* 6bit CMD index */
    746  1.16  macallan #define JZ_MSC_ARG	0x30 /* 32bit argument */
    747  1.16  macallan #define JZ_MSC_RES	0x34 /* 8x16bit response data FIFO */
    748  1.16  macallan #define JZ_MSC_RXFIFO	0x38
    749  1.16  macallan #define JZ_MSC_TXFIFO	0x3c
    750  1.16  macallan #define JZ_MSC_LPM	0x40
    751  1.16  macallan 	#define JZ_DRV_SEL_M	0xc0000000
    752  1.16  macallan 	#define JZ_FALLING_EDGE	0x00000000
    753  1.16  macallan 	#define JZ_RISING_1NS	0x40000000 /* 1ns delay */
    754  1.16  macallan 	#define JZ_RISING_4	0x80000000 /* 1/4 MSC_CLK delay */
    755  1.16  macallan 	#define JZ_SMP_SEL	0x20000000 /* 1 - rising edge */
    756  1.16  macallan 	#define JZ_LPM		0x00000001 /* low power mode */
    757  1.16  macallan #define JZ_MSC_DMAC	0x44
    758  1.16  macallan 	#define JZ_MODE_SEL	0x80 /* 1 - specify transfer length */
    759  1.16  macallan 	#define JZ_AOFST_M	0x60 /* address offset in bytes */
    760  1.16  macallan 	#define JZ_ALIGNEN	0x10 /* allow non-32bit-aligned transfers */
    761  1.16  macallan 	#define JZ_INCR_M	0x0c /* burst type */
    762  1.16  macallan 	#define JZ_INCR_16	0x00
    763  1.16  macallan 	#define JZ_INCR_32	0x04
    764  1.16  macallan 	#define JZ_INCR_64	0x08
    765  1.16  macallan 	#define JZ_DMASEL	0x02 /* 1 - SoC DMAC, 0 - MSC built-in */
    766  1.16  macallan 	#define JZ_DMAEN	0x01 /* enable DMA */
    767  1.16  macallan #define JZ_MSC_DMANDA	0x48 /* next descriptor paddr */
    768  1.16  macallan #define JZ_MSC_DMADA	0x4c /* current descriptor */
    769  1.16  macallan #define JZ_MSC_DMALEN	0x50 /* transfer tength */
    770  1.16  macallan #define JZ_MSC_DMACMD	0x54
    771  1.16  macallan 	#define JZ_DMA_IDI_M	0xff000000
    772  1.16  macallan 	#define JZ_DMA_ID_M	0x00ff0000
    773  1.16  macallan 	#define JZ_DMA_AOFST_M	0x00000600
    774  1.16  macallan 	#define JZ_DMA_ALIGN	0x00000100
    775  1.16  macallan 	#define JZ_DMA_ENDI	0x00000002
    776  1.16  macallan 	#define JZ_DMA_LINK	0x00000001
    777  1.16  macallan #define JZ_MSC_CTRL2	0x58
    778  1.16  macallan 	#define JZ_PIP		0x1f000000	/* 1 - intr trigger on high */
    779  1.16  macallan 	#define JZ_RST_EN	0x00800000
    780  1.16  macallan 	#define JZ_STPRM	0x00000010
    781  1.16  macallan 	#define JZ_SVC		0x00000008
    782  1.16  macallan 	#define JZ_SMS_M	0x00000007
    783  1.16  macallan 	#define JZ_SMS_DEF	0x00000000	/* default speed */
    784  1.16  macallan 	#define JZ_SMS_HIGH	0x00000001	/* high speed */
    785  1.16  macallan 	#define JZ_SMS_SDR12	0x00000002
    786  1.16  macallan 	#define JZ_SMS_SDR25	0x00000003
    787  1.16  macallan 	#define JZ_SMS_SDR50	0x00000004
    788  1.16  macallan #define JZ_MSC_RTCNT	0x5c /* RT FIFO count */
    789  1.16  macallan 
    790  1.22  macallan /* EFUSE Slave Interface */
    791  1.22  macallan #define JZ_EFUSE	0x134100D0
    792  1.22  macallan #define JZ_EFUCTRL	0x00
    793  1.22  macallan 	#define JZ_EFUSE_BANK	0x40000000	/* select upper 4KBit */
    794  1.22  macallan 	#define JZ_EFUSE_ADDR_M	0x3fe00000	/* in bytes */
    795  1.22  macallan 	#define JZ_EFUSE_ADDR_SHIFT	21
    796  1.22  macallan 	#define JZ_EFUSE_SIZE_M	0x001f0000	/* in bytes */
    797  1.22  macallan 	#define JZ_EFUSE_SIZE_SHIFT	16
    798  1.22  macallan 	#define JZ_EFUSE_PROG	0x00008000	/* enable programming */
    799  1.22  macallan 	#define JZ_EFUSE_WRITE	0x00000002	/* write enable */
    800  1.22  macallan 	#define JZ_EFUSE_READ	0x00000001	/* read enable */
    801  1.22  macallan #define JZ_EFUCFG	0x04
    802  1.22  macallan 	#define JZ_EFUSE_INT_E		0x80000000	/* which IRQ? */
    803  1.22  macallan 	#define JZ_EFUSE_RD_ADJ_M	0x00f00000
    804  1.22  macallan 	#define JZ_EFUSE_RD_STROBE	0x000f0000
    805  1.22  macallan 	#define JZ_EFUSE_WR_ADJUST	0x0000f000
    806  1.22  macallan 	#define JZ_EFUSE_WR_STROBE	0x00000fff
    807  1.22  macallan #define JZ_EFUSTATE	0x08
    808  1.22  macallan 	#define JZ_EFUSE_GLOBAL_P	0x00008000	/* wr protect bits */
    809  1.22  macallan 	#define JZ_EFUSE_CHIPID_P	0x00004000
    810  1.22  macallan 	#define JZ_EFUSE_CUSTID_P	0x00002000
    811  1.22  macallan 	#define JZ_EFUSE_SECWR_EN	0x00001000
    812  1.22  macallan 	#define JZ_EFUSE_PC_P		0x00000800
    813  1.22  macallan 	#define JZ_EFUSE_HDMIKEY_P	0x00000400
    814  1.22  macallan 	#define JZ_EFUSE_SECKEY_P	0x00000200
    815  1.22  macallan 	#define JZ_EFUSE_SECBOOT_EN	0x00000100
    816  1.22  macallan 	#define JZ_EFUSE_HDMI_BUSY	0x00000004
    817  1.22  macallan 	#define JZ_EFUSE_WR_DONE	0x00000002
    818  1.22  macallan 	#define JZ_EFUSE_RD_DONE	0x00000001
    819  1.22  macallan #define JZ_EFUDATA0	0x0C
    820  1.22  macallan #define JZ_EFUDATA1	0x10
    821  1.22  macallan #define JZ_EFUDATA2	0x14
    822  1.22  macallan #define JZ_EFUDATA3	0x18
    823  1.22  macallan #define JZ_EFUDATA4	0x1C
    824  1.22  macallan #define JZ_EFUDATA5	0x20
    825  1.22  macallan #define JZ_EFUDATA6	0x24
    826  1.22  macallan #define JZ_EFUDATA7	0x28
    827  1.22  macallan 
    828   1.2  macallan #endif /* INGENIC_REGS_H */
    829