ckfwq/linux-3.0.4/arch/mips/include/asm/mach-loongson/gsc3280/sysctl.h

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