@ -49,6 +49,8 @@ typedef volatile unsigned int * dv_reg_p;
* on other DaVinci chips . Double check them before you try
* using the addresses . . . or PSC module identifiers , etc .
*/
# ifndef CONFIG_SOC_DA8XX
# define DAVINCI_DMA_3PCC_BASE (0x01c00000)
# define DAVINCI_DMA_3PTC0_BASE (0x01c10000)
# define DAVINCI_DMA_3PTC1_BASE (0x01c10400)
@ -116,10 +118,46 @@ typedef volatile unsigned int * dv_reg_p;
# endif
# else /* CONFIG_SOC_DA8XX */
# define DAVINCI_UART0_BASE 0x01c42000
# define DAVINCI_UART1_BASE 0x01d0c000
# define DAVINCI_UART2_BASE 0x01d0d000
# define DAVINCI_I2C0_BASE 0x01c22000
# define DAVINCI_I2C1_BASE 0x01e28000
# define DAVINCI_TIMER0_BASE 0x01c20000
# define DAVINCI_TIMER1_BASE 0x01c21000
# define DAVINCI_WDOG_BASE 0x01c21000
# define DAVINCI_PLL_CNTRL0_BASE 0x01c11000
# define DAVINCI_PSC0_BASE 0x01c10000
# define DAVINCI_PSC1_BASE 0x01e27000
# define DAVINCI_SPI0_BASE 0x01c41000
# define DAVINCI_USB_OTG_BASE 0x01e00000
# define DAVINCI_SPI1_BASE 0x01e12000
# define DAVINCI_GPIO_BASE 0x01e26000
# define DAVINCI_EMAC_CNTRL_REGS_BASE 0x01e23000
# define DAVINCI_EMAC_WRAPPER_CNTRL_REGS_BASE 0x01e22000
# define DAVINCI_EMAC_WRAPPER_RAM_BASE 0x01e20000
# define DAVINCI_MDIO_CNTRL_REGS_BASE 0x01e24000
# define DAVINCI_ASYNC_EMIF_CNTRL_BASE 0x68000000
# define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x40000000
# define DAVINCI_ASYNC_EMIF_DATA_CE2_BASE 0x60000000
# define DAVINCI_ASYNC_EMIF_DATA_CE3_BASE 0x62000000
# define DAVINCI_ASYNC_EMIF_DATA_CE4_BASE 0x64000000
# define DAVINCI_ASYNC_EMIF_DATA_CE5_BASE 0x66000000
# define DAVINCI_DDR_EMIF_CTRL_BASE 0xb0000000
# define DAVINCI_DDR_EMIF_DATA_BASE 0xc0000000
# define DAVINCI_INTC_BASE 0xfffee000
# define DAVINCI_BOOTCFG_BASE 0x01c14000
# endif /* CONFIG_SOC_DA8XX */
/* Power and Sleep Controller (PSC) Domains */
# define DAVINCI_GPSC_ARMDOMAIN 0
# define DAVINCI_GPSC_DSPDOMAIN 1
# ifndef CONFIG_SOC_DA8XX
# define DAVINCI_LPSC_VPSSMSTR 0
# define DAVINCI_LPSC_VPSSSLV 1
# define DAVINCI_LPSC_TPCC 2
@ -166,6 +204,52 @@ typedef volatile unsigned int * dv_reg_p;
# define DAVINCI_DM646X_LPSC_UART0 26
# define DAVINCI_DM646X_LPSC_I2C 31
# else /* CONFIG_SOC_DA8XX */
enum davinci_lpsc_ids {
DAVINCI_LPSC_TPCC = 0 ,
DAVINCI_LPSC_TPTC0 ,
DAVINCI_LPSC_TPTC1 ,
DAVINCI_LPSC_AEMIF ,
DAVINCI_LPSC_SPI0 ,
DAVINCI_LPSC_MMC_SD ,
DAVINCI_LPSC_AINTC ,
DAVINCI_LPSC_ARM_RAM_ROM ,
DAVINCI_LPSC_SECCTL_KEYMGR ,
DAVINCI_LPSC_UART0 ,
DAVINCI_LPSC_SCR0 ,
DAVINCI_LPSC_SCR1 ,
DAVINCI_LPSC_SCR2 ,
DAVINCI_LPSC_DMAX ,
DAVINCI_LPSC_ARM ,
DAVINCI_LPSC_GEM ,
/* for LPSCs in PSC1, offset from 32 for differentiation */
DAVINCI_LPSC_PSC1_BASE = 32 ,
DAVINCI_LPSC_USB11 ,
DAVINCI_LPSC_USB20 ,
DAVINCI_LPSC_GPIO ,
DAVINCI_LPSC_UHPI ,
DAVINCI_LPSC_EMAC ,
DAVINCI_LPSC_DDR_EMIF ,
DAVINCI_LPSC_McASP0 ,
DAVINCI_LPSC_McASP1 ,
DAVINCI_LPSC_McASP2 ,
DAVINCI_LPSC_SPI1 ,
DAVINCI_LPSC_I2C1 ,
DAVINCI_LPSC_UART1 ,
DAVINCI_LPSC_UART2 ,
DAVINCI_LPSC_LCDC ,
DAVINCI_LPSC_ePWM ,
DAVINCI_LPSC_eCAP ,
DAVINCI_LPSC_eQEP ,
DAVINCI_LPSC_SCR_P0 ,
DAVINCI_LPSC_SCR_P1 ,
DAVINCI_LPSC_CR_P3 ,
DAVINCI_LPSC_L3_CBA_RAM
} ;
# endif /* CONFIG_SOC_DA8XX */
void lpsc_on ( unsigned int id ) ;
void dsp_on ( void ) ;
@ -174,6 +258,8 @@ void davinci_enable_emac(void);
void davinci_enable_i2c ( void ) ;
void davinci_errata_workarounds ( void ) ;
# ifndef CONFIG_SOC_DA8XX
/* Some PSC defines */
# define PSC_CHP_SHRTSW (0x01c40038)
# define PSC_GBLCTL (0x01c41010)
@ -194,6 +280,39 @@ void davinci_errata_workarounds(void);
# define PSC_SILVER_BULLET (0x01c41a20)
# else /* CONFIG_SOC_DA8XX */
# define PSC_PSC0_MODULE_ID_CNT 16
# define PSC_PSC1_MODULE_ID_CNT 32
struct davinci_psc_regs {
dv_reg revid ;
dv_reg rsvd0 [ 71 ] ;
dv_reg ptcmd ;
dv_reg rsvd1 ;
dv_reg ptstat ;
dv_reg rsvd2 [ 437 ] ;
union {
struct {
dv_reg mdstat [ PSC_PSC0_MODULE_ID_CNT ] ;
dv_reg rsvd3 [ 112 ] ;
dv_reg mdctl [ PSC_PSC0_MODULE_ID_CNT ] ;
} psc0 ;
struct {
dv_reg mdstat [ PSC_PSC1_MODULE_ID_CNT ] ;
dv_reg rsvd3 [ 96 ] ;
dv_reg mdctl [ PSC_PSC1_MODULE_ID_CNT ] ;
} psc1 ;
} ;
} ;
# define davinci_psc0_regs ((struct davinci_psc_regs *)DAVINCI_PSC0_BASE)
# define davinci_psc1_regs ((struct davinci_psc_regs *)DAVINCI_PSC1_BASE)
# endif /* CONFIG_SOC_DA8XX */
# ifndef CONFIG_SOC_DA8XX
/* Miscellania... */
# define VBPR (0x20000020)
@ -206,4 +325,122 @@ void davinci_errata_workarounds(void);
# define PINMUX3 0x01c4000c
# define PINMUX4 0x01c40010
# else /* CONFIG_SOC_DA8XX */
struct davinci_pllc_regs {
dv_reg revid ;
dv_reg rsvd1 [ 56 ] ;
dv_reg rstype ;
dv_reg rsvd2 [ 6 ] ;
dv_reg pllctl ;
dv_reg ocsel ;
dv_reg rsvd3 [ 2 ] ;
dv_reg pllm ;
dv_reg prediv ;
dv_reg plldiv1 ;
dv_reg plldiv2 ;
dv_reg plldiv3 ;
dv_reg oscdiv ;
dv_reg postdiv ;
dv_reg rsvd4 [ 3 ] ;
dv_reg pllcmd ;
dv_reg pllstat ;
dv_reg alnctl ;
dv_reg dchange ;
dv_reg cken ;
dv_reg ckstat ;
dv_reg systat ;
dv_reg rsvd5 [ 3 ] ;
dv_reg plldiv4 ;
dv_reg plldiv5 ;
dv_reg plldiv6 ;
dv_reg plldiv7 ;
dv_reg rsvd6 [ 32 ] ;
dv_reg emucnt0 ;
dv_reg emucnt1 ;
} ;
# define davinci_pllc_regs ((struct davinci_pllc_regs *)DAVINCI_PLL_CNTRL0_BASE)
# define DAVINCI_PLLC_DIV_MASK 0x1f
/* Clock IDs */
enum davinci_clk_ids {
DAVINCI_SPI0_CLKID = 2 ,
DAVINCI_UART2_CLKID = 2 ,
DAVINCI_MDIO_CLKID = 4 ,
DAVINCI_ARM_CLKID = 6 ,
DAVINCI_PLLM_CLKID = 0xff ,
DAVINCI_PLLC_CLKID = 0x100 ,
DAVINCI_AUXCLK_CLKID = 0x101
} ;
int clk_get ( enum davinci_clk_ids id ) ;
/* Boot config */
struct davinci_syscfg_regs {
dv_reg revid ;
dv_reg rsvd [ 71 ] ;
dv_reg pinmux [ 20 ] ;
dv_reg suspsrc ;
dv_reg chipsig ;
dv_reg chipsig_clr ;
dv_reg cfgchip0 ;
dv_reg cfgchip1 ;
dv_reg cfgchip2 ;
dv_reg cfgchip3 ;
dv_reg cfgchip4 ;
} ;
# define davinci_syscfg_regs \
( ( struct davinci_syscfg_regs * ) DAVINCI_BOOTCFG_BASE )
/* Emulation suspend bits */
# define DAVINCI_SYSCFG_SUSPSRC_EMAC (1 << 5)
# define DAVINCI_SYSCFG_SUSPSRC_I2C (1 << 16)
# define DAVINCI_SYSCFG_SUSPSRC_SPI0 (1 << 21)
# define DAVINCI_SYSCFG_SUSPSRC_UART2 (1 << 20)
# define DAVINCI_SYSCFG_SUSPSRC_TIMER0 (1 << 27)
/* Interrupt controller */
struct davinci_aintc_regs {
dv_reg revid ;
dv_reg cr ;
dv_reg dummy0 [ 2 ] ;
dv_reg ger ;
dv_reg dummy1 [ 219 ] ;
dv_reg ecr1 ;
dv_reg ecr2 ;
dv_reg ecr3 ;
dv_reg dummy2 [ 1117 ] ;
dv_reg hier ;
} ;
# define davinci_aintc_regs ((struct davinci_aintc_regs *)DAVINCI_INTC_BASE)
struct davinci_uart_ctrl_regs {
dv_reg revid1 ;
dv_reg revid2 ;
dv_reg pwremu_mgmt ;
dv_reg mdr ;
} ;
# define DAVINCI_UART_CTRL_BASE 0x28
# define DAVINCI_UART0_CTRL_ADDR (DAVINCI_UART0_BASE + DAVINCI_UART_CTRL_BASE)
# define DAVINCI_UART1_CTRL_ADDR (DAVINCI_UART1_BASE + DAVINCI_UART_CTRL_BASE)
# define DAVINCI_UART2_CTRL_ADDR (DAVINCI_UART2_BASE + DAVINCI_UART_CTRL_BASE)
# define davinci_uart0_ctrl_regs \
( ( struct davinci_uart_ctrl_regs * ) DAVINCI_UART0_CTRL_ADDR )
# define davinci_uart1_ctrl_regs \
( ( struct davinci_uart_ctrl_regs * ) DAVINCI_UART1_CTRL_ADDR )
# define davinci_uart2_ctrl_regs \
( ( struct davinci_uart_ctrl_regs * ) DAVINCI_UART2_CTRL_ADDR )
/* UART PWREMU_MGMT definitions */
# define DAVINCI_UART_PWREMU_MGMT_FREE (1 << 0)
# define DAVINCI_UART_PWREMU_MGMT_URRST (1 << 13)
# define DAVINCI_UART_PWREMU_MGMT_UTRST (1 << 14)
# endif /* CONFIG_SOC_DA8XX */
# endif /* __ASM_ARCH_HARDWARE_H */