#ifndef _GSC3280_SYSCTL_H_ #define _GSC3280_SYSCTL_H_ #include #define SYSCTL_MOD_APB 39 #define SYSCTL_MOD_CLKOUT 38 #define SYSCTL_MOD_EMI 37 #define SYSCTL_MOD_SYSCTL 36 #define SYSCTL_MOD_DDR2 35 #define SYSCTL_MOD_USB 34 #define SYSCTL_MOD_LCDC 33 #define SYSCTL_MOD_MAC 32 #define SYSCTL_MOD_SDIO 31 #define SYSCTL_MOD_NFC 30 #define SYSCTL_MOD_DMA 29 #define SYSCTL_MOD_ICTL 28 #define SYSCTL_MOD_GPIO 27 #define SYSCTL_MOD_WDT 26 #define SYSCTL_MOD_TIMER3 25 #define SYSCTL_MOD_TIMER2 24 #define SYSCTL_MOD_TIMER1 23 #define SYSCTL_MOD_TIMER0 22 #define SYSCTL_MOD_UART7 21 #define SYSCTL_MOD_UART6 20 #define SYSCTL_MOD_UART5 19 #define SYSCTL_MOD_UART4 18 #define SYSCTL_MOD_UART3 17 #define SYSCTL_MOD_UART2 16 #define SYSCTL_MOD_UART1 15 #define SYSCTL_MOD_UART0 14 #define SYSCTL_MOD_PS2_1 13 #define SYSCTL_MOD_PS2_0 12 #define SYSCTL_MOD_PWMR 11 #define SYSCTL_MOD_PWM2 10 #define SYSCTL_MOD_PWM1 9 #define SYSCTL_MOD_PWM0 8 #define SYSCTL_MOD_SCI1 7 #define SYSCTL_MOD_SCI0 6 #define SYSCTL_MOD_KPD 5 #define SYSCTL_MOD_SPI1 4 #define SYSCTL_MOD_SPI0 3 #define SYSCTL_MOD_CAN 2 #define SYSCTL_MOD_I2S 1 #define SYSCTL_MOD_I2C 0 static inline void sysctl_mod_disable(unsigned int module) { unsigned int addr = GSC3280_REGADDR_SYSCTL_MOD_CTL0 + (((module & ~0x1fUL) >> 5) << 2); *(unsigned int *)addr = *(unsigned int *)addr & (~(1<<(module & 0x1fUL))); } static inline void sysctl_mod_enable(unsigned int module) { unsigned int addr = GSC3280_REGADDR_SYSCTL_MOD_CTL0 + (((module & ~0x1fUL) >> 5) << 2); *(unsigned int *)addr = *(unsigned int *)addr | (1 << (module & 0x1fUL)); } static inline unsigned int sysctl_mod_is_enabled(unsigned int module) { unsigned int addr = GSC3280_REGADDR_SYSCTL_MOD_CTL0 + (((module & ~0x1fUL) >> 5) << 2); return !!((*(unsigned int *)addr) & (1 << (module & 0x1fUL))); } #ifdef CONFIG_BLX_GSC3280A #include #else #include #endif static inline int sysctl_iomux_is_enabled(unsigned int module) { unsigned int addr = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((module & ~0x1fUL) >> 5) << 2); return !!(*(unsigned int *)addr & (1 << (module & 0x1fUL))); } static inline void sysctl_iomux_disable(unsigned int module) { unsigned int addr = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((module & ~0x1fUL) >> 5) << 2); *(unsigned int *)addr = *(unsigned int *)addr & (~(1<<(module & 0x1fUL))); if (iomux_tab[module][1] >=0) { unsigned int addr1 = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((iomux_tab[module][1] & ~0x1fUL)>>5)<<2); *(unsigned int *)addr1 = *(unsigned int *)addr1 & (~(1 << (iomux_tab[module][1] & 0x1fUL))); if (iomux_tab[module][2] >=0) { addr1 = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((iomux_tab[module][2] & ~0x1fUL)>>5)<<2); *(unsigned int *)addr1 = *(unsigned int *)addr1 & (~(1 << (iomux_tab[module][2] & 0x1fUL))); } } } static inline int sysctl_iomux_enable(unsigned int module) { int i; unsigned int addr = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((module & ~0x1fUL) >> 5) << 2); for (i=3;i<16;i++) { if(iomux_tab[module][i]>=0) { /* conflict check have moved to conditional compile. if (sysctl_iomux_is_enabled(iomux_tab[module][i])) return -EACCES; */ sysctl_iomux_disable(iomux_tab[module][i]); } else break; } if (iomux_tab[module][1] >=0) { unsigned int addr1 = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((iomux_tab[module][1] & ~0x1fUL)>>5)<<2); *(unsigned int *)addr1 = *(unsigned int *)addr1 | (1 << (iomux_tab[module][1] & 0x1fUL)); if (iomux_tab[module][2] >=0) { addr1 = GSC3280_REGADDR_SYSCTL_IO_CFG0 + (((iomux_tab[module][2] & ~0x1fUL)>>5)<<2); *(unsigned int *)addr1 = *(unsigned int *)addr1 | (1 << (iomux_tab[module][2] & 0x1fUL)); } } *(unsigned int *)addr = *(unsigned int *)addr | (1 << (module & 0x1fUL)); return 0; } static inline void gsc3280_mod_iomux_init(void) { #ifndef CONFIG_BLX_GSC3280_FPGA unsigned iomux; for (iomux=SYSCTL_IOMUX_MIN; iomux<=SYSCTL_IOMUX_MAX; iomux++) sysctl_iomux_disable(iomux); #ifdef CONFIG_GSC3280MAC_ETH sysctl_mod_enable(SYSCTL_MOD_MAC); #ifdef CONFIG_MAC_MII *(volatile u32 *)(GSC3280_REGADDR_SYSCTL_MAC_CFG) = 0; sysctl_iomux_enable(SYSCTL_IOMUX_MAC_MII); #else *(volatile u32 *)(GSC3280_REGADDR_SYSCTL_MAC_CFG) = 1; sysctl_iomux_enable(SYSCTL_IOMUX_MAC_RMII); #endif #endif #ifdef CONFIG_SERIO_GSC3280PS2 #ifdef CONFIG_PS2_0 sysctl_mod_enable(SYSCTL_MOD_PS2_0); sysctl_iomux_enable(SYSCTL_IOMUX_PS2_0); #endif #ifdef CONFIG_PS2_1 sysctl_mod_enable(SYSCTL_MOD_PS2_1); sysctl_iomux_enable(SYSCTL_IOMUX_PS2_1); #endif #endif #ifdef CONFIG_KEYPAD_GSC3280 sysctl_mod_enable(SYSCTL_MOD_KPD); sysctl_iomux_enable(SYSCTL_IOMUX_KEYPAD); #endif #ifdef CONFIG_GSC3280_OTG sysctl_mod_enable(SYSCTL_MOD_USB); // sysctl_iomux_enable(SYSCTL_IOMUX_USB); #endif #ifdef CONFIG_MTD_NAND_GSC3280 sysctl_mod_enable(SYSCTL_MOD_NFC); sysctl_iomux_enable(SYSCTL_IOMUX_NFC); #endif #ifdef CONFIG_SERIAL_8250 #ifdef CONFIG_UART0 sysctl_mod_enable(SYSCTL_MOD_UART0); sysctl_iomux_enable(SYSCTL_IOMUX_UART0); #endif #ifdef CONFIG_UART1 sysctl_mod_enable(SYSCTL_MOD_UART1); sysctl_iomux_enable(SYSCTL_IOMUX_UART1); #endif #ifdef CONFIG_UART2 sysctl_mod_enable(SYSCTL_MOD_UART2); sysctl_iomux_enable(SYSCTL_IOMUX_UART2); #endif #ifdef CONFIG_UART3_0 sysctl_mod_enable(SYSCTL_MOD_UART3); sysctl_iomux_enable(SYSCTL_IOMUX_UART3_0); #endif #ifdef CONFIG_UART3_1 sysctl_mod_enable(SYSCTL_MOD_UART3); sysctl_iomux_enable(SYSCTL_IOMUX_UART3_1); #endif #ifdef CONFIG_UART4_0 sysctl_mod_enable(SYSCTL_MOD_UART4); sysctl_iomux_enable(SYSCTL_IOMUX_UART4_0); #endif #ifdef CONFIG_UART4_1 sysctl_mod_enable(SYSCTL_MOD_UART4); sysctl_iomux_enable(SYSCTL_IOMUX_UART4_1); #endif #ifdef CONFIG_UART5_TXE0 sysctl_mod_enable(SYSCTL_MOD_UART5); sysctl_iomux_enable(SYSCTL_IOMUX_UART5_TXE0); #endif #ifdef CONFIG_UART6 sysctl_mod_enable(SYSCTL_MOD_UART6); sysctl_iomux_enable(SYSCTL_IOMUX_UART6); #endif #ifdef CONFIG_UART6_4W sysctl_mod_enable(SYSCTL_MOD_UART6); sysctl_iomux_enable(SYSCTL_IOMUX_UART6_4W); sysctl_iomux_enable(SYSCTL_IOMUX_UART6); #endif #ifdef CONFIG_UART6_FULL sysctl_mod_enable(SYSCTL_MOD_UART6); sysctl_iomux_enable(SYSCTL_IOMUX_UART6_4W); sysctl_iomux_enable(SYSCTL_IOMUX_UART6_FULL); sysctl_iomux_enable(SYSCTL_IOMUX_UART6); #endif #ifdef CONFIG_UART7 sysctl_mod_enable(SYSCTL_MOD_UART7); sysctl_iomux_enable(SYSCTL_IOMUX_UART7); #endif #endif /*CONFIG_SERIAL_8250*/ #ifdef CONFIG_CAN_GSC3280 #ifdef CONFIG_CAN_0 sysctl_iomux_enable(SYSCTL_IOMUX_CAN_0); #endif #ifdef CONFIG_CAN_1 sysctl_iomux_enable(SYSCTL_IOMUX_CAN_1); #endif #endif #ifdef CONFIG_UART5_TXE1 sysctl_mod_enable(SYSCTL_MOD_UART5); sysctl_iomux_enable(SYSCTL_IOMUX_UART5_TXE1); #endif #ifdef CONFIG_GSC3280_SPI #ifdef CONFIG_SPI0 sysctl_mod_enable(SYSCTL_MOD_SPI0); sysctl_iomux_enable(SYSCTL_IOMUX_SPI0); #endif #ifdef CONFIG_SPI1 sysctl_mod_enable(SYSCTL_MOD_SPI1); sysctl_iomux_enable(SYSCTL_IOMUX_SPI1); #endif #endif #ifdef CONFIG_GSC3280_SCI #ifdef CONFIG_SCI0 sysctl_mod_enable(SYSCTL_MOD_SCI0); sysctl_iomux_enable(SYSCTL_IOMUX_SCI0); #endif #ifdef CONFIG_SCI1_0 sysctl_mod_enable(SYSCTL_MOD_SCI1); sysctl_iomux_enable(SYSCTL_IOMUX_SCI1_0); #endif #ifdef CONFIG_SCI1_1 sysctl_mod_enable(SYSCTL_MOD_SCI1); sysctl_iomux_enable(SYSCTL_IOMUX_SCI1_1); #endif #endif #ifdef CONFIG_GSC3280_PWM #ifdef CONFIG_PWM_ABCAP0 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_ABCAP0); #endif #ifdef CONFIG_PWM_CAP1 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_CAP1); #endif #ifdef CONFIG_PWM_CAP2 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_CAP2); #endif #ifdef CONFIG_PWM_OUT01 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_OUT01); #endif #ifdef CONFIG_PWM_OUT23 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_OUT23); #endif #ifdef CONFIG_PWM_OUT45 sysctl_iomux_enable(SYSCTL_IOMUX_PWM_OUT45); #endif #endif #ifdef CONFIG_SND_GSC3280_SOC_I2S #ifdef CONFIG_SND_SOC_ALL_CODECS sysctl_mod_enable(SYSCTL_MOD_CLKOUT); sysctl_iomux_enable(SYSCTL_IOMUX_CLKOUT); #endif #endif #ifdef CONFIG_GSC3280_EMI #ifdef CONFIG_EMI_WRD sysctl_iomux_enable(SYSCTL_IOMUX_EMI_WRD); #endif #ifdef CONFIG_EMI_CSN0 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_CSN0); #endif #ifdef CONFIG_EMI_CSN1 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_CSN1); #endif #ifdef CONFIG_EMI_CSN2 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_CSN2); #endif #ifdef CONFIG_EMI_A02 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A02); #endif #ifdef CONFIG_EMI_A39 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A39); #endif #ifdef CONFIG_EMI_A10 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A10); #endif #ifdef CONFIG_EMI_A11 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A11); #endif #ifdef CONFIG_EMI_A1214 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A1214); #endif #ifdef CONFIG_EMI_A1519 sysctl_iomux_enable(SYSCTL_IOMUX_EMI_A1519); #endif #endif #endif #ifdef CONFIG_UART5_TXE1 sysctl_mod_enable(SYSCTL_MOD_UART5); sysctl_iomux_enable(SYSCTL_IOMUX_UART5_TXE1); #endif } #endif