339 lines
9.3 KiB
C
339 lines
9.3 KiB
C
|
#ifndef _GSC3280_SYSCTL_H_
|
||
|
#define _GSC3280_SYSCTL_H_
|
||
|
|
||
|
#include <gsc3280/gsc3280_regs.h>
|
||
|
|
||
|
#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 <gsc3280/gsc3280a_iomux.h>
|
||
|
#else
|
||
|
#include <gsc3280/gsc3280_iomux.h>
|
||
|
#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
|