diff options
Diffstat (limited to 'arch/mn10300/unit-asb2364/unit-init.c')
| -rw-r--r-- | arch/mn10300/unit-asb2364/unit-init.c | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/mn10300/unit-asb2364/unit-init.c b/arch/mn10300/unit-asb2364/unit-init.c index 11440803db1..6359b41ce7e 100644 --- a/arch/mn10300/unit-asb2364/unit-init.c +++ b/arch/mn10300/unit-asb2364/unit-init.c @@ -20,13 +20,41 @@  #include <asm/processor.h>  #include <asm/irq.h>  #include <asm/intctl-regs.h> +#include <asm/serial-regs.h>  #include <unit/fpga-regs.h> +#include <unit/serial.h> +#include <unit/smsc911x.h> + +#define TTYS0_SERIAL_IER	__SYSREG(SERIAL_PORT0_BASE_ADDRESS + UART_IER * 2, u8) +#define LAN_IRQ_CFG		__SYSREG(SMSC911X_BASE + 0x54, u32) +#define LAN_INT_EN		__SYSREG(SMSC911X_BASE + 0x5c, u32)  /*   * initialise some of the unit hardware before gdbstub is set up   */  asmlinkage void __init unit_init(void)  { +	/* Make sure we aren't going to get unexpected interrupts */ +	TTYS0_SERIAL_IER = 0; +	SC0RXICR = 0; +	SC0TXICR = 0; +	SC1RXICR = 0; +	SC1TXICR = 0; +	SC2RXICR = 0; +	SC2TXICR = 0; + +	/* Attempt to reset the FPGA attached peripherals */ +	ASB2364_FPGA_REG_RESET_LAN = 0x0000; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_UART = 0x0000; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_I2C = 0x0000; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_USB = 0x0000; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_AV = 0x0000; +	SyncExBus(); +  	/* set up the external interrupts */  	/* XIRQ[0]: NAND RXBY */ @@ -56,7 +84,23 @@ asmlinkage void __init unit_init(void)   */  asmlinkage void __init unit_setup(void)  { +	/* Release the reset on the SMSC911X so that it is ready by the time we +	 * need it */ +	ASB2364_FPGA_REG_RESET_LAN = 0x0001; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_UART = 0x0001; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_I2C = 0x0001; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_USB = 0x0001; +	SyncExBus(); +	ASB2364_FPGA_REG_RESET_AV = 0x0001; +	SyncExBus(); +	/* Make sure the ethernet chipset isn't going to give us an interrupt +	 * storm from stuff it was doing pre-reset */ +	LAN_IRQ_CFG = 0; +	LAN_INT_EN = 0;  }  /*  | 
