void __init board_setup(void) { u32 pin_func; pm_power_off = xxs1500_power_off; _machine_halt = xxs1500_power_off; _machine_restart = xxs1500_reset; alchemy_gpio1_input_enable(); alchemy_gpio2_enable(); /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; pin_func |= SYS_PF_UR3; au_writel(pin_func, SYS_PINFUNC); /* Enable UART */ au_writel(0x01, UART3_ADDR + UART_MOD_CNTRL); /* clock enable (CE) */ mdelay(10); au_writel(0x03, UART3_ADDR + UART_MOD_CNTRL); /* CE and "enable" */ mdelay(10); /* Enable DTR = USB power up */ au_writel(0x01, UART3_ADDR + UART_MCR); /* UART_MCR_DTR is 0x01??? */ #ifdef CONFIG_PCI #if defined(__MIPSEB__) au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); #else au_writel(0xf, Au1500_PCI_CFG); #endif #endif }
static int db1x_pm_enter(suspend_state_t state) { unsigned short bcsrs[16]; int i, j, hasint; /* save CPLD regs */ hasint = bcsr_read(BCSR_WHOAMI); hasint = BCSR_WHOAMI_BOARD(hasint) >= BCSR_WHOAMI_DB1200; j = (hasint) ? BCSR_MASKSET : BCSR_SYSTEM; for (i = BCSR_STATUS; i <= j; i++) bcsrs[i] = bcsr_read(i); /* shut off hexleds */ bcsr_write(BCSR_HEXCLEAR, 3); /* enable GPIO based wakeup */ alchemy_gpio1_input_enable(); /* clear and setup wake cause and source */ alchemy_wrsys(0, AU1000_SYS_WAKEMSK); alchemy_wrsys(0, AU1000_SYS_WAKESRC); alchemy_wrsys(db1x_pm_wakemsk, AU1000_SYS_WAKEMSK); /* setup 1Hz-timer-based wakeup: wait for reg access */ while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_M20) asm volatile ("nop"); alchemy_wrsys(alchemy_rdsys(AU1000_SYS_TOYREAD) + db1x_pm_sleep_secs, AU1000_SYS_TOYMATCH2); /* wait for value to really hit the register */ while (alchemy_rdsys(AU1000_SYS_CNTRCTRL) & SYS_CNTRL_M20) asm volatile ("nop"); /* ...and now the sandman can come! */ au_sleep(); /* restore CPLD regs */ for (i = BCSR_STATUS; i <= BCSR_SYSTEM; i++) bcsr_write(i, bcsrs[i]); /* restore CPLD int registers */ if (hasint) { bcsr_write(BCSR_INTCLR, 0xffff); bcsr_write(BCSR_MASKCLR, 0xffff); bcsr_write(BCSR_INTSTAT, 0xffff); bcsr_write(BCSR_INTSET, bcsrs[BCSR_INTSET]); bcsr_write(BCSR_MASKSET, bcsrs[BCSR_MASKSET]); } /* light up hexleds */ bcsr_write(BCSR_HEXCLEAR, 0); return 0; }
void __init board_setup(void) { u32 pin_func; #ifdef CONFIG_SERIAL_8250_CONSOLE char *argptr; argptr = prom_getcmdline(); argptr = strstr(argptr, "console="); if (argptr == NULL) { argptr = prom_getcmdline(); strcat(argptr, " console=ttyS0,115200"); } #endif alchemy_gpio1_input_enable(); alchemy_gpio2_enable(); /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; pin_func |= SYS_PF_UR3; au_writel(pin_func, SYS_PINFUNC); /* Enable UART */ au_writel(0x01, UART3_ADDR + UART_MOD_CNTRL); /* clock enable (CE) */ mdelay(10); au_writel(0x03, UART3_ADDR + UART_MOD_CNTRL); /* CE and "enable" */ mdelay(10); /* Enable DTR = USB power up */ au_writel(0x01, UART3_ADDR + UART_MCR); /* UART_MCR_DTR is 0x01??? */ #ifdef CONFIG_PCMCIA_XXS1500 /* GPIO 0, 1, and 4 are inputs */ alchemy_gpio_direction_input(0); alchemy_gpio_direction_input(1); alchemy_gpio_direction_input(4); /* GPIO2 208/9/10/11 are inputs */ alchemy_gpio_direction_input(208); alchemy_gpio_direction_input(209); alchemy_gpio_direction_input(210); alchemy_gpio_direction_input(211); /* Turn off power */ alchemy_gpio_direction_output(214, 0); #endif #ifdef CONFIG_PCI #if defined(__MIPSEB__) au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); #else au_writel(0xf, Au1500_PCI_CFG); #endif #endif }
void __init board_setup(void) { volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; bcsr_init(DB1000_BCSR_PHYS_ADDR, DB1000_BCSR_PHYS_ADDR + DB1000_BCSR_HEXLED_OFS); /* Set AUX clock to 12 MHz * 8 = 96 MHz */ au_writel(8, SYS_AUXPLL); alchemy_gpio1_input_enable(); udelay(100); #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) { u32 pin_func, sys_freqctrl, sys_clksrc; /* Configure pins GPIO[14:9] as GPIO */ pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; /* Zero and disable FREQ2 */ sys_freqctrl = au_readl(SYS_FREQCTRL0); sys_freqctrl &= ~0xFFF00000; au_writel(sys_freqctrl, SYS_FREQCTRL0); /* Zero and disable USBH/USBD/IrDA clock */ sys_clksrc = au_readl(SYS_CLKSRC); sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); au_writel(sys_clksrc, SYS_CLKSRC); sys_freqctrl = au_readl(SYS_FREQCTRL0); sys_freqctrl &= ~0xFFF00000; sys_clksrc = au_readl(SYS_CLKSRC); sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); /* FREQ2 = aux / 2 = 48 MHz */ sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; au_writel(sys_freqctrl, SYS_FREQCTRL0); /* * Route 48 MHz FREQ2 into USBH/USBD/IrDA */ sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; au_writel(sys_clksrc, SYS_CLKSRC); /* Setup the static bus controller */ au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ /* * Get USB Functionality pin state (device vs host drive pins). */ pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; /* 2nd USB port is USB host. */ pin_func |= SYS_PF_USB; au_writel(pin_func, SYS_PINFUNC); } #endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ /* Enable sys bus clock divider when IDLE state or no bus activity. */ au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); /* Enable the RTC if not already enabled. */ if (!(readb(base + 0x28) & 0x20)) { writeb(readb(base + 0x28) | 0x20, base + 0x28); au_sync(); } /* Put the clock in BCD mode. */ if (readb(base + 0x2C) & 0x4) { /* reg B */ writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); au_sync(); } }