|
@@ -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;
|
|
|
}
|
|
|
|
|
|
/*
|