[lantiq] Drop 2.6.32 support
authorJohn Crispin <john@openwrt.org>
Wed, 9 May 2012 12:52:19 +0000 (12:52 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 9 May 2012 12:52:19 +0000 (12:52 +0000)
SVN-Revision: 31670

51 files changed:
target/linux/lantiq/ar9/config-2.6.32 [deleted file]
target/linux/lantiq/ase/config-2.6.32 [deleted file]
target/linux/lantiq/config-2.6.32 [deleted file]
target/linux/lantiq/danube/config-2.6.32 [deleted file]
target/linux/lantiq/falcon-stable/config-default [deleted file]
target/linux/lantiq/falcon-stable/profiles [deleted file]
target/linux/lantiq/falcon-stable/target.mk [deleted file]
target/linux/lantiq/patches-2.6.32/0001-MIPS-Lantiq-Add-initial-support-for-Lantiq-SoCs.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0002-MIPS-Lantiq-add-SoC-specific-code-for-XWAY-family.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0003-MIPS-Lantiq-Add-PCI-controller-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0004-MIPS-Lantiq-Add-NOR-flash-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0005-MIPS-Lantiq-Add-platform-device-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0006-MIPS-Lantiq-Add-mips_machine-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0007-MIPS-Lantiq-Add-machtypes-for-lantiq-eval-kits.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0008-MIPS-Lantiq-Add-more-gpio-drivers.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0009-SERIAL-Lantiq-Add-driver-for-MIPS-Lantiq-SOCs.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0010-MIPS-Lantiq-Add-DMA-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0011-MIPS-Lantiq-Add-ethernet-driver.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0012-MIPS-Lantiq-Add-etop-board-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0013-MIPS-Lantiq-Add-watchdog-support.patch [deleted file]
target/linux/lantiq/patches-2.6.32/0014-fix_mtd.patch [deleted file]
target/linux/lantiq/patches-2.6.32/100-falcon_header.patch [deleted file]
target/linux/lantiq/patches-2.6.32/110-falcon_board.patch [deleted file]
target/linux/lantiq/patches-2.6.32/120-falcon-i2c.patch [deleted file]
target/linux/lantiq/patches-2.6.32/130-falcon-spi-flash.patch [deleted file]
target/linux/lantiq/patches-2.6.32/140-falcon-easy98000-cpld-led.patch [deleted file]
target/linux/lantiq/patches-2.6.32/150-falcon-easy98020.patch [deleted file]
target/linux/lantiq/patches-2.6.32/160-falcon-95C3AM1.patch [deleted file]
target/linux/lantiq/patches-2.6.32/200-mach-arv45xx.patch [deleted file]
target/linux/lantiq/patches-2.6.32/210-mtd_uimage_split.patch [deleted file]
target/linux/lantiq/patches-2.6.32/220-atm_hack.patch [deleted file]
target/linux/lantiq/patches-2.6.32/230-cmdline_hack.patch [deleted file]
target/linux/lantiq/patches-2.6.32/240-udp_redirect.patch [deleted file]
target/linux/lantiq/patches-2.6.32/250-mt-vpe.patch [deleted file]
target/linux/lantiq/patches-2.6.32/260-ar9-cache-split.patch [deleted file]
target/linux/lantiq/patches-2.6.32/270-m25p80-fast-read.patch [deleted file]
target/linux/lantiq/patches-2.6.32/350-dm9000-polling.patch [deleted file]
target/linux/lantiq/patches-2.6.32/400-spi1.patch [deleted file]
target/linux/lantiq/patches-2.6.32/410-spi2.patch [deleted file]
target/linux/lantiq/patches-2.6.32/420-spi3.patch [deleted file]
target/linux/lantiq/patches-2.6.32/500-register_ebu.patch [deleted file]
target/linux/lantiq/patches-2.6.32/510-register_madwifi.patch [deleted file]
target/linux/lantiq/patches-2.6.32/520-register_buttons.patch [deleted file]
target/linux/lantiq/patches-2.6.32/530-register_tapi.patch [deleted file]
target/linux/lantiq/patches-2.6.32/540-gptu.patch [deleted file]
target/linux/lantiq/patches-2.6.32/550-dwc_otg.patch [deleted file]
target/linux/lantiq/patches-2.6.32/560-dev-leds-gpio.patch [deleted file]
target/linux/lantiq/patches-2.6.32/600-mach-dgn3500.patch [deleted file]
target/linux/lantiq/patches-2.6.32/990-fix-asc-drv-timeout.patch [deleted file]
target/linux/lantiq/patches-2.6.32/990-fix-early_printk.patch [deleted file]
target/linux/lantiq/patches-2.6.32/990-fix_include.patch [deleted file]

diff --git a/target/linux/lantiq/ar9/config-2.6.32 b/target/linux/lantiq/ar9/config-2.6.32
deleted file mode 100644 (file)
index eb81505..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-CONFIG_ADM6996_PHY=y
-CONFIG_AR8216_PHY=y
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_HW_HAS_PCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_INPUT=y
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_GPIO_BUTTONS is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_ISDN is not set
-CONFIG_LANTIQ_ETOP=y
-# CONFIG_LANTIQ_MACH_ARV45XX is not set
-# CONFIG_LANTIQ_MACH_EASY50712 is not set
-CONFIG_LANTIQ_MACH_NETGEAR=y
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_RTL8306_PHY=y
-# CONFIG_SOC_AMAZON_SE is not set
-# CONFIG_SOC_FALCON is not set
-CONFIG_SOC_TYPE_XWAY=y
-CONFIG_SOC_XWAY=y
-CONFIG_SPI=y
-CONFIG_SPI_BITBANG=y
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_MASTER=y
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_TC35815 is not set
-CONFIG_USB_SUPPORT=y
diff --git a/target/linux/lantiq/ase/config-2.6.32 b/target/linux/lantiq/ase/config-2.6.32
deleted file mode 100644 (file)
index eeea0be..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# CONFIG_DM9000 is not set
-CONFIG_INPUT=y
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_GPIO_BUTTONS is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_ISDN is not set
-CONFIG_LANTIQ_ETOP=y
-CONFIG_LANTIQ_MACH_EASY50601=y
-CONFIG_SOC_AMAZON_SE=y
-# CONFIG_SOC_FALCON is not set
-CONFIG_SOC_TYPE_XWAY=y
-# CONFIG_SOC_XWAY is not set
-# CONFIG_I2C_DESIGNWARE is not set
diff --git a/target/linux/lantiq/config-2.6.32 b/target/linux/lantiq/config-2.6.32
deleted file mode 100644 (file)
index ecaff7e..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-CONFIG_BOOT_RAW=y
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CFG80211_DEFAULT_PS_VALUE=0
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_CPU_LOONGSON2E is not set
-CONFIG_CPU_MIPS32=y
-# CONFIG_CPU_MIPS32_R1 is not set
-CONFIG_CPU_MIPS32_R2=y
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR2=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-CONFIG_EARLY_PRINTK=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_SYSFS=y
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HW_RANDOM=y
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_IFX_UDP_REDIRECT=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_IRQ_CPU=y
-CONFIG_LANTIQ=y
-CONFIG_LANTIQ_WDT=y
-CONFIG_LEDS_GPIO=y
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-CONFIG_MIPS_MACHINE=y
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-# CONFIG_MIPS_VPE_LOADER is not set
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_LANTIQ=y
-CONFIG_MTD_UIMAGE_SPLIT=y
-CONFIG_NLS=y
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250 is not set
-CONFIG_SERIAL_LANTIQ=y
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-CONFIG_SWAP_IO_SPACE=y
-CONFIG_SWCONFIG=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_HAS_CPU_MIPS32_R2=y
-CONFIG_SYS_HAS_EARLY_PRINTK=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-CONFIG_SYS_SUPPORTS_MULTITHREADING=y
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_TREE_RCU=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/lantiq/danube/config-2.6.32 b/target/linux/lantiq/danube/config-2.6.32
deleted file mode 100644 (file)
index fde465f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-CONFIG_ADM6996_PHY=y
-CONFIG_AR8216_PHY=y
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_HW_HAS_PCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_INPUT=y
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_GPIO_BUTTONS is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_ISDN is not set
-CONFIG_LANTIQ_ETOP=y
-CONFIG_LANTIQ_MACH_ARV45XX=y
-CONFIG_LANTIQ_MACH_EASY50712=y
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_RTL8306_PHY=y
-# CONFIG_SOC_AMAZON_SE is not set
-# CONFIG_SOC_FALCON is not set
-CONFIG_SOC_TYPE_XWAY=y
-CONFIG_SOC_XWAY=y
-CONFIG_SPI=y
-CONFIG_SPI_BITBANG=y
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_MASTER=y
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_TC35815 is not set
-CONFIG_USB_SUPPORT=y
diff --git a/target/linux/lantiq/falcon-stable/config-default b/target/linux/lantiq/falcon-stable/config-default
deleted file mode 100644 (file)
index 72cca07..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-CONFIG_CPU_MIPSR2_IRQ_EI=y
-CONFIG_CPU_MIPSR2_IRQ_VI=y
-CONFIG_IFX_VPE_CACHE_SPLIT=y
-CONFIG_IFX_VPE_EXT=y
-CONFIG_LANTIQ_MACH_95C3AM1=y
-CONFIG_LANTIQ_MACH_EASY98000=y
-CONFIG_LANTIQ_MACH_EASY98020=y
-CONFIG_M25PXX_USE_FAST_READ=y
-CONFIG_MIPS_MT=y
-# CONFIG_I2C_DESIGNWARE is not set
-# CONFIG_MIPS_VPE_APSP_API is not set
-CONFIG_MIPS_VPE_LOADER=y
-CONFIG_MIPS_VPE_LOADER_TOM=y
-CONFIG_MTD_M25P80=y
-CONFIG_MTSCHED=y
-# CONFIG_PERFCTRS is not set
-# CONFIG_SOC_AMAZON_SE is not set
-CONFIG_SOC_FALCON=y
-# CONFIG_SOC_TYPE_XWAY is not set
-# CONFIG_SOC_XWAY is not set
-CONFIG_SPI=y
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_FALCON=y
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_MASTER=y
-# CONFIG_SPI_SPIDEV is not set
diff --git a/target/linux/lantiq/falcon-stable/profiles b/target/linux/lantiq/falcon-stable/profiles
deleted file mode 100644 (file)
index 72ebc8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../falcon/profiles
\ No newline at end of file
diff --git a/target/linux/lantiq/falcon-stable/target.mk b/target/linux/lantiq/falcon-stable/target.mk
deleted file mode 100644 (file)
index 3f007a6..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-include $(PLATFORM_SUBDIR)/../falcon/target.mk
-
-LINUX_VERSION:=2.6.32.33
-
-SUBTARGET:=falcon-stable
-BOARDNAME:=Falcon-Stable
-
-define Target/Description
-       Lantiq Falcon (Stable Kernel)
-endef
diff --git a/target/linux/lantiq/patches-2.6.32/0001-MIPS-Lantiq-Add-initial-support-for-Lantiq-SoCs.patch b/target/linux/lantiq/patches-2.6.32/0001-MIPS-Lantiq-Add-initial-support-for-Lantiq-SoCs.patch
deleted file mode 100644 (file)
index 6131577..0000000
+++ /dev/null
@@ -1,898 +0,0 @@
-From 9e0235e97ea2617beaacaa16ab5f0b9e75f4680e Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:47 +0200
-Subject: [PATCH 01/13] MIPS: Lantiq: Add initial support for Lantiq SoCs
-
-Add initial support for Mips based SoCs made by Lantiq. This series will add
-support for the XWAY family.
-
-The series allows booting a minimal system using a initramfs or NOR. Missing
-drivers and support for Amazon and GPON family will be provided in a later
-series.
-
-[Ralf: Remove some cargo cult programming and fixed formatting.]
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Signed-off-by: David Daney <ddaney@caviumnetworks.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2252/
-Patchwork: https://patchwork.linux-mips.org/patch/2371/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/Kbuild.platforms                 |    1 +
- arch/mips/Kconfig                          |   17 ++
- arch/mips/include/asm/mach-lantiq/lantiq.h |   63 ++++++
- arch/mips/include/asm/mach-lantiq/war.h    |   24 ++
- arch/mips/lantiq/Makefile                  |    9 +
- arch/mips/lantiq/Platform                  |    7 +
- arch/mips/lantiq/clk.c                     |  140 ++++++++++++
- arch/mips/lantiq/clk.h                     |   18 ++
- arch/mips/lantiq/early_printk.c            |   33 +++
- arch/mips/lantiq/irq.c                     |  326 ++++++++++++++++++++++++++++
- arch/mips/lantiq/prom.c                    |   71 ++++++
- arch/mips/lantiq/prom.h                    |   24 ++
- arch/mips/lantiq/setup.c                   |   41 ++++
- 13 files changed, 774 insertions(+), 0 deletions(-)
- create mode 100644 arch/mips/include/asm/mach-lantiq/lantiq.h
- create mode 100644 arch/mips/include/asm/mach-lantiq/war.h
- create mode 100644 arch/mips/lantiq/Makefile
- create mode 100644 arch/mips/lantiq/Platform
- create mode 100644 arch/mips/lantiq/clk.c
- create mode 100644 arch/mips/lantiq/clk.h
- create mode 100644 arch/mips/lantiq/early_printk.c
- create mode 100644 arch/mips/lantiq/irq.c
- create mode 100644 arch/mips/lantiq/prom.c
- create mode 100644 arch/mips/lantiq/prom.h
- create mode 100644 arch/mips/lantiq/setup.c
-
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -174,6 +174,23 @@
-        Members include the Acer PICA, MIPS Magnum 4000, MIPS Millennium and
-        Olivetti M700-10 workstations.
-+config LANTIQ
-+      bool "Lantiq based platforms"
-+      select DMA_NONCOHERENT
-+      select IRQ_CPU
-+      select CEVT_R4K
-+      select CSRC_R4K
-+      select SYS_HAS_CPU_MIPS32_R1
-+      select SYS_HAS_CPU_MIPS32_R2
-+      select SYS_SUPPORTS_BIG_ENDIAN
-+      select SYS_SUPPORTS_32BIT_KERNEL
-+      select SYS_SUPPORTS_MULTITHREADING
-+      select SYS_HAS_EARLY_PRINTK
-+      select ARCH_REQUIRE_GPIOLIB
-+      select SWAP_IO_SPACE
-+      select BOOT_RAW
-+      select HAVE_CLK
-+
- config LASAT
-       bool "LASAT Networks platforms"
-       select CEVT_R4K
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/lantiq.h
-@@ -0,0 +1,63 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+#ifndef _LANTIQ_H__
-+#define _LANTIQ_H__
-+
-+#include <linux/irq.h>
-+
-+/* generic reg access functions */
-+#define ltq_r32(reg)          __raw_readl(reg)
-+#define ltq_w32(val, reg)     __raw_writel(val, reg)
-+#define ltq_w32_mask(clear, set, reg) \
-+      ltq_w32((ltq_r32(reg) & ~(clear)) | (set), reg)
-+#define ltq_r8(reg)           __raw_readb(reg)
-+#define ltq_w8(val, reg)      __raw_writeb(val, reg)
-+
-+/* register access macros for EBU and CGU */
-+#define ltq_ebu_w32(x, y)     ltq_w32((x), ltq_ebu_membase + (y))
-+#define ltq_ebu_r32(x)                ltq_r32(ltq_ebu_membase + (x))
-+#define ltq_cgu_w32(x, y)     ltq_w32((x), ltq_cgu_membase + (y))
-+#define ltq_cgu_r32(x)                ltq_r32(ltq_cgu_membase + (x))
-+
-+extern __iomem void *ltq_ebu_membase;
-+extern __iomem void *ltq_cgu_membase;
-+
-+extern unsigned int ltq_get_cpu_ver(void);
-+extern unsigned int ltq_get_soc_type(void);
-+
-+/* clock speeds */
-+#define CLOCK_60M     60000000
-+#define CLOCK_83M     83333333
-+#define CLOCK_111M    111111111
-+#define CLOCK_133M    133333333
-+#define CLOCK_167M    166666667
-+#define CLOCK_200M    200000000
-+#define CLOCK_266M    266666666
-+#define CLOCK_333M    333333333
-+#define CLOCK_400M    400000000
-+
-+/* spinlock all ebu i/o */
-+extern spinlock_t ebu_lock;
-+
-+/* some irq helpers */
-+extern void ltq_disable_irq(unsigned int irq);
-+extern void ltq_mask_and_ack_irq(unsigned int irq);
-+extern void ltq_enable_irq(unsigned int irq);
-+
-+/* find out what caused the last cpu reset */
-+extern int ltq_reset_cause(void);
-+#define LTQ_RST_CAUSE_WDTRST  0x20
-+
-+#define IOPORT_RESOURCE_START 0x10000000
-+#define IOPORT_RESOURCE_END   0xffffffff
-+#define IOMEM_RESOURCE_START  0x10000000
-+#define IOMEM_RESOURCE_END    0xffffffff
-+#define LTQ_FLASH_START               0x10000000
-+#define LTQ_FLASH_MAX         0x04000000
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/war.h
-@@ -0,0 +1,24 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ */
-+#ifndef __ASM_MIPS_MACH_LANTIQ_WAR_H
-+#define __ASM_MIPS_MACH_LANTIQ_WAR_H
-+
-+#define R4600_V1_INDEX_ICACHEOP_WAR     0
-+#define R4600_V1_HIT_CACHEOP_WAR        0
-+#define R4600_V2_HIT_CACHEOP_WAR        0
-+#define R5432_CP0_INTERRUPT_WAR         0
-+#define BCM1250_M3_WAR                  0
-+#define SIBYTE_1956_WAR                 0
-+#define MIPS4K_ICACHE_REFILL_WAR        0
-+#define MIPS_CACHE_SYNC_WAR             0
-+#define TX49XX_ICACHE_INDEX_INV_WAR     0
-+#define RM9000_CDEX_SMP_WAR             0
-+#define ICACHE_REFILLS_WORKAROUND_WAR   0
-+#define R10000_LLSC_WAR                 0
-+#define MIPS34K_MISSED_ITLB_WAR         0
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/lantiq/Makefile
-@@ -0,0 +1,9 @@
-+# Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+#
-+# This program is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License version 2 as published
-+# by the Free Software Foundation.
-+
-+obj-y := irq.o setup.o clk.o prom.o
-+
-+obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
---- /dev/null
-+++ b/arch/mips/lantiq/Platform
-@@ -0,0 +1,7 @@
-+#
-+# Lantiq
-+#
-+
-+platform-$(CONFIG_LANTIQ)     += lantiq/
-+cflags-$(CONFIG_LANTIQ)               += -I$(srctree)/arch/mips/include/asm/mach-lantiq
-+load-$(CONFIG_LANTIQ)         = 0xffffffff80002000
---- /dev/null
-+++ b/arch/mips/lantiq/clk.c
-@@ -0,0 +1,144 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 Thomas Langer <thomas.langer@lantiq.com>
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+#include <linux/io.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-+#include <linux/list.h>
-+
-+#include <asm/time.h>
-+#include <asm/irq.h>
-+#include <asm/div64.h>
-+
-+#include <lantiq_soc.h>
-+
-+#include "clk.h"
-+
-+struct clk {
-+      const char *name;
-+      unsigned long rate;
-+      unsigned long (*get_rate) (void);
-+};
-+
-+static struct clk *cpu_clk;
-+static int cpu_clk_cnt;
-+
-+/* lantiq socs have 3 static clocks */
-+static struct clk cpu_clk_generic[] = {
-+      {
-+              .name = "cpu",
-+              .get_rate = ltq_get_cpu_hz,
-+      }, {
-+              .name = "fpi",
-+              .get_rate = ltq_get_fpi_hz,
-+      }, {
-+              .name = "io",
-+              .get_rate = ltq_get_io_region_clock,
-+      },
-+};
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+static struct resource ltq_cgu_resource = {
-+      .name   = "cgu",
-+      .start  = LTQ_CGU_BASE_ADDR,
-+      .end    = LTQ_CGU_BASE_ADDR + LTQ_CGU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+/* remapped clock register range */
-+void __iomem *ltq_cgu_membase;
-+#endif
-+
-+void clk_init(void)
-+{
-+      cpu_clk = cpu_clk_generic;
-+      cpu_clk_cnt = ARRAY_SIZE(cpu_clk_generic);
-+}
-+
-+static inline int clk_good(struct clk *clk)
-+{
-+      return clk && !IS_ERR(clk);
-+}
-+
-+unsigned long clk_get_rate(struct clk *clk)
-+{
-+      if (unlikely(!clk_good(clk)))
-+              return 0;
-+
-+      if (clk->rate != 0)
-+              return clk->rate;
-+
-+      if (clk->get_rate != NULL)
-+              return clk->get_rate();
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(clk_get_rate);
-+
-+struct clk *clk_get(struct device *dev, const char *id)
-+{
-+      int i;
-+
-+      for (i = 0; i < cpu_clk_cnt; i++)
-+              if (!strcmp(id, cpu_clk[i].name))
-+                      return &cpu_clk[i];
-+      BUG();
-+      return ERR_PTR(-ENOENT);
-+}
-+EXPORT_SYMBOL(clk_get);
-+
-+void clk_put(struct clk *clk)
-+{
-+      /* not used */
-+}
-+EXPORT_SYMBOL(clk_put);
-+
-+static inline u32 ltq_get_counter_resolution(void)
-+{
-+      u32 res;
-+
-+      __asm__ __volatile__(
-+              ".set   push\n"
-+              ".set   mips32r2\n"
-+              "rdhwr  %0, $3\n"
-+              ".set pop\n"
-+              : "=&r" (res)
-+              : /* no input */
-+              : "memory");
-+
-+      return res;
-+}
-+
-+void __init plat_time_init(void)
-+{
-+      struct clk *clk;
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+      if (insert_resource(&iomem_resource, &ltq_cgu_resource) < 0)
-+              panic("Failed to insert cgu memory\n");
-+
-+      if (request_mem_region(ltq_cgu_resource.start,
-+                      resource_size(&ltq_cgu_resource), "cgu") < 0)
-+              panic("Failed to request cgu memory\n");
-+
-+      ltq_cgu_membase = ioremap_nocache(ltq_cgu_resource.start,
-+                              resource_size(&ltq_cgu_resource));
-+      if (!ltq_cgu_membase) {
-+              pr_err("Failed to remap cgu memory\n");
-+              unreachable();
-+      }
-+#endif
-+      clk = clk_get(0, "cpu");
-+      mips_hpt_frequency = clk_get_rate(clk) / ltq_get_counter_resolution();
-+      write_c0_compare(read_c0_count());
-+      clk_put(clk);
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/clk.h
-@@ -0,0 +1,18 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_CLK_H__
-+#define _LTQ_CLK_H__
-+
-+extern void clk_init(void);
-+
-+extern unsigned long ltq_get_cpu_hz(void);
-+extern unsigned long ltq_get_fpi_hz(void);
-+extern unsigned long ltq_get_io_region_clock(void);
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/lantiq/early_printk.c
-@@ -0,0 +1,37 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/cpu.h>
-+
-+#include <lantiq.h>
-+#include <lantiq_soc.h>
-+
-+/* no ioremap possible at this early stage, lets use KSEG1 instead  */
-+#ifdef CONFIG_SOC_FALCON
-+#define LTQ_ASC_BASE  KSEG1ADDR(LTQ_ASC0_BASE_ADDR)
-+#else
-+#define LTQ_ASC_BASE  KSEG1ADDR(LTQ_ASC1_BASE_ADDR)
-+#endif
-+#define ASC_BUF               1024
-+#define LTQ_ASC_FSTAT ((u32 *)(LTQ_ASC_BASE + 0x0048))
-+#define LTQ_ASC_TBUF  ((u32 *)(LTQ_ASC_BASE + 0x0020))
-+#define TXMASK                0x3F00
-+#define TXOFFSET      8
-+
-+void prom_putchar(char c)
-+{
-+      unsigned long flags;
-+
-+      local_irq_save(flags);
-+      do { } while ((ltq_r32(LTQ_ASC_FSTAT) & TXMASK) >> TXOFFSET);
-+      if (c == '\n')
-+              ltq_w32('\r', LTQ_ASC_TBUF);
-+      ltq_w32(c, LTQ_ASC_TBUF);
-+      local_irq_restore(flags);
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/irq.c
-@@ -0,0 +1,353 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ * Copyright (C) 2010 Thomas Langer <thomas.langer@lantiq.com>
-+ */
-+
-+#include <linux/interrupt.h>
-+#include <linux/ioport.h>
-+#include <linux/module.h>
-+
-+#include <asm/bootinfo.h>
-+#include <asm/irq_cpu.h>
-+
-+#include <lantiq_soc.h>
-+#include <irq.h>
-+
-+/* register definitions */
-+#define LTQ_ICU_IM0_ISR               0x0000
-+#define LTQ_ICU_IM0_IER               0x0008
-+#define LTQ_ICU_IM0_IOSR      0x0010
-+#define LTQ_ICU_IM0_IRSR      0x0018
-+#define LTQ_ICU_IM0_IMR               0x0020
-+#define LTQ_ICU_IM1_ISR               0x0028
-+#define LTQ_ICU_OFFSET                (LTQ_ICU_IM1_ISR - LTQ_ICU_IM0_ISR)
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+
-+#define LTQ_EIU_EXIN_C                0x0000
-+#define LTQ_EIU_EXIN_INIC     0x0004
-+#define LTQ_EIU_EXIN_INEN     0x000C
-+
-+/* irq numbers used by the external interrupt unit (EIU) */
-+#define LTQ_EIU_IR0           (INT_NUM_IM4_IRL0 + 30)
-+#define LTQ_EIU_IR1           (INT_NUM_IM3_IRL0 + 31)
-+#define LTQ_EIU_IR2           (INT_NUM_IM1_IRL0 + 26)
-+#define LTQ_EIU_IR3           INT_NUM_IM1_IRL0
-+#define LTQ_EIU_IR4           (INT_NUM_IM1_IRL0 + 1)
-+#define LTQ_EIU_IR5           (INT_NUM_IM1_IRL0 + 2)
-+#define LTQ_EIU_IR6           (INT_NUM_IM2_IRL0 + 30)
-+
-+#define MAX_EIU                       6
-+
-+/* irqs generated by device attached to the EBU need to be acked in
-+ * a special manner
-+ */
-+#define LTQ_ICU_EBU_IRQ               22
-+
-+#define ltq_eiu_w32(x, y)     ltq_w32((x), ltq_eiu_membase + (y))
-+#define ltq_eiu_r32(x)                ltq_r32(ltq_eiu_membase + (x))
-+
-+static unsigned short ltq_eiu_irq[MAX_EIU] = {
-+      LTQ_EIU_IR0,
-+      LTQ_EIU_IR1,
-+      LTQ_EIU_IR2,
-+      LTQ_EIU_IR3,
-+      LTQ_EIU_IR4,
-+      LTQ_EIU_IR5,
-+};
-+
-+static void __iomem *ltq_eiu_membase;
-+
-+static struct resource ltq_eiu_resource = {
-+      .name   = "eiu",
-+      .start  = LTQ_EIU_BASE_ADDR,
-+      .end    = LTQ_EIU_BASE_ADDR + LTQ_ICU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+#endif
-+
-+static struct resource ltq_icu_resource = {
-+      .name   = "icu",
-+      .start  = LTQ_ICU_BASE_ADDR,
-+      .end    = LTQ_ICU_BASE_ADDR + LTQ_ICU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+#define ltq_icu_w32(x, y)     ltq_w32((x), ltq_icu_membase + (y))
-+#define ltq_icu_r32(x)                ltq_r32(ltq_icu_membase + (x))
-+
-+static void __iomem *ltq_icu_membase;
-+
-+void
-+ltq_disable_irq(unsigned int irq_nr)
-+{
-+      u32 ier = LTQ_ICU_IM0_IER;
-+
-+      irq_nr -= INT_NUM_IRQ0;
-+      ier += LTQ_ICU_OFFSET * (irq_nr / INT_NUM_IM_OFFSET);
-+      irq_nr %= INT_NUM_IM_OFFSET;
-+      ltq_icu_w32(ltq_icu_r32(ier) & ~(1 << irq_nr), ier);
-+}
-+
-+void
-+ltq_mask_and_ack_irq(unsigned int irq_nr)
-+{
-+      u32 ier = LTQ_ICU_IM0_IER;
-+      u32 isr = LTQ_ICU_IM0_ISR;
-+
-+      irq_nr -= INT_NUM_IRQ0;
-+      ier += LTQ_ICU_OFFSET * (irq_nr / INT_NUM_IM_OFFSET);
-+      isr += LTQ_ICU_OFFSET * (irq_nr / INT_NUM_IM_OFFSET);
-+      irq_nr %= INT_NUM_IM_OFFSET;
-+      ltq_icu_w32(ltq_icu_r32(ier) & ~(1 << irq_nr), ier);
-+      ltq_icu_w32((1 << irq_nr), isr);
-+}
-+EXPORT_SYMBOL(ltq_mask_and_ack_irq);
-+
-+static void
-+ltq_ack_irq(unsigned int irq_nr)
-+{
-+      u32 isr = LTQ_ICU_IM0_ISR;
-+
-+      irq_nr -= INT_NUM_IRQ0;
-+      isr += LTQ_ICU_OFFSET * (irq_nr / INT_NUM_IM_OFFSET);
-+      irq_nr %= INT_NUM_IM_OFFSET;
-+      ltq_icu_w32((1 << irq_nr), isr);
-+}
-+
-+void
-+ltq_enable_irq(unsigned int irq_nr)
-+{
-+      u32 ier = LTQ_ICU_IM0_IER;
-+
-+      irq_nr -= INT_NUM_IRQ0;
-+      ier += LTQ_ICU_OFFSET  * (irq_nr / INT_NUM_IM_OFFSET);
-+      irq_nr %= INT_NUM_IM_OFFSET;
-+      ltq_icu_w32(ltq_icu_r32(ier) | (1 << irq_nr), ier);
-+}
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+static unsigned int
-+ltq_startup_eiu_irq(unsigned int irq)
-+{
-+      int i;
-+
-+      ltq_enable_irq(irq);
-+      for (i = 0; i < MAX_EIU; i++) {
-+              if (irq == ltq_eiu_irq[i]) {
-+                      /* low level - we should really handle set_type */
-+                      ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_C) | (0x6 << (i * 4)),
-+                              LTQ_EIU_EXIN_C);
-+                      /* clear all pending */
-+                      ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_INIC) & ~(1 << i),
-+                              LTQ_EIU_EXIN_INIC);
-+                      /* enable */
-+                      ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_INEN) | (1 << i),
-+                              LTQ_EIU_EXIN_INEN);
-+                      break;
-+              }
-+      }
-+      return 0;
-+}
-+
-+static void
-+ltq_shutdown_eiu_irq(unsigned int irq)
-+{
-+      int i;
-+
-+      ltq_disable_irq(irq);
-+      for (i = 0; i < MAX_EIU; i++) {
-+              if (irq == ltq_eiu_irq[i]) {
-+                      /* disable */
-+                      ltq_eiu_w32(ltq_eiu_r32(LTQ_EIU_EXIN_INEN) & ~(1 << i),
-+                      LTQ_EIU_EXIN_INEN);
-+                      break;
-+              }
-+      }
-+}
-+#endif
-+
-+static void
-+ltq_end_irq(unsigned int irq)
-+{
-+      if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-+              ltq_enable_irq(irq);
-+}
-+
-+static struct irq_chip
-+ltq_irq_type = {
-+      "ltq_irq",
-+      .enable = ltq_enable_irq,
-+      .disable = ltq_disable_irq,
-+      .unmask = ltq_enable_irq,
-+      .ack = ltq_ack_irq,
-+      .mask = ltq_disable_irq,
-+      .mask_ack = ltq_mask_and_ack_irq,
-+      .end = ltq_end_irq,
-+};
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+static struct irq_chip
-+ltq_eiu_type = {
-+      "ltq_eiu_irq",
-+      .startup = ltq_startup_eiu_irq,
-+      .shutdown = ltq_shutdown_eiu_irq,
-+      .enable = ltq_enable_irq,
-+      .disable = ltq_disable_irq,
-+      .unmask = ltq_enable_irq,
-+      .ack = ltq_ack_irq,
-+      .mask = ltq_disable_irq,
-+      .mask_ack = ltq_mask_and_ack_irq,
-+      .end = ltq_end_irq,
-+};
-+#endif
-+
-+static void ltq_hw_irqdispatch(int module)
-+{
-+      u32 irq;
-+
-+      irq = ltq_icu_r32(LTQ_ICU_IM0_IOSR + (module * LTQ_ICU_OFFSET));
-+      if (irq == 0)
-+              return;
-+
-+      /* silicon bug causes only the msb set to 1 to be valid. all
-+       * other bits might be bogus
-+       */
-+      irq = __fls(irq);
-+      do_IRQ((int)irq + INT_NUM_IM0_IRL0 + (INT_NUM_IM_OFFSET * module));
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+      /* if this is a EBU irq, we need to ack it or get a deadlock */
-+      if ((irq == LTQ_ICU_EBU_IRQ) && (module == 0))
-+              ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_ISTAT) | 0x10,
-+                      LTQ_EBU_PCC_ISTAT);
-+#endif
-+}
-+
-+#define DEFINE_HWx_IRQDISPATCH(x)                                     \
-+      static void ltq_hw ## x ## _irqdispatch(void)                   \
-+      {                                                               \
-+              ltq_hw_irqdispatch(x);                                  \
-+      }
-+DEFINE_HWx_IRQDISPATCH(0)
-+DEFINE_HWx_IRQDISPATCH(1)
-+DEFINE_HWx_IRQDISPATCH(2)
-+DEFINE_HWx_IRQDISPATCH(3)
-+DEFINE_HWx_IRQDISPATCH(4)
-+
-+static void ltq_hw5_irqdispatch(void)
-+{
-+      do_IRQ(MIPS_CPU_TIMER_IRQ);
-+}
-+
-+asmlinkage void plat_irq_dispatch(void)
-+{
-+      unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
-+      unsigned int i;
-+
-+      if (pending & CAUSEF_IP7) {
-+              do_IRQ(MIPS_CPU_TIMER_IRQ);
-+              goto out;
-+      } else {
-+              for (i = 0; i < 5; i++) {
-+                      if (pending & (CAUSEF_IP2 << i)) {
-+                              ltq_hw_irqdispatch(i);
-+                              goto out;
-+                      }
-+              }
-+      }
-+      pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
-+
-+out:
-+      return;
-+}
-+
-+static struct irqaction cascade = {
-+      .handler = no_action,
-+      .flags = IRQF_DISABLED,
-+      .name = "cascade",
-+};
-+
-+void __init arch_init_irq(void)
-+{
-+      int i;
-+
-+      if (insert_resource(&iomem_resource, &ltq_icu_resource) < 0)
-+              panic("Failed to insert icu memory\n");
-+
-+      if (request_mem_region(ltq_icu_resource.start,
-+                      resource_size(&ltq_icu_resource), "icu") < 0)
-+              panic("Failed to request icu memory\n");
-+
-+      ltq_icu_membase = ioremap_nocache(ltq_icu_resource.start,
-+                              resource_size(&ltq_icu_resource));
-+      if (!ltq_icu_membase)
-+              panic("Failed to remap icu memory\n");
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+      if (insert_resource(&iomem_resource, &ltq_eiu_resource) < 0)
-+              panic("Failed to insert eiu memory\n");
-+
-+      if (request_mem_region(ltq_eiu_resource.start,
-+                      resource_size(&ltq_eiu_resource), "eiu") < 0)
-+              panic("Failed to request eiu memory\n");
-+
-+      ltq_eiu_membase = ioremap_nocache(ltq_eiu_resource.start,
-+                              resource_size(&ltq_eiu_resource));
-+      if (!ltq_eiu_membase)
-+              panic("Failed to remap eiu memory\n");
-+#endif
-+      /* make sure all irqs are turned off by default */
-+      for (i = 0; i < 5; i++)
-+              ltq_icu_w32(0, LTQ_ICU_IM0_IER + (i * LTQ_ICU_OFFSET));
-+
-+      /* clear all possibly pending interrupts */
-+      ltq_icu_w32(~0, LTQ_ICU_IM0_ISR + (i * LTQ_ICU_OFFSET));
-+
-+      mips_cpu_irq_init();
-+
-+      for (i = 2; i <= 6; i++)
-+              setup_irq(i, &cascade);
-+
-+      if (cpu_has_vint) {
-+              pr_info("Setting up vectored interrupts\n");
-+              set_vi_handler(2, ltq_hw0_irqdispatch);
-+              set_vi_handler(3, ltq_hw1_irqdispatch);
-+              set_vi_handler(4, ltq_hw2_irqdispatch);
-+              set_vi_handler(5, ltq_hw3_irqdispatch);
-+              set_vi_handler(6, ltq_hw4_irqdispatch);
-+              set_vi_handler(7, ltq_hw5_irqdispatch);
-+      }
-+
-+      for (i = INT_NUM_IRQ0;
-+              i <= (INT_NUM_IRQ0 + (5 * INT_NUM_IM_OFFSET)); i++)
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+                      if ((i == LTQ_EIU_IR0) || (i == LTQ_EIU_IR1) || (i == LTQ_EIU_IR2))
-+                              set_irq_chip_and_handler(i, &ltq_eiu_type, handle_level_irq);
-+                      /* EIU3-5 only exist on ar9 and vr9 */
-+                      else if (((i == LTQ_EIU_IR3) || (i == LTQ_EIU_IR4) ||
-+                              (i == LTQ_EIU_IR5)) && (ltq_is_ar9() || ltq_is_vr9()))
-+                              set_irq_chip_and_handler(i, &ltq_eiu_type, handle_level_irq);
-+                      else
-+#endif
-+                              set_irq_chip_and_handler(i, &ltq_irq_type, handle_level_irq);
-+
-+#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
-+      set_c0_status(IE_IRQ0 | IE_IRQ1 | IE_IRQ2 |
-+              IE_IRQ3 | IE_IRQ4 | IE_IRQ5);
-+#else
-+      set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ0 | IE_IRQ1 |
-+              IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5);
-+#endif
-+      cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
-+}
-+
-+unsigned int __cpuinit get_c0_compare_int(void)
-+{
-+      return CP0_LEGACY_COMPARE_IRQ;
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/prom.c
-@@ -0,0 +1,71 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/clk.h>
-+#include <asm/bootinfo.h>
-+#include <asm/time.h>
-+
-+#include <lantiq.h>
-+
-+#include "prom.h"
-+#include "clk.h"
-+
-+static struct ltq_soc_info soc_info;
-+
-+unsigned int ltq_get_cpu_ver(void)
-+{
-+      return soc_info.rev;
-+}
-+EXPORT_SYMBOL(ltq_get_cpu_ver);
-+
-+unsigned int ltq_get_soc_type(void)
-+{
-+      return soc_info.type;
-+}
-+EXPORT_SYMBOL(ltq_get_soc_type);
-+
-+const char *get_system_type(void)
-+{
-+      return soc_info.sys_type;
-+}
-+
-+void prom_free_prom_memory(void)
-+{
-+}
-+
-+static void __init prom_init_cmdline(void)
-+{
-+      int argc = fw_arg0;
-+      char **argv = (char **) KSEG1ADDR(fw_arg1);
-+      int i;
-+
-+      for (i = 0; i < argc; i++) {
-+              char *p = (char *)  KSEG1ADDR(argv[i]);
-+
-+              if (p && *p) {
-+                      strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
-+                      strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
-+              }
-+      }
-+}
-+
-+void __init prom_init(void)
-+{
-+      struct clk *clk;
-+
-+      ltq_soc_detect(&soc_info);
-+      clk_init();
-+      clk = clk_get(0, "cpu");
-+      snprintf(soc_info.sys_type, LTQ_SYS_TYPE_LEN - 1, "%s rev1.%d",
-+              soc_info.name, soc_info.rev);
-+      clk_put(clk);
-+      soc_info.sys_type[LTQ_SYS_TYPE_LEN - 1] = '\0';
-+      pr_info("SoC: %s\n", soc_info.sys_type);
-+      prom_init_cmdline();
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/prom.h
-@@ -0,0 +1,24 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_PROM_H__
-+#define _LTQ_PROM_H__
-+
-+#define LTQ_SYS_TYPE_LEN      0x100
-+
-+struct ltq_soc_info {
-+      unsigned char *name;
-+      unsigned int rev;
-+      unsigned int partnum;
-+      unsigned int type;
-+      unsigned char sys_type[LTQ_SYS_TYPE_LEN];
-+};
-+
-+extern void ltq_soc_detect(struct ltq_soc_info *i);
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/lantiq/setup.c
-@@ -0,0 +1,41 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/io.h>
-+#include <linux/ioport.h>
-+#include <asm/bootinfo.h>
-+
-+#include <lantiq_soc.h>
-+
-+void __init plat_mem_setup(void)
-+{
-+      /* assume 16M as default incase uboot fails to pass proper ramsize */
-+      unsigned long memsize = 16;
-+      char **envp = (char **) KSEG1ADDR(fw_arg2);
-+
-+      ioport_resource.start = IOPORT_RESOURCE_START;
-+      ioport_resource.end = IOPORT_RESOURCE_END;
-+      iomem_resource.start = IOMEM_RESOURCE_START;
-+      iomem_resource.end = IOMEM_RESOURCE_END;
-+
-+      set_io_port_base((unsigned long) KSEG1);
-+
-+      while (*envp) {
-+              char *e = (char *)KSEG1ADDR(*envp);
-+              if (!strncmp(e, "memsize=", 8)) {
-+                      e += 8;
-+                      if (strict_strtoul(e, 0, &memsize))
-+                              pr_warn("bad memsize specified\n");
-+              }
-+              envp++;
-+      }
-+      memsize *= 1024 * 1024;
-+      add_memory_region(0x00000000, memsize, BOOT_MEM_RAM);
-+}
diff --git a/target/linux/lantiq/patches-2.6.32/0002-MIPS-Lantiq-add-SoC-specific-code-for-XWAY-family.patch b/target/linux/lantiq/patches-2.6.32/0002-MIPS-Lantiq-add-SoC-specific-code-for-XWAY-family.patch
deleted file mode 100644 (file)
index cb0058c..0000000
+++ /dev/null
@@ -1,1151 +0,0 @@
-From 36cc26a362c6ad64ba3d176809847ec60cc40859 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:48 +0200
-Subject: [PATCH 02/13] MIPS: Lantiq: add SoC specific code for XWAY family
-
-Add support for the Lantiq XWAY family of Mips24KEc SoCs.
-
-* Danube (PSB50702)
-* Twinpass (PSB4000)
-* AR9 (PSB50802)
-* Amazon SE (PSB5061)
-
-The Amazon SE is a lightweight SoC and has no PCI as well as a different
-clock. We split the code out into seperate files to handle this.
-
-The GPIO pins on the SoCs are multi function and there are several bits
-we can use to configure the pins. To be as compatible as possible to
-GPIOLIB we add a function
-
-int ltq_gpio_request(unsigned int pin, unsigned int alt0,
-        unsigned int alt1, unsigned int dir, const char *name);
-
-which lets you configure the 2 "alternate function" bits. This way drivers like
-PCI can make use of GPIOLIB without a cubersome wrapper.
-
-The PLL code inside arch/mips/lantiq/xway/clk-xway.c is voodoo to me. It was
-taken from a 2.4.20 source tree and was never really changed by me since then.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2249/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/Kconfig                                  |    1 +
- arch/mips/include/asm/mach-lantiq/xway/irq.h       |   18 ++
- .../mips/include/asm/mach-lantiq/xway/lantiq_irq.h |   66 ++++++
- .../mips/include/asm/mach-lantiq/xway/lantiq_soc.h |  140 ++++++++++++
- arch/mips/lantiq/Kconfig                           |   21 ++
- arch/mips/lantiq/Makefile                          |    2 +
- arch/mips/lantiq/Platform                          |    1 +
- arch/mips/lantiq/xway/Makefile                     |    4 +
- arch/mips/lantiq/xway/clk-ase.c                    |   48 +++++
- arch/mips/lantiq/xway/clk-xway.c                   |  223 ++++++++++++++++++++
- arch/mips/lantiq/xway/ebu.c                        |   53 +++++
- arch/mips/lantiq/xway/gpio.c                       |  195 +++++++++++++++++
- arch/mips/lantiq/xway/pmu.c                        |   70 ++++++
- arch/mips/lantiq/xway/prom-ase.c                   |   39 ++++
- arch/mips/lantiq/xway/prom-xway.c                  |   54 +++++
- arch/mips/lantiq/xway/reset.c                      |   91 ++++++++
- 16 files changed, 1026 insertions(+), 0 deletions(-)
- create mode 100644 arch/mips/include/asm/mach-lantiq/xway/irq.h
- create mode 100644 arch/mips/include/asm/mach-lantiq/xway/lantiq_irq.h
- create mode 100644 arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
- create mode 100644 arch/mips/lantiq/Kconfig
- create mode 100644 arch/mips/lantiq/xway/Makefile
- create mode 100644 arch/mips/lantiq/xway/clk-ase.c
- create mode 100644 arch/mips/lantiq/xway/clk-xway.c
- create mode 100644 arch/mips/lantiq/xway/ebu.c
- create mode 100644 arch/mips/lantiq/xway/gpio.c
- create mode 100644 arch/mips/lantiq/xway/pmu.c
- create mode 100644 arch/mips/lantiq/xway/prom-ase.c
- create mode 100644 arch/mips/lantiq/xway/prom-xway.c
- create mode 100644 arch/mips/lantiq/xway/reset.c
-
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -694,6 +694,7 @@
- source "arch/mips/basler/excite/Kconfig"
- source "arch/mips/bcm63xx/Kconfig"
- source "arch/mips/jazz/Kconfig"
-+source "arch/mips/lantiq/Kconfig"
- source "arch/mips/lasat/Kconfig"
- source "arch/mips/pmc-sierra/Kconfig"
- source "arch/mips/sgi-ip27/Kconfig"
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/xway/irq.h
-@@ -0,0 +1,18 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef __LANTIQ_IRQ_H
-+#define __LANTIQ_IRQ_H
-+
-+#include <lantiq_irq.h>
-+
-+#define NR_IRQS 256
-+
-+#include_next <irq.h>
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_irq.h
-@@ -0,0 +1,66 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LANTIQ_XWAY_IRQ_H__
-+#define _LANTIQ_XWAY_IRQ_H__
-+
-+#define INT_NUM_IRQ0          8
-+#define INT_NUM_IM0_IRL0      (INT_NUM_IRQ0 + 0)
-+#define INT_NUM_IM1_IRL0      (INT_NUM_IRQ0 + 32)
-+#define INT_NUM_IM2_IRL0      (INT_NUM_IRQ0 + 64)
-+#define INT_NUM_IM3_IRL0      (INT_NUM_IRQ0 + 96)
-+#define INT_NUM_IM4_IRL0      (INT_NUM_IRQ0 + 128)
-+#define INT_NUM_IM_OFFSET     (INT_NUM_IM1_IRL0 - INT_NUM_IM0_IRL0)
-+
-+#define LTQ_ASC_TIR(x)                (INT_NUM_IM3_IRL0 + (x * 8))
-+#define LTQ_ASC_RIR(x)                (INT_NUM_IM3_IRL0 + (x * 8) + 1)
-+#define LTQ_ASC_EIR(x)                (INT_NUM_IM3_IRL0 + (x * 8) + 2)
-+
-+#define LTQ_ASC_ASE_TIR               INT_NUM_IM2_IRL0
-+#define LTQ_ASC_ASE_RIR               (INT_NUM_IM2_IRL0 + 2)
-+#define LTQ_ASC_ASE_EIR               (INT_NUM_IM2_IRL0 + 3)
-+
-+#define LTQ_SSC_TIR           (INT_NUM_IM0_IRL0 + 15)
-+#define LTQ_SSC_RIR           (INT_NUM_IM0_IRL0 + 14)
-+#define LTQ_SSC_EIR           (INT_NUM_IM0_IRL0 + 16)
-+
-+#define LTQ_MEI_DYING_GASP_INT        (INT_NUM_IM1_IRL0 + 21)
-+#define LTQ_MEI_INT           (INT_NUM_IM1_IRL0 + 23)
-+
-+#define LTQ_TIMER6_INT                (INT_NUM_IM1_IRL0 + 23)
-+#define LTQ_USB_INT           (INT_NUM_IM1_IRL0 + 22)
-+#define LTQ_USB_OC_INT                (INT_NUM_IM4_IRL0 + 23)
-+
-+#define MIPS_CPU_TIMER_IRQ            7
-+
-+#define LTQ_DMA_CH0_INT               (INT_NUM_IM2_IRL0)
-+#define LTQ_DMA_CH1_INT               (INT_NUM_IM2_IRL0 + 1)
-+#define LTQ_DMA_CH2_INT               (INT_NUM_IM2_IRL0 + 2)
-+#define LTQ_DMA_CH3_INT               (INT_NUM_IM2_IRL0 + 3)
-+#define LTQ_DMA_CH4_INT               (INT_NUM_IM2_IRL0 + 4)
-+#define LTQ_DMA_CH5_INT               (INT_NUM_IM2_IRL0 + 5)
-+#define LTQ_DMA_CH6_INT               (INT_NUM_IM2_IRL0 + 6)
-+#define LTQ_DMA_CH7_INT               (INT_NUM_IM2_IRL0 + 7)
-+#define LTQ_DMA_CH8_INT               (INT_NUM_IM2_IRL0 + 8)
-+#define LTQ_DMA_CH9_INT               (INT_NUM_IM2_IRL0 + 9)
-+#define LTQ_DMA_CH10_INT      (INT_NUM_IM2_IRL0 + 10)
-+#define LTQ_DMA_CH11_INT      (INT_NUM_IM2_IRL0 + 11)
-+#define LTQ_DMA_CH12_INT      (INT_NUM_IM2_IRL0 + 25)
-+#define LTQ_DMA_CH13_INT      (INT_NUM_IM2_IRL0 + 26)
-+#define LTQ_DMA_CH14_INT      (INT_NUM_IM2_IRL0 + 27)
-+#define LTQ_DMA_CH15_INT      (INT_NUM_IM2_IRL0 + 28)
-+#define LTQ_DMA_CH16_INT      (INT_NUM_IM2_IRL0 + 29)
-+#define LTQ_DMA_CH17_INT      (INT_NUM_IM2_IRL0 + 30)
-+#define LTQ_DMA_CH18_INT      (INT_NUM_IM2_IRL0 + 16)
-+#define LTQ_DMA_CH19_INT      (INT_NUM_IM2_IRL0 + 21)
-+
-+#define LTQ_PPE_MBOX_INT      (INT_NUM_IM2_IRL0 + 24)
-+
-+#define INT_NUM_IM4_IRL14     (INT_NUM_IM4_IRL0 + 14)
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-@@ -0,0 +1,140 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_XWAY_H__
-+#define _LTQ_XWAY_H__
-+
-+#ifdef CONFIG_SOC_TYPE_XWAY
-+
-+#include <lantiq.h>
-+
-+/* Chip IDs */
-+#define SOC_ID_DANUBE1                0x129
-+#define SOC_ID_DANUBE2                0x12B
-+#define SOC_ID_TWINPASS               0x12D
-+#define SOC_ID_AMAZON_SE      0x152
-+#define SOC_ID_ARX188         0x16C
-+#define SOC_ID_ARX168         0x16D
-+#define SOC_ID_ARX182         0x16F
-+
-+/* SoC Types */
-+#define SOC_TYPE_DANUBE               0x01
-+#define SOC_TYPE_TWINPASS     0x02
-+#define SOC_TYPE_AR9          0x03
-+#define SOC_TYPE_VR9          0x04
-+#define SOC_TYPE_AMAZON_SE    0x05
-+
-+/* ASC0/1 - serial port */
-+#define LTQ_ASC0_BASE_ADDR    0x1E100400
-+#define LTQ_ASC1_BASE_ADDR    0x1E100C00
-+#define LTQ_ASC_SIZE          0x400
-+
-+/* RCU - reset control unit */
-+#define LTQ_RCU_BASE_ADDR     0x1F203000
-+#define LTQ_RCU_SIZE          0x1000
-+
-+/* GPTU - general purpose timer unit */
-+#define LTQ_GPTU_BASE_ADDR    0x18000300
-+#define LTQ_GPTU_SIZE         0x100
-+
-+/* EBU - external bus unit */
-+#define LTQ_EBU_GPIO_START    0x14000000
-+#define LTQ_EBU_GPIO_SIZE     0x1000
-+
-+#define LTQ_EBU_BASE_ADDR     0x1E105300
-+#define LTQ_EBU_SIZE          0x100
-+
-+#define LTQ_EBU_BUSCON0               0x0060
-+#define LTQ_EBU_PCC_CON               0x0090
-+#define LTQ_EBU_PCC_IEN               0x00A4
-+#define LTQ_EBU_PCC_ISTAT     0x00A0
-+#define LTQ_EBU_BUSCON1               0x0064
-+#define LTQ_EBU_ADDRSEL1      0x0024
-+#define EBU_WRDIS             0x80000000
-+
-+/* CGU - clock generation unit */
-+#define LTQ_CGU_BASE_ADDR     0x1F103000
-+#define LTQ_CGU_SIZE          0x1000
-+
-+/* ICU - interrupt control unit */
-+#define LTQ_ICU_BASE_ADDR     0x1F880200
-+#define LTQ_ICU_SIZE          0x100
-+
-+/* EIU - external interrupt unit */
-+#define LTQ_EIU_BASE_ADDR     0x1F101000
-+#define LTQ_EIU_SIZE          0x1000
-+
-+/* PMU - power management unit */
-+#define LTQ_PMU_BASE_ADDR     0x1F102000
-+#define LTQ_PMU_SIZE          0x1000
-+
-+#define PMU_DMA                       0x0020
-+#define PMU_USB                       0x8041
-+#define PMU_LED                       0x0800
-+#define PMU_GPT                       0x1000
-+#define PMU_PPE                       0x2000
-+#define PMU_FPI                       0x4000
-+#define PMU_SWITCH            0x10000000
-+
-+/* ETOP - ethernet */
-+#define LTQ_PPE32_BASE_ADDR   0xBE180000
-+#define LTQ_PPE32_SIZE                0x40000
-+
-+/* DMA */
-+#define LTQ_DMA_BASE_ADDR     0xBE104100
-+
-+/* PCI */
-+#define PCI_CR_BASE_ADDR      0x1E105400
-+#define PCI_CR_SIZE           0x400
-+
-+/* WDT */
-+#define LTQ_WDT_BASE_ADDR     0x1F8803F0
-+#define LTQ_WDT_SIZE          0x10
-+
-+/* STP - serial to parallel conversion unit */
-+#define LTQ_STP_BASE_ADDR     0x1E100BB0
-+#define LTQ_STP_SIZE          0x40
-+
-+/* GPIO */
-+#define LTQ_GPIO0_BASE_ADDR   0x1E100B10
-+#define LTQ_GPIO1_BASE_ADDR   0x1E100B40
-+#define LTQ_GPIO2_BASE_ADDR   0x1E100B70
-+#define LTQ_GPIO_SIZE         0x30
-+
-+/* SSC */
-+#define LTQ_SSC_BASE_ADDR     0x1e100800
-+#define LTQ_SSC_SIZE          0x100
-+
-+/* MEI - dsl core */
-+#define LTQ_MEI_BASE_ADDR     0x1E116000
-+
-+/* DEU - data encryption unit */
-+#define LTQ_DEU_BASE_ADDR     0x1E103100
-+
-+/* MPS - multi processor unit (voice) */
-+#define LTQ_MPS_BASE_ADDR     (KSEG1 + 0x1F107000)
-+#define LTQ_MPS_CHIPID                ((u32 *)(LTQ_MPS_BASE_ADDR + 0x0344))
-+
-+/* request a non-gpio and set the PIO config */
-+extern int  ltq_gpio_request(unsigned int pin, unsigned int alt0,
-+      unsigned int alt1, unsigned int dir, const char *name);
-+extern void ltq_pmu_enable(unsigned int module);
-+extern void ltq_pmu_disable(unsigned int module);
-+
-+static inline int ltq_is_ar9(void)
-+{
-+      return (ltq_get_soc_type() == SOC_TYPE_AR9);
-+}
-+
-+static inline int ltq_is_vr9(void)
-+{
-+      return (ltq_get_soc_type() == SOC_TYPE_VR9);
-+}
-+
-+#endif /* CONFIG_SOC_TYPE_XWAY */
-+#endif /* _LTQ_XWAY_H__ */
---- /dev/null
-+++ b/arch/mips/lantiq/Kconfig
-@@ -0,0 +1,21 @@
-+if LANTIQ
-+
-+config SOC_TYPE_XWAY
-+      bool
-+      default n
-+
-+choice
-+      prompt "SoC Type"
-+      default SOC_XWAY
-+
-+config SOC_AMAZON_SE
-+      bool "Amazon SE"
-+      select SOC_TYPE_XWAY
-+
-+config SOC_XWAY
-+      bool "XWAY"
-+      select SOC_TYPE_XWAY
-+      select HW_HAS_PCI
-+endchoice
-+
-+endif
---- a/arch/mips/lantiq/Makefile
-+++ b/arch/mips/lantiq/Makefile
-@@ -7,3 +7,5 @@
- obj-y := irq.o setup.o clk.o prom.o
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-+
-+obj-$(CONFIG_SOC_TYPE_XWAY) += xway/
---- a/arch/mips/lantiq/Platform
-+++ b/arch/mips/lantiq/Platform
-@@ -5,3 +5,4 @@
- platform-$(CONFIG_LANTIQ)     += lantiq/
- cflags-$(CONFIG_LANTIQ)               += -I$(srctree)/arch/mips/include/asm/mach-lantiq
- load-$(CONFIG_LANTIQ)         = 0xffffffff80002000
-+cflags-$(CONFIG_SOC_TYPE_XWAY)        += -I$(srctree)/arch/mips/include/asm/mach-lantiq/xway
---- /dev/null
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -0,0 +1,4 @@
-+obj-y := pmu.o ebu.o reset.o gpio.o
-+
-+obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o
-+obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o
---- /dev/null
-+++ b/arch/mips/lantiq/xway/clk-ase.c
-@@ -0,0 +1,48 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/io.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/clk.h>
-+
-+#include <asm/time.h>
-+#include <asm/irq.h>
-+#include <asm/div64.h>
-+
-+#include <lantiq_soc.h>
-+
-+/* cgu registers */
-+#define LTQ_CGU_SYS   0x0010
-+
-+unsigned int ltq_get_io_region_clock(void)
-+{
-+      return CLOCK_133M;
-+}
-+EXPORT_SYMBOL(ltq_get_io_region_clock);
-+
-+unsigned int ltq_get_fpi_bus_clock(int fpi)
-+{
-+      return CLOCK_133M;
-+}
-+EXPORT_SYMBOL(ltq_get_fpi_bus_clock);
-+
-+unsigned int ltq_get_cpu_hz(void)
-+{
-+      if (ltq_cgu_r32(LTQ_CGU_SYS) & (1 << 5))
-+              return CLOCK_266M;
-+      else
-+              return CLOCK_133M;
-+}
-+EXPORT_SYMBOL(ltq_get_cpu_hz);
-+
-+unsigned int ltq_get_fpi_hz(void)
-+{
-+      return CLOCK_133M;
-+}
-+EXPORT_SYMBOL(ltq_get_fpi_hz);
---- /dev/null
-+++ b/arch/mips/lantiq/xway/clk-xway.c
-@@ -0,0 +1,223 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/io.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/clk.h>
-+
-+#include <asm/time.h>
-+#include <asm/irq.h>
-+#include <asm/div64.h>
-+
-+#include <lantiq_soc.h>
-+
-+static unsigned int ltq_ram_clocks[] = {
-+      CLOCK_167M, CLOCK_133M, CLOCK_111M, CLOCK_83M };
-+#define DDR_HZ ltq_ram_clocks[ltq_cgu_r32(LTQ_CGU_SYS) & 0x3]
-+
-+#define BASIC_FREQUENCY_1     35328000
-+#define BASIC_FREQUENCY_2     36000000
-+#define BASIS_REQUENCY_USB    12000000
-+
-+#define GET_BITS(x, msb, lsb) \
-+      (((x) & ((1 << ((msb) + 1)) - 1)) >> (lsb))
-+
-+#define LTQ_CGU_PLL0_CFG      0x0004
-+#define LTQ_CGU_PLL1_CFG      0x0008
-+#define LTQ_CGU_PLL2_CFG      0x000C
-+#define LTQ_CGU_SYS           0x0010
-+#define LTQ_CGU_UPDATE                0x0014
-+#define LTQ_CGU_IF_CLK                0x0018
-+#define LTQ_CGU_OSC_CON               0x001C
-+#define LTQ_CGU_SMD           0x0020
-+#define LTQ_CGU_CT1SR         0x0028
-+#define LTQ_CGU_CT2SR         0x002C
-+#define LTQ_CGU_PCMCR         0x0030
-+#define LTQ_CGU_PCI_CR                0x0034
-+#define LTQ_CGU_PD_PC         0x0038
-+#define LTQ_CGU_FMR           0x003C
-+
-+#define CGU_PLL0_PHASE_DIVIDER_ENABLE \
-+      (ltq_cgu_r32(LTQ_CGU_PLL0_CFG) & (1 << 31))
-+#define CGU_PLL0_BYPASS                       \
-+      (ltq_cgu_r32(LTQ_CGU_PLL0_CFG) & (1 << 30))
-+#define CGU_PLL0_CFG_DSMSEL           \
-+      (ltq_cgu_r32(LTQ_CGU_PLL0_CFG) & (1 << 28))
-+#define CGU_PLL0_CFG_FRAC_EN          \
-+      (ltq_cgu_r32(LTQ_CGU_PLL0_CFG) & (1 << 27))
-+#define CGU_PLL1_SRC                  \
-+      (ltq_cgu_r32(LTQ_CGU_PLL1_CFG) & (1 << 31))
-+#define CGU_PLL2_PHASE_DIVIDER_ENABLE \
-+      (ltq_cgu_r32(LTQ_CGU_PLL2_CFG) & (1 << 20))
-+#define CGU_SYS_FPI_SEL                       (1 << 6)
-+#define CGU_SYS_DDR_SEL                       0x3
-+#define CGU_PLL0_SRC                  (1 << 29)
-+
-+#define CGU_PLL0_CFG_PLLK     GET_BITS(ltq_cgu_r32(LTQ_CGU_PLL0_CFG), 26, 17)
-+#define CGU_PLL0_CFG_PLLN     GET_BITS(ltq_cgu_r32(LTQ_CGU_PLL0_CFG), 12, 6)
-+#define CGU_PLL0_CFG_PLLM     GET_BITS(ltq_cgu_r32(LTQ_CGU_PLL0_CFG), 5, 2)
-+#define CGU_PLL2_SRC          GET_BITS(ltq_cgu_r32(LTQ_CGU_PLL2_CFG), 18, 17)
-+#define CGU_PLL2_CFG_INPUT_DIV        GET_BITS(ltq_cgu_r32(LTQ_CGU_PLL2_CFG), 16, 13)
-+
-+static unsigned int ltq_get_pll0_fdiv(void);
-+
-+static inline unsigned int get_input_clock(int pll)
-+{
-+      switch (pll) {
-+      case 0:
-+              if (ltq_cgu_r32(LTQ_CGU_PLL0_CFG) & CGU_PLL0_SRC)
-+                      return BASIS_REQUENCY_USB;
-+              else if (CGU_PLL0_PHASE_DIVIDER_ENABLE)
-+                      return BASIC_FREQUENCY_1;
-+              else
-+                      return BASIC_FREQUENCY_2;
-+      case 1:
-+              if (CGU_PLL1_SRC)
-+                      return BASIS_REQUENCY_USB;
-+              else if (CGU_PLL0_PHASE_DIVIDER_ENABLE)
-+                      return BASIC_FREQUENCY_1;
-+              else
-+                      return BASIC_FREQUENCY_2;
-+      case 2:
-+              switch (CGU_PLL2_SRC) {
-+              case 0:
-+                      return ltq_get_pll0_fdiv();
-+              case 1:
-+                      return CGU_PLL2_PHASE_DIVIDER_ENABLE ?
-+                              BASIC_FREQUENCY_1 :
-+                              BASIC_FREQUENCY_2;
-+              case 2:
-+                      return BASIS_REQUENCY_USB;
-+              }
-+      default:
-+              return 0;
-+      }
-+}
-+
-+static inline unsigned int cal_dsm(int pll, unsigned int num, unsigned int den)
-+{
-+      u64 res, clock = get_input_clock(pll);
-+
-+      res = num * clock;
-+      do_div(res, den);
-+      return res;
-+}
-+
-+static inline unsigned int mash_dsm(int pll, unsigned int M, unsigned int N,
-+      unsigned int K)
-+{
-+      unsigned int num = ((N + 1) << 10) + K;
-+      unsigned int den = (M + 1) << 10;
-+
-+      return cal_dsm(pll, num, den);
-+}
-+
-+static inline unsigned int ssff_dsm_1(int pll, unsigned int M, unsigned int N,
-+      unsigned int K)
-+{
-+      unsigned int num = ((N + 1) << 11) + K + 512;
-+      unsigned int den = (M + 1) << 11;
-+
-+      return cal_dsm(pll, num, den);
-+}
-+
-+static inline unsigned int ssff_dsm_2(int pll, unsigned int M, unsigned int N,
-+      unsigned int K)
-+{
-+      unsigned int num = K >= 512 ?
-+              ((N + 1) << 12) + K - 512 : ((N + 1) << 12) + K + 3584;
-+      unsigned int den = (M + 1) << 12;
-+
-+      return cal_dsm(pll, num, den);
-+}
-+
-+static inline unsigned int dsm(int pll, unsigned int M, unsigned int N,
-+      unsigned int K, unsigned int dsmsel, unsigned int phase_div_en)
-+{
-+      if (!dsmsel)
-+              return mash_dsm(pll, M, N, K);
-+      else if (!phase_div_en)
-+              return mash_dsm(pll, M, N, K);
-+      else
-+              return ssff_dsm_2(pll, M, N, K);
-+}
-+
-+static inline unsigned int ltq_get_pll0_fosc(void)
-+{
-+      if (CGU_PLL0_BYPASS)
-+              return get_input_clock(0);
-+      else
-+              return !CGU_PLL0_CFG_FRAC_EN
-+                      ? dsm(0, CGU_PLL0_CFG_PLLM, CGU_PLL0_CFG_PLLN, 0,
-+                              CGU_PLL0_CFG_DSMSEL,
-+                              CGU_PLL0_PHASE_DIVIDER_ENABLE)
-+                      : dsm(0, CGU_PLL0_CFG_PLLM, CGU_PLL0_CFG_PLLN,
-+                              CGU_PLL0_CFG_PLLK, CGU_PLL0_CFG_DSMSEL,
-+                              CGU_PLL0_PHASE_DIVIDER_ENABLE);
-+}
-+
-+static unsigned int ltq_get_pll0_fdiv(void)
-+{
-+      unsigned int div = CGU_PLL2_CFG_INPUT_DIV + 1;
-+
-+      return (ltq_get_pll0_fosc() + (div >> 1)) / div;
-+}
-+
-+unsigned int ltq_get_io_region_clock(void)
-+{
-+      unsigned int ret = ltq_get_pll0_fosc();
-+
-+      switch (ltq_cgu_r32(LTQ_CGU_PLL2_CFG) & CGU_SYS_DDR_SEL) {
-+      default:
-+      case 0:
-+              return (ret + 1) / 2;
-+      case 1:
-+              return (ret * 2 + 2) / 5;
-+      case 2:
-+              return (ret + 1) / 3;
-+      case 3:
-+              return (ret + 2) / 4;
-+      }
-+}
-+EXPORT_SYMBOL(ltq_get_io_region_clock);
-+
-+unsigned int ltq_get_fpi_bus_clock(int fpi)
-+{
-+      unsigned int ret = ltq_get_io_region_clock();
-+
-+      if ((fpi == 2) && (ltq_cgu_r32(LTQ_CGU_SYS) & CGU_SYS_FPI_SEL))
-+              ret >>= 1;
-+      return ret;
-+}
-+EXPORT_SYMBOL(ltq_get_fpi_bus_clock);
-+
-+unsigned int ltq_get_cpu_hz(void)
-+{
-+      switch (ltq_cgu_r32(LTQ_CGU_SYS) & 0xc) {
-+      case 0:
-+              return CLOCK_333M;
-+      case 4:
-+              return DDR_HZ;
-+      case 8:
-+              return DDR_HZ << 1;
-+      default:
-+              return DDR_HZ >> 1;
-+      }
-+}
-+EXPORT_SYMBOL(ltq_get_cpu_hz);
-+
-+unsigned int ltq_get_fpi_hz(void)
-+{
-+      unsigned int ddr_clock = DDR_HZ;
-+
-+      if (ltq_cgu_r32(LTQ_CGU_SYS) & 0x40)
-+              return ddr_clock >> 1;
-+      return ddr_clock;
-+}
-+EXPORT_SYMBOL(ltq_get_fpi_hz);
---- /dev/null
-+++ b/arch/mips/lantiq/xway/ebu.c
-@@ -0,0 +1,53 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  EBU - the external bus unit attaches PCI, NOR and NAND
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/ioport.h>
-+
-+#include <lantiq_soc.h>
-+
-+/* all access to the ebu must be locked */
-+DEFINE_SPINLOCK(ebu_lock);
-+EXPORT_SYMBOL_GPL(ebu_lock);
-+
-+static struct resource ltq_ebu_resource = {
-+      .name   = "ebu",
-+      .start  = LTQ_EBU_BASE_ADDR,
-+      .end    = LTQ_EBU_BASE_ADDR + LTQ_EBU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+/* remapped base addr of the clock unit and external bus unit */
-+void __iomem *ltq_ebu_membase;
-+
-+static int __init lantiq_ebu_init(void)
-+{
-+      /* insert and request the memory region */
-+      if (insert_resource(&iomem_resource, &ltq_ebu_resource) < 0)
-+              panic("Failed to insert ebu memory\n");
-+
-+      if (request_mem_region(ltq_ebu_resource.start,
-+                      resource_size(&ltq_ebu_resource), "ebu") < 0)
-+              panic("Failed to request ebu memory\n");
-+
-+      /* remap ebu register range */
-+      ltq_ebu_membase = ioremap_nocache(ltq_ebu_resource.start,
-+                              resource_size(&ltq_ebu_resource));
-+      if (!ltq_ebu_membase)
-+              panic("Failed to remap ebu memory\n");
-+
-+      /* make sure to unprotect the memory region where flash is located */
-+      ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_BUSCON0) & ~EBU_WRDIS, LTQ_EBU_BUSCON0);
-+      return 0;
-+}
-+
-+postcore_initcall(lantiq_ebu_init);
---- /dev/null
-+++ b/arch/mips/lantiq/xway/gpio.c
-@@ -0,0 +1,195 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/gpio.h>
-+#include <linux/ioport.h>
-+#include <linux/io.h>
-+
-+#include <lantiq_soc.h>
-+
-+#define LTQ_GPIO_OUT          0x00
-+#define LTQ_GPIO_IN           0x04
-+#define LTQ_GPIO_DIR          0x08
-+#define LTQ_GPIO_ALTSEL0      0x0C
-+#define LTQ_GPIO_ALTSEL1      0x10
-+#define LTQ_GPIO_OD           0x14
-+
-+#define PINS_PER_PORT         16
-+#define MAX_PORTS             3
-+
-+#define ltq_gpio_getbit(m, r, p)      (!!(ltq_r32(m + r) & (1 << p)))
-+#define ltq_gpio_setbit(m, r, p)      ltq_w32_mask(0, (1 << p), m + r)
-+#define ltq_gpio_clearbit(m, r, p)    ltq_w32_mask((1 << p), 0, m + r)
-+
-+struct ltq_gpio {
-+      void __iomem *membase;
-+      struct gpio_chip chip;
-+};
-+
-+static struct ltq_gpio ltq_gpio_port[MAX_PORTS];
-+
-+int gpio_to_irq(unsigned int gpio)
-+{
-+      return -EINVAL;
-+}
-+EXPORT_SYMBOL(gpio_to_irq);
-+
-+int irq_to_gpio(unsigned int gpio)
-+{
-+      return -EINVAL;
-+}
-+EXPORT_SYMBOL(irq_to_gpio);
-+
-+int ltq_gpio_request(unsigned int pin, unsigned int alt0,
-+      unsigned int alt1, unsigned int dir, const char *name)
-+{
-+      int id = 0;
-+
-+      if (pin >= (MAX_PORTS * PINS_PER_PORT))
-+              return -EINVAL;
-+      if (gpio_request(pin, name)) {
-+              pr_err("failed to setup lantiq gpio: %s\n", name);
-+              return -EBUSY;
-+      }
-+      if (dir)
-+              gpio_direction_output(pin, 1);
-+      else
-+              gpio_direction_input(pin);
-+      while (pin >= PINS_PER_PORT) {
-+              pin -= PINS_PER_PORT;
-+              id++;
-+      }
-+      if (alt0)
-+              ltq_gpio_setbit(ltq_gpio_port[id].membase,
-+                      LTQ_GPIO_ALTSEL0, pin);
-+      else
-+              ltq_gpio_clearbit(ltq_gpio_port[id].membase,
-+                      LTQ_GPIO_ALTSEL0, pin);
-+      if (alt1)
-+              ltq_gpio_setbit(ltq_gpio_port[id].membase,
-+                      LTQ_GPIO_ALTSEL1, pin);
-+      else
-+              ltq_gpio_clearbit(ltq_gpio_port[id].membase,
-+                      LTQ_GPIO_ALTSEL1, pin);
-+      return 0;
-+}
-+EXPORT_SYMBOL(ltq_gpio_request);
-+
-+static void ltq_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
-+{
-+      struct ltq_gpio *ltq_gpio = container_of(chip, struct ltq_gpio, chip);
-+
-+      if (value)
-+              ltq_gpio_setbit(ltq_gpio->membase, LTQ_GPIO_OUT, offset);
-+      else
-+              ltq_gpio_clearbit(ltq_gpio->membase, LTQ_GPIO_OUT, offset);
-+}
-+
-+static int ltq_gpio_get(struct gpio_chip *chip, unsigned int offset)
-+{
-+      struct ltq_gpio *ltq_gpio = container_of(chip, struct ltq_gpio, chip);
-+
-+      return ltq_gpio_getbit(ltq_gpio->membase, LTQ_GPIO_IN, offset);
-+}
-+
-+static int ltq_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
-+{
-+      struct ltq_gpio *ltq_gpio = container_of(chip, struct ltq_gpio, chip);
-+
-+      ltq_gpio_clearbit(ltq_gpio->membase, LTQ_GPIO_OD, offset);
-+      ltq_gpio_clearbit(ltq_gpio->membase, LTQ_GPIO_DIR, offset);
-+
-+      return 0;
-+}
-+
-+static int ltq_gpio_direction_output(struct gpio_chip *chip,
-+      unsigned int offset, int value)
-+{
-+      struct ltq_gpio *ltq_gpio = container_of(chip, struct ltq_gpio, chip);
-+
-+      ltq_gpio_setbit(ltq_gpio->membase, LTQ_GPIO_OD, offset);
-+      ltq_gpio_setbit(ltq_gpio->membase, LTQ_GPIO_DIR, offset);
-+      ltq_gpio_set(chip, offset, value);
-+
-+      return 0;
-+}
-+
-+static int ltq_gpio_req(struct gpio_chip *chip, unsigned offset)
-+{
-+      struct ltq_gpio *ltq_gpio = container_of(chip, struct ltq_gpio, chip);
-+
-+      ltq_gpio_clearbit(ltq_gpio->membase, LTQ_GPIO_ALTSEL0, offset);
-+      ltq_gpio_clearbit(ltq_gpio->membase, LTQ_GPIO_ALTSEL1, offset);
-+      return 0;
-+}
-+
-+static int ltq_gpio_probe(struct platform_device *pdev)
-+{
-+      struct resource *res;
-+
-+      if (pdev->id >= MAX_PORTS) {
-+              dev_err(&pdev->dev, "invalid gpio port %d\n",
-+                      pdev->id);
-+              return -EINVAL;
-+      }
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to get memory for gpio port %d\n",
-+                      pdev->id);
-+              return -ENOENT;
-+      }
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              resource_size(res), dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev,
-+                      "failed to request memory for gpio port %d\n",
-+                      pdev->id);
-+              return -EBUSY;
-+      }
-+      ltq_gpio_port[pdev->id].membase = devm_ioremap_nocache(&pdev->dev,
-+              res->start, resource_size(res));
-+      if (!ltq_gpio_port[pdev->id].membase) {
-+              dev_err(&pdev->dev, "failed to remap memory for gpio port %d\n",
-+                      pdev->id);
-+              return -ENOMEM;
-+      }
-+      ltq_gpio_port[pdev->id].chip.label = "ltq_gpio";
-+      ltq_gpio_port[pdev->id].chip.direction_input = ltq_gpio_direction_input;
-+      ltq_gpio_port[pdev->id].chip.direction_output =
-+              ltq_gpio_direction_output;
-+      ltq_gpio_port[pdev->id].chip.get = ltq_gpio_get;
-+      ltq_gpio_port[pdev->id].chip.set = ltq_gpio_set;
-+      ltq_gpio_port[pdev->id].chip.request = ltq_gpio_req;
-+      ltq_gpio_port[pdev->id].chip.base = PINS_PER_PORT * pdev->id;
-+      ltq_gpio_port[pdev->id].chip.ngpio = PINS_PER_PORT;
-+      platform_set_drvdata(pdev, &ltq_gpio_port[pdev->id]);
-+      return gpiochip_add(&ltq_gpio_port[pdev->id].chip);
-+}
-+
-+static struct platform_driver
-+ltq_gpio_driver = {
-+      .probe = ltq_gpio_probe,
-+      .driver = {
-+              .name = "ltq_gpio",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+int __init ltq_gpio_init(void)
-+{
-+      int ret = platform_driver_register(&ltq_gpio_driver);
-+
-+      if (ret)
-+              pr_info("ltq_gpio : Error registering platfom driver!");
-+      return ret;
-+}
-+
-+postcore_initcall(ltq_gpio_init);
---- /dev/null
-+++ b/arch/mips/lantiq/xway/pmu.c
-@@ -0,0 +1,70 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/ioport.h>
-+
-+#include <lantiq_soc.h>
-+
-+/* PMU - the power management unit allows us to turn part of the core
-+ * on and off
-+ */
-+
-+/* the enable / disable registers */
-+#define LTQ_PMU_PWDCR 0x1C
-+#define LTQ_PMU_PWDSR 0x20
-+
-+#define ltq_pmu_w32(x, y)     ltq_w32((x), ltq_pmu_membase + (y))
-+#define ltq_pmu_r32(x)                ltq_r32(ltq_pmu_membase + (x))
-+
-+static struct resource ltq_pmu_resource = {
-+      .name   = "pmu",
-+      .start  = LTQ_PMU_BASE_ADDR,
-+      .end    = LTQ_PMU_BASE_ADDR + LTQ_PMU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+static void __iomem *ltq_pmu_membase;
-+
-+void ltq_pmu_enable(unsigned int module)
-+{
-+      int err = 1000000;
-+
-+      ltq_pmu_w32(ltq_pmu_r32(LTQ_PMU_PWDCR) & ~module, LTQ_PMU_PWDCR);
-+      do {} while (--err && (ltq_pmu_r32(LTQ_PMU_PWDSR) & module));
-+
-+      if (!err)
-+              panic("activating PMU module failed!\n");
-+}
-+EXPORT_SYMBOL(ltq_pmu_enable);
-+
-+void ltq_pmu_disable(unsigned int module)
-+{
-+      ltq_pmu_w32(ltq_pmu_r32(LTQ_PMU_PWDCR) | module, LTQ_PMU_PWDCR);
-+}
-+EXPORT_SYMBOL(ltq_pmu_disable);
-+
-+int __init ltq_pmu_init(void)
-+{
-+      if (insert_resource(&iomem_resource, &ltq_pmu_resource) < 0)
-+              panic("Failed to insert pmu memory\n");
-+
-+      if (request_mem_region(ltq_pmu_resource.start,
-+                      resource_size(&ltq_pmu_resource), "pmu") < 0)
-+              panic("Failed to request pmu memory\n");
-+
-+      ltq_pmu_membase = ioremap_nocache(ltq_pmu_resource.start,
-+                              resource_size(&ltq_pmu_resource));
-+      if (!ltq_pmu_membase)
-+              panic("Failed to remap pmu memory\n");
-+      return 0;
-+}
-+
-+core_initcall(ltq_pmu_init);
---- /dev/null
-+++ b/arch/mips/lantiq/xway/prom-ase.c
-@@ -0,0 +1,39 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/clk.h>
-+#include <asm/bootinfo.h>
-+#include <asm/time.h>
-+
-+#include <lantiq_soc.h>
-+
-+#include "../prom.h"
-+
-+#define SOC_AMAZON_SE "Amazon_SE"
-+
-+#define PART_SHIFT    12
-+#define PART_MASK     0x0FFFFFFF
-+#define REV_SHIFT     28
-+#define REV_MASK      0xF0000000
-+
-+void __init ltq_soc_detect(struct ltq_soc_info *i)
-+{
-+      i->partnum = (ltq_r32(LTQ_MPS_CHIPID) & PART_MASK) >> PART_SHIFT;
-+      i->rev = (ltq_r32(LTQ_MPS_CHIPID) & REV_MASK) >> REV_SHIFT;
-+      switch (i->partnum) {
-+      case SOC_ID_AMAZON_SE:
-+              i->name = SOC_AMAZON_SE;
-+              i->type = SOC_TYPE_AMAZON_SE;
-+              break;
-+
-+      default:
-+              unreachable();
-+              break;
-+      }
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/xway/prom-xway.c
-@@ -0,0 +1,54 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/clk.h>
-+#include <asm/bootinfo.h>
-+#include <asm/time.h>
-+
-+#include <lantiq_soc.h>
-+
-+#include "../prom.h"
-+
-+#define SOC_DANUBE    "Danube"
-+#define SOC_TWINPASS  "Twinpass"
-+#define SOC_AR9               "AR9"
-+
-+#define PART_SHIFT    12
-+#define PART_MASK     0x0FFFFFFF
-+#define REV_SHIFT     28
-+#define REV_MASK      0xF0000000
-+
-+void __init ltq_soc_detect(struct ltq_soc_info *i)
-+{
-+      i->partnum = (ltq_r32(LTQ_MPS_CHIPID) & PART_MASK) >> PART_SHIFT;
-+      i->rev = (ltq_r32(LTQ_MPS_CHIPID) & REV_MASK) >> REV_SHIFT;
-+      switch (i->partnum) {
-+      case SOC_ID_DANUBE1:
-+      case SOC_ID_DANUBE2:
-+              i->name = SOC_DANUBE;
-+              i->type = SOC_TYPE_DANUBE;
-+              break;
-+
-+      case SOC_ID_TWINPASS:
-+              i->name = SOC_TWINPASS;
-+              i->type = SOC_TYPE_DANUBE;
-+              break;
-+
-+      case SOC_ID_ARX188:
-+      case SOC_ID_ARX168:
-+      case SOC_ID_ARX182:
-+              i->name = SOC_AR9;
-+              i->type = SOC_TYPE_AR9;
-+              break;
-+
-+      default:
-+              unreachable();
-+              break;
-+      }
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/xway/reset.c
-@@ -0,0 +1,91 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/io.h>
-+#include <linux/ioport.h>
-+#include <linux/pm.h>
-+#include <linux/module.h>
-+#include <asm/reboot.h>
-+
-+#include <lantiq_soc.h>
-+
-+#define ltq_rcu_w32(x, y)     ltq_w32((x), ltq_rcu_membase + (y))
-+#define ltq_rcu_r32(x)                ltq_r32(ltq_rcu_membase + (x))
-+
-+/* register definitions */
-+#define LTQ_RCU_RST           0x0010
-+#define LTQ_RCU_RST_ALL               0x40000000
-+
-+#define LTQ_RCU_RST_STAT      0x0014
-+#define LTQ_RCU_STAT_SHIFT    26
-+
-+static struct resource ltq_rcu_resource = {
-+      .name   = "rcu",
-+      .start  = LTQ_RCU_BASE_ADDR,
-+      .end    = LTQ_RCU_BASE_ADDR + LTQ_RCU_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+/* remapped base addr of the reset control unit */
-+static void __iomem *ltq_rcu_membase;
-+
-+/* This function is used by the watchdog driver */
-+int ltq_reset_cause(void)
-+{
-+      u32 val = ltq_rcu_r32(LTQ_RCU_RST_STAT);
-+      return val >> LTQ_RCU_STAT_SHIFT;
-+}
-+EXPORT_SYMBOL_GPL(ltq_reset_cause);
-+
-+static void ltq_machine_restart(char *command)
-+{
-+      pr_notice("System restart\n");
-+      local_irq_disable();
-+      ltq_rcu_w32(ltq_rcu_r32(LTQ_RCU_RST) | LTQ_RCU_RST_ALL, LTQ_RCU_RST);
-+      unreachable();
-+}
-+
-+static void ltq_machine_halt(void)
-+{
-+      pr_notice("System halted.\n");
-+      local_irq_disable();
-+      unreachable();
-+}
-+
-+static void ltq_machine_power_off(void)
-+{
-+      pr_notice("Please turn off the power now.\n");
-+      local_irq_disable();
-+      unreachable();
-+}
-+
-+static int __init mips_reboot_setup(void)
-+{
-+      /* insert and request the memory region */
-+      if (insert_resource(&iomem_resource, &ltq_rcu_resource) < 0)
-+              panic("Failed to insert rcu memory\n");
-+
-+      if (request_mem_region(ltq_rcu_resource.start,
-+                      resource_size(&ltq_rcu_resource), "rcu") < 0)
-+              panic("Failed to request rcu memory\n");
-+
-+      /* remap rcu register range */
-+      ltq_rcu_membase = ioremap_nocache(ltq_rcu_resource.start,
-+                              resource_size(&ltq_rcu_resource));
-+      if (!ltq_rcu_membase)
-+              panic("Failed to remap rcu memory\n");
-+
-+      _machine_restart = ltq_machine_restart;
-+      _machine_halt = ltq_machine_halt;
-+      pm_power_off = ltq_machine_power_off;
-+
-+      return 0;
-+}
-+
-+arch_initcall(mips_reboot_setup);
diff --git a/target/linux/lantiq/patches-2.6.32/0003-MIPS-Lantiq-Add-PCI-controller-support.patch b/target/linux/lantiq/patches-2.6.32/0003-MIPS-Lantiq-Add-PCI-controller-support.patch
deleted file mode 100644 (file)
index 1757266..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-From 08127ed36bad367903591bbf0f244179683ccb28 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:49 +0200
-Subject: [PATCH 03/13] MIPS: Lantiq: Add PCI controller support.
-
-The Lantiq family of SoCs have a EBU (External Bus Unit). This patch adds
-the driver that allows us to use the EBU as a PCI controller. In order for
-PCI to work the EBU is set to endianess swap all the data. In addition we
-need to make use of SWAP_IO_SPACE for device->host DMA to work.
-
-The clock of the PCI works in several modes (internal/external). If this
-is not configured correctly the SoC will hang.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2250/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- .../mips/include/asm/mach-lantiq/lantiq_platform.h |   46 +++
- arch/mips/pci/Makefile                             |    1 +
- arch/mips/pci/ops-lantiq.c                         |  116 ++++++++
- arch/mips/pci/pci-lantiq.c                         |  297 ++++++++++++++++++++
- arch/mips/pci/pci-lantiq.h                         |   18 ++
- 5 files changed, 478 insertions(+), 0 deletions(-)
- create mode 100644 arch/mips/include/asm/mach-lantiq/lantiq_platform.h
- create mode 100644 arch/mips/pci/ops-lantiq.c
- create mode 100644 arch/mips/pci/pci-lantiq.c
- create mode 100644 arch/mips/pci/pci-lantiq.h
-
-diff --git a/arch/mips/include/asm/mach-lantiq/lantiq_platform.h b/arch/mips/include/asm/mach-lantiq/lantiq_platform.h
-new file mode 100644
-index 0000000..1f1dba6
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/lantiq_platform.h
-@@ -0,0 +1,46 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LANTIQ_PLATFORM_H__
-+#define _LANTIQ_PLATFORM_H__
-+
-+#include <linux/mtd/partitions.h>
-+
-+/* struct used to pass info to the pci core */
-+enum {
-+      PCI_CLOCK_INT = 0,
-+      PCI_CLOCK_EXT
-+};
-+
-+#define PCI_EXIN0     0x0001
-+#define PCI_EXIN1     0x0002
-+#define PCI_EXIN2     0x0004
-+#define PCI_EXIN3     0x0008
-+#define PCI_EXIN4     0x0010
-+#define PCI_EXIN5     0x0020
-+#define PCI_EXIN_MAX  6
-+
-+#define PCI_GNT1      0x0040
-+#define PCI_GNT2      0x0080
-+#define PCI_GNT3      0x0100
-+#define PCI_GNT4      0x0200
-+
-+#define PCI_REQ1      0x0400
-+#define PCI_REQ2      0x0800
-+#define PCI_REQ3      0x1000
-+#define PCI_REQ4      0x2000
-+#define PCI_REQ_SHIFT 10
-+#define PCI_REQ_MASK  0xf
-+
-+struct ltq_pci_data {
-+      int clock;
-+      int gpio;
-+      int irq[16];
-+};
-+
-+#endif
-diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile
-index f0d5329..4df8799 100644
---- a/arch/mips/pci/Makefile
-+++ b/arch/mips/pci/Makefile
-@@ -41,6 +41,7 @@ obj-$(CONFIG_SIBYTE_SB1250)  += fixup-sb1250.o pci-sb1250.o
- obj-$(CONFIG_SIBYTE_BCM112X)  += fixup-sb1250.o pci-sb1250.o
- obj-$(CONFIG_SIBYTE_BCM1x80)  += pci-bcm1480.o pci-bcm1480ht.o
- obj-$(CONFIG_SNI_RM)          += fixup-sni.o ops-sni.o
-+obj-$(CONFIG_SOC_XWAY)                += pci-lantiq.o ops-lantiq.o
- obj-$(CONFIG_TANBAC_TB0219)   += fixup-tb0219.o
- obj-$(CONFIG_TANBAC_TB0226)   += fixup-tb0226.o
- obj-$(CONFIG_TANBAC_TB0287)   += fixup-tb0287.o
-diff --git a/arch/mips/pci/ops-lantiq.c b/arch/mips/pci/ops-lantiq.c
-new file mode 100644
-index 0000000..1f2afb5
---- /dev/null
-+++ b/arch/mips/pci/ops-lantiq.c
-@@ -0,0 +1,116 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/pci.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/mm.h>
-+#include <asm/addrspace.h>
-+#include <linux/vmalloc.h>
-+
-+#include <lantiq_soc.h>
-+
-+#include "pci-lantiq.h"
-+
-+#define LTQ_PCI_CFG_BUSNUM_SHF 16
-+#define LTQ_PCI_CFG_DEVNUM_SHF 11
-+#define LTQ_PCI_CFG_FUNNUM_SHF 8
-+
-+#define PCI_ACCESS_READ  0
-+#define PCI_ACCESS_WRITE 1
-+
-+static int ltq_pci_config_access(unsigned char access_type, struct pci_bus *bus,
-+      unsigned int devfn, unsigned int where, u32 *data)
-+{
-+      unsigned long cfg_base;
-+      unsigned long flags;
-+      u32 temp;
-+
-+      /* we support slot from 0 to 15 dev_fn & 0x68 (AD29) is the
-+         SoC itself */
-+      if ((bus->number != 0) || ((devfn & 0xf8) > 0x78)
-+              || ((devfn & 0xf8) == 0) || ((devfn & 0xf8) == 0x68))
-+              return 1;
-+
-+      spin_lock_irqsave(&ebu_lock, flags);
-+
-+      cfg_base = (unsigned long) ltq_pci_mapped_cfg;
-+      cfg_base |= (bus->number << LTQ_PCI_CFG_BUSNUM_SHF) | (devfn <<
-+                      LTQ_PCI_CFG_FUNNUM_SHF) | (where & ~0x3);
-+
-+      /* Perform access */
-+      if (access_type == PCI_ACCESS_WRITE) {
-+              ltq_w32(swab32(*data), ((u32 *)cfg_base));
-+      } else {
-+              *data = ltq_r32(((u32 *)(cfg_base)));
-+              *data = swab32(*data);
-+      }
-+      wmb();
-+
-+      /* clean possible Master abort */
-+      cfg_base = (unsigned long) ltq_pci_mapped_cfg;
-+      cfg_base |= (0x0 << LTQ_PCI_CFG_FUNNUM_SHF) + 4;
-+      temp = ltq_r32(((u32 *)(cfg_base)));
-+      temp = swab32(temp);
-+      cfg_base = (unsigned long) ltq_pci_mapped_cfg;
-+      cfg_base |= (0x68 << LTQ_PCI_CFG_FUNNUM_SHF) + 4;
-+      ltq_w32(temp, ((u32 *)cfg_base));
-+
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+
-+      if (((*data) == 0xffffffff) && (access_type == PCI_ACCESS_READ))
-+              return 1;
-+
-+      return 0;
-+}
-+
-+int ltq_pci_read_config_dword(struct pci_bus *bus, unsigned int devfn,
-+      int where, int size, u32 *val)
-+{
-+      u32 data = 0;
-+
-+      if (ltq_pci_config_access(PCI_ACCESS_READ, bus, devfn, where, &data))
-+              return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+      if (size == 1)
-+              *val = (data >> ((where & 3) << 3)) & 0xff;
-+      else if (size == 2)
-+              *val = (data >> ((where & 3) << 3)) & 0xffff;
-+      else
-+              *val = data;
-+
-+      return PCIBIOS_SUCCESSFUL;
-+}
-+
-+int ltq_pci_write_config_dword(struct pci_bus *bus, unsigned int devfn,
-+      int where, int size, u32 val)
-+{
-+      u32 data = 0;
-+
-+      if (size == 4) {
-+              data = val;
-+      } else {
-+              if (ltq_pci_config_access(PCI_ACCESS_READ, bus,
-+                              devfn, where, &data))
-+                      return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+              if (size == 1)
-+                      data = (data & ~(0xff << ((where & 3) << 3))) |
-+                              (val << ((where & 3) << 3));
-+              else if (size == 2)
-+                      data = (data & ~(0xffff << ((where & 3) << 3))) |
-+                              (val << ((where & 3) << 3));
-+      }
-+
-+      if (ltq_pci_config_access(PCI_ACCESS_WRITE, bus, devfn, where, &data))
-+              return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+      return PCIBIOS_SUCCESSFUL;
-+}
-diff --git a/arch/mips/pci/pci-lantiq.c b/arch/mips/pci/pci-lantiq.c
-new file mode 100644
-index 0000000..603d749
---- /dev/null
-+++ b/arch/mips/pci/pci-lantiq.c
-@@ -0,0 +1,297 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/pci.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/mm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/pci.h>
-+#include <asm/gpio.h>
-+#include <asm/addrspace.h>
-+
-+#include <lantiq_soc.h>
-+#include <lantiq_irq.h>
-+#include <lantiq_platform.h>
-+
-+#include "pci-lantiq.h"
-+
-+#define LTQ_PCI_CFG_BASE              0x17000000
-+#define LTQ_PCI_CFG_SIZE              0x00008000
-+#define LTQ_PCI_MEM_BASE              0x18000000
-+#define LTQ_PCI_MEM_SIZE              0x02000000
-+#define LTQ_PCI_IO_BASE                       0x1AE00000
-+#define LTQ_PCI_IO_SIZE                       0x00200000
-+
-+#define PCI_CR_FCI_ADDR_MAP0          0x00C0
-+#define PCI_CR_FCI_ADDR_MAP1          0x00C4
-+#define PCI_CR_FCI_ADDR_MAP2          0x00C8
-+#define PCI_CR_FCI_ADDR_MAP3          0x00CC
-+#define PCI_CR_FCI_ADDR_MAP4          0x00D0
-+#define PCI_CR_FCI_ADDR_MAP5          0x00D4
-+#define PCI_CR_FCI_ADDR_MAP6          0x00D8
-+#define PCI_CR_FCI_ADDR_MAP7          0x00DC
-+#define PCI_CR_CLK_CTRL                       0x0000
-+#define PCI_CR_PCI_MOD                        0x0030
-+#define PCI_CR_PC_ARB                 0x0080
-+#define PCI_CR_FCI_ADDR_MAP11hg               0x00E4
-+#define PCI_CR_BAR11MASK              0x0044
-+#define PCI_CR_BAR12MASK              0x0048
-+#define PCI_CR_BAR13MASK              0x004C
-+#define PCI_CS_BASE_ADDR1             0x0010
-+#define PCI_CR_PCI_ADDR_MAP11         0x0064
-+#define PCI_CR_FCI_BURST_LENGTH               0x00E8
-+#define PCI_CR_PCI_EOI                        0x002C
-+#define PCI_CS_STS_CMD                        0x0004
-+
-+#define PCI_MASTER0_REQ_MASK_2BITS    8
-+#define PCI_MASTER1_REQ_MASK_2BITS    10
-+#define PCI_MASTER2_REQ_MASK_2BITS    12
-+#define INTERNAL_ARB_ENABLE_BIT               0
-+
-+#define LTQ_CGU_IFCCR         0x0018
-+#define LTQ_CGU_PCICR         0x0034
-+
-+#define ltq_pci_w32(x, y)     ltq_w32((x), ltq_pci_membase + (y))
-+#define ltq_pci_r32(x)                ltq_r32(ltq_pci_membase + (x))
-+
-+#define ltq_pci_cfg_w32(x, y) ltq_w32((x), ltq_pci_mapped_cfg + (y))
-+#define ltq_pci_cfg_r32(x)    ltq_r32(ltq_pci_mapped_cfg + (x))
-+
-+struct ltq_pci_gpio_map {
-+      int pin;
-+      int alt0;
-+      int alt1;
-+      int dir;
-+      char *name;
-+};
-+
-+/* the pci core can make use of the following gpios */
-+static struct ltq_pci_gpio_map ltq_pci_gpio_map[] = {
-+      { 0, 1, 0, 0, "pci-exin0" },
-+      { 1, 1, 0, 0, "pci-exin1" },
-+      { 2, 1, 0, 0, "pci-exin2" },
-+      { 39, 1, 0, 0, "pci-exin3" },
-+      { 10, 1, 0, 0, "pci-exin4" },
-+      { 9, 1, 0, 0, "pci-exin5" },
-+      { 30, 1, 0, 1, "pci-gnt1" },
-+      { 23, 1, 0, 1, "pci-gnt2" },
-+      { 19, 1, 0, 1, "pci-gnt3" },
-+      { 38, 1, 0, 1, "pci-gnt4" },
-+      { 29, 1, 0, 0, "pci-req1" },
-+      { 31, 1, 0, 0, "pci-req2" },
-+      { 3, 1, 0, 0, "pci-req3" },
-+      { 37, 1, 0, 0, "pci-req4" },
-+};
-+
-+__iomem void *ltq_pci_mapped_cfg;
-+static __iomem void *ltq_pci_membase;
-+
-+int (*ltqpci_plat_dev_init)(struct pci_dev *dev) = NULL;
-+
-+/* Since the PCI REQ pins can be reused for other functionality, make it
-+   possible to exclude those from interpretation by the PCI controller */
-+static int ltq_pci_req_mask = 0xf;
-+
-+static int *ltq_pci_irq_map;
-+
-+struct pci_ops ltq_pci_ops = {
-+      .read   = ltq_pci_read_config_dword,
-+      .write  = ltq_pci_write_config_dword
-+};
-+
-+static struct resource pci_io_resource = {
-+      .name   = "pci io space",
-+      .start  = LTQ_PCI_IO_BASE,
-+      .end    = LTQ_PCI_IO_BASE + LTQ_PCI_IO_SIZE - 1,
-+      .flags  = IORESOURCE_IO
-+};
-+
-+static struct resource pci_mem_resource = {
-+      .name   = "pci memory space",
-+      .start  = LTQ_PCI_MEM_BASE,
-+      .end    = LTQ_PCI_MEM_BASE + LTQ_PCI_MEM_SIZE - 1,
-+      .flags  = IORESOURCE_MEM
-+};
-+
-+static struct pci_controller ltq_pci_controller = {
-+      .pci_ops        = &ltq_pci_ops,
-+      .mem_resource   = &pci_mem_resource,
-+      .mem_offset     = 0x00000000UL,
-+      .io_resource    = &pci_io_resource,
-+      .io_offset      = 0x00000000UL,
-+};
-+
-+int pcibios_plat_dev_init(struct pci_dev *dev)
-+{
-+      if (ltqpci_plat_dev_init)
-+              return ltqpci_plat_dev_init(dev);
-+
-+      return 0;
-+}
-+
-+static u32 ltq_calc_bar11mask(void)
-+{
-+      u32 mem, bar11mask;
-+
-+      /* BAR11MASK value depends on available memory on system. */
-+      mem = num_physpages * PAGE_SIZE;
-+      bar11mask = (0x0ffffff0 & ~((1 << (fls(mem) - 1)) - 1)) | 8;
-+
-+      return bar11mask;
-+}
-+
-+static void ltq_pci_setup_gpio(int gpio)
-+{
-+      int i;
-+      for (i = 0; i < ARRAY_SIZE(ltq_pci_gpio_map); i++) {
-+              if (gpio & (1 << i)) {
-+                      ltq_gpio_request(ltq_pci_gpio_map[i].pin,
-+                              ltq_pci_gpio_map[i].alt0,
-+                              ltq_pci_gpio_map[i].alt1,
-+                              ltq_pci_gpio_map[i].dir,
-+                              ltq_pci_gpio_map[i].name);
-+              }
-+      }
-+      ltq_gpio_request(21, 0, 0, 1, "pci-reset");
-+      ltq_pci_req_mask = (gpio >> PCI_REQ_SHIFT) & PCI_REQ_MASK;
-+}
-+
-+static int __devinit ltq_pci_startup(struct ltq_pci_data *conf)
-+{
-+      u32 temp_buffer;
-+
-+      /* set clock to 33Mhz */
-+      ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) & ~0xf00000, LTQ_CGU_IFCCR);
-+      ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) | 0x800000, LTQ_CGU_IFCCR);
-+
-+      /* external or internal clock ? */
-+      if (conf->clock) {
-+              ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) & ~(1 << 16),
-+                      LTQ_CGU_IFCCR);
-+              ltq_cgu_w32((1 << 30), LTQ_CGU_PCICR);
-+      } else {
-+              ltq_cgu_w32(ltq_cgu_r32(LTQ_CGU_IFCCR) | (1 << 16),
-+                      LTQ_CGU_IFCCR);
-+              ltq_cgu_w32((1 << 31) | (1 << 30), LTQ_CGU_PCICR);
-+      }
-+
-+      /* setup pci clock and gpis used by pci */
-+      ltq_pci_setup_gpio(conf->gpio);
-+
-+      /* enable auto-switching between PCI and EBU */
-+      ltq_pci_w32(0xa, PCI_CR_CLK_CTRL);
-+
-+      /* busy, i.e. configuration is not done, PCI access has to be retried */
-+      ltq_pci_w32(ltq_pci_r32(PCI_CR_PCI_MOD) & ~(1 << 24), PCI_CR_PCI_MOD);
-+      wmb();
-+      /* BUS Master/IO/MEM access */
-+      ltq_pci_cfg_w32(ltq_pci_cfg_r32(PCI_CS_STS_CMD) | 7, PCI_CS_STS_CMD);
-+
-+      /* enable external 2 PCI masters */
-+      temp_buffer = ltq_pci_r32(PCI_CR_PC_ARB);
-+      temp_buffer &= (~(ltq_pci_req_mask << 16));
-+      /* enable internal arbiter */
-+      temp_buffer |= (1 << INTERNAL_ARB_ENABLE_BIT);
-+      /* enable internal PCI master reqest */
-+      temp_buffer &= (~(3 << PCI_MASTER0_REQ_MASK_2BITS));
-+
-+      /* enable EBU request */
-+      temp_buffer &= (~(3 << PCI_MASTER1_REQ_MASK_2BITS));
-+
-+      /* enable all external masters request */
-+      temp_buffer &= (~(3 << PCI_MASTER2_REQ_MASK_2BITS));
-+      ltq_pci_w32(temp_buffer, PCI_CR_PC_ARB);
-+      wmb();
-+
-+      /* setup BAR memory regions */
-+      ltq_pci_w32(0x18000000, PCI_CR_FCI_ADDR_MAP0);
-+      ltq_pci_w32(0x18400000, PCI_CR_FCI_ADDR_MAP1);
-+      ltq_pci_w32(0x18800000, PCI_CR_FCI_ADDR_MAP2);
-+      ltq_pci_w32(0x18c00000, PCI_CR_FCI_ADDR_MAP3);
-+      ltq_pci_w32(0x19000000, PCI_CR_FCI_ADDR_MAP4);
-+      ltq_pci_w32(0x19400000, PCI_CR_FCI_ADDR_MAP5);
-+      ltq_pci_w32(0x19800000, PCI_CR_FCI_ADDR_MAP6);
-+      ltq_pci_w32(0x19c00000, PCI_CR_FCI_ADDR_MAP7);
-+      ltq_pci_w32(0x1ae00000, PCI_CR_FCI_ADDR_MAP11hg);
-+      ltq_pci_w32(ltq_calc_bar11mask(), PCI_CR_BAR11MASK);
-+      ltq_pci_w32(0, PCI_CR_PCI_ADDR_MAP11);
-+      ltq_pci_w32(0, PCI_CS_BASE_ADDR1);
-+      /* both TX and RX endian swap are enabled */
-+      ltq_pci_w32(ltq_pci_r32(PCI_CR_PCI_EOI) | 3, PCI_CR_PCI_EOI);
-+      wmb();
-+      ltq_pci_w32(ltq_pci_r32(PCI_CR_BAR12MASK) | 0x80000000,
-+              PCI_CR_BAR12MASK);
-+      ltq_pci_w32(ltq_pci_r32(PCI_CR_BAR13MASK) | 0x80000000,
-+              PCI_CR_BAR13MASK);
-+      /*use 8 dw burst length */
-+      ltq_pci_w32(0x303, PCI_CR_FCI_BURST_LENGTH);
-+      ltq_pci_w32(ltq_pci_r32(PCI_CR_PCI_MOD) | (1 << 24), PCI_CR_PCI_MOD);
-+      wmb();
-+
-+      /* setup irq line */
-+      ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_CON) | 0xc, LTQ_EBU_PCC_CON);
-+      ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_IEN) | 0x10, LTQ_EBU_PCC_IEN);
-+
-+      /* toggle reset pin */
-+      __gpio_set_value(21, 0);
-+      wmb();
-+      mdelay(1);
-+      __gpio_set_value(21, 1);
-+      return 0;
-+}
-+
-+int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+      if (ltq_pci_irq_map[slot])
-+              return ltq_pci_irq_map[slot];
-+      printk(KERN_ERR "ltq_pci: trying to map irq for unknown slot %d\n",
-+              slot);
-+
-+      return 0;
-+}
-+
-+static int __devinit ltq_pci_probe(struct platform_device *pdev)
-+{
-+      struct ltq_pci_data *ltq_pci_data =
-+              (struct ltq_pci_data *) pdev->dev.platform_data;
-+      pci_probe_only = 0;
-+      ltq_pci_irq_map = ltq_pci_data->irq;
-+      ltq_pci_membase = ioremap_nocache(PCI_CR_BASE_ADDR, PCI_CR_SIZE);
-+      ltq_pci_mapped_cfg =
-+              ioremap_nocache(LTQ_PCI_CFG_BASE, LTQ_PCI_CFG_BASE);
-+      ltq_pci_controller.io_map_base =
-+              (unsigned long)ioremap(LTQ_PCI_IO_BASE, LTQ_PCI_IO_SIZE - 1);
-+      ltq_pci_startup(ltq_pci_data);
-+      register_pci_controller(&ltq_pci_controller);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver
-+ltq_pci_driver = {
-+      .probe = ltq_pci_probe,
-+      .driver = {
-+              .name = "ltq_pci",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+int __init pcibios_init(void)
-+{
-+      int ret = platform_driver_register(&ltq_pci_driver);
-+      if (ret)
-+              printk(KERN_INFO "ltq_pci: Error registering platfom driver!");
-+      return ret;
-+}
-+
-+arch_initcall(pcibios_init);
-diff --git a/arch/mips/pci/pci-lantiq.h b/arch/mips/pci/pci-lantiq.h
-new file mode 100644
-index 0000000..66bf6cd
---- /dev/null
-+++ b/arch/mips/pci/pci-lantiq.h
-@@ -0,0 +1,18 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_PCI_H__
-+#define _LTQ_PCI_H__
-+
-+extern __iomem void *ltq_pci_mapped_cfg;
-+extern int ltq_pci_read_config_dword(struct pci_bus *bus,
-+      unsigned int devfn, int where, int size, u32 *val);
-+extern int ltq_pci_write_config_dword(struct pci_bus *bus,
-+      unsigned int devfn, int where, int size, u32 val);
-+
-+#endif
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0004-MIPS-Lantiq-Add-NOR-flash-support.patch b/target/linux/lantiq/patches-2.6.32/0004-MIPS-Lantiq-Add-NOR-flash-support.patch
deleted file mode 100644 (file)
index 03e86bb..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-From cd0d53b24ca744295d2cdf69bb2b659571091b75 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Tue, 12 Apr 2011 18:10:01 +0200
-Subject: [PATCH 04/13] MIPS: Lantiq: Add NOR flash support
-
-This patch adds the driver/map for NOR devices attached to the SoC via the
-External Bus Unit (EBU).
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: David Woodhouse <dwmw2@infradead.org>
-Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
-Cc: linux-mips@linux-mips.org
-Cc: linux-mtd@lists.infradead.org
-Acked-by: Artem Bityutskiy <dedekind1@gmail.com>
-Patchwork: https://patchwork.linux-mips.org/patch/2285/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- drivers/mtd/maps/Kconfig        |    7 +
- drivers/mtd/maps/Makefile       |    1 +
- drivers/mtd/maps/lantiq-flash.c |  251 +++++++++++++++++++++++++++++++++++++++
- 3 files changed, 259 insertions(+), 0 deletions(-)
- create mode 100644 drivers/mtd/maps/lantiq-flash.c
-
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -259,6 +259,13 @@
-       help
-         Flash memory access on AMD Alchemy Pb/Db/RDK Reference Boards
-+config MTD_LANTIQ
-+      tristate "Lantiq SoC NOR support"
-+      depends on LANTIQ
-+      select MTD_PARTITIONS
-+      help
-+        Support for NOR flash attached to the Lantiq SoC's External Bus Unit.
-+
- config MTD_DILNETPC
-       tristate "CFI Flash device mapped on DIL/Net PC"
-       depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN
---- a/drivers/mtd/maps/Makefile
-+++ b/drivers/mtd/maps/Makefile
-@@ -61,3 +61,4 @@
- obj-$(CONFIG_MTD_RBTX4939)    += rbtx4939-flash.o
- obj-$(CONFIG_MTD_VMU)         += vmu-flash.o
- obj-$(CONFIG_MTD_GPIO_ADDR)   += gpio-addr-flash.o
-+obj-$(CONFIG_MTD_LANTIQ)      += lantiq-flash.o
---- /dev/null
-+++ b/drivers/mtd/maps/lantiq-flash.c
-@@ -0,0 +1,251 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2004 Liu Peng Infineon IFAP DC COM CPE
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/io.h>
-+#include <linux/slab.h>
-+#include <linux/init.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/map.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/mtd/cfi.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/physmap.h>
-+
-+#include <lantiq_soc.h>
-+#include <lantiq_platform.h>
-+
-+/*
-+ * The NOR flash is connected to the same external bus unit (EBU) as PCI.
-+ * To make PCI work we need to enable the endianness swapping for the address
-+ * written to the EBU. This endianness swapping works for PCI correctly but
-+ * fails for attached NOR devices. To workaround this we need to use a complex
-+ * map. The workaround involves swapping all addresses whilst probing the chip.
-+ * Once probing is complete we stop swapping the addresses but swizzle the
-+ * unlock addresses to ensure that access to the NOR device works correctly.
-+ */
-+
-+enum {
-+      LTQ_NOR_PROBING,
-+      LTQ_NOR_NORMAL
-+};
-+
-+struct ltq_mtd {
-+      struct resource *res;
-+      struct mtd_info *mtd;
-+      struct map_info *map;
-+};
-+
-+static char ltq_map_name[] = "ltq_nor";
-+
-+static map_word
-+ltq_read16(struct map_info *map, unsigned long adr)
-+{
-+      unsigned long flags;
-+      map_word temp;
-+
-+      if (map->map_priv_1 == LTQ_NOR_PROBING)
-+              adr ^= 2;
-+      spin_lock_irqsave(&ebu_lock, flags);
-+      temp.x[0] = *(u16 *)(map->virt + adr);
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+      return temp;
-+}
-+
-+static void
-+ltq_write16(struct map_info *map, map_word d, unsigned long adr)
-+{
-+      unsigned long flags;
-+
-+      if (map->map_priv_1 == LTQ_NOR_PROBING)
-+              adr ^= 2;
-+      spin_lock_irqsave(&ebu_lock, flags);
-+      *(u16 *)(map->virt + adr) = d.x[0];
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+}
-+
-+/*
-+ * The following 2 functions copy data between iomem and a cached memory
-+ * section. As memcpy() makes use of pre-fetching we cannot use it here.
-+ * The normal alternative of using memcpy_{to,from}io also makes use of
-+ * memcpy() on MIPS so it is not applicable either. We are therefore stuck
-+ * with having to use our own loop.
-+ */
-+static void
-+ltq_copy_from(struct map_info *map, void *to,
-+      unsigned long from, ssize_t len)
-+{
-+      unsigned char *f = (unsigned char *)map->virt + from;
-+      unsigned char *t = (unsigned char *)to;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&ebu_lock, flags);
-+      while (len--)
-+              *t++ = *f++;
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+}
-+
-+static void
-+ltq_copy_to(struct map_info *map, unsigned long to,
-+      const void *from, ssize_t len)
-+{
-+      unsigned char *f = (unsigned char *)from;
-+      unsigned char *t = (unsigned char *)map->virt + to;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&ebu_lock, flags);
-+      while (len--)
-+              *t++ = *f++;
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+}
-+
-+static const char const *part_probe_types[] = { "cmdlinepart", NULL };
-+
-+static int __init
-+ltq_mtd_probe(struct platform_device *pdev)
-+{
-+      struct physmap_flash_data *ltq_mtd_data = dev_get_platdata(&pdev->dev);
-+      struct ltq_mtd *ltq_mtd;
-+      struct mtd_partition *parts;
-+      struct resource *res;
-+      int nr_parts = 0;
-+      struct cfi_private *cfi;
-+      int err;
-+
-+      ltq_mtd = kzalloc(sizeof(struct ltq_mtd), GFP_KERNEL);
-+      platform_set_drvdata(pdev, ltq_mtd);
-+
-+      ltq_mtd->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!ltq_mtd->res) {
-+              dev_err(&pdev->dev, "failed to get memory resource");
-+              err = -ENOENT;
-+              goto err_out;
-+      }
-+
-+      res = devm_request_mem_region(&pdev->dev, ltq_mtd->res->start,
-+              resource_size(ltq_mtd->res), dev_name(&pdev->dev));
-+      if (!ltq_mtd->res) {
-+              dev_err(&pdev->dev, "failed to request mem resource");
-+              err = -EBUSY;
-+              goto err_out;
-+      }
-+
-+      ltq_mtd->map = kzalloc(sizeof(struct map_info), GFP_KERNEL);
-+      ltq_mtd->map->phys = res->start;
-+      ltq_mtd->map->size = resource_size(res);
-+      ltq_mtd->map->virt = devm_ioremap_nocache(&pdev->dev,
-+                              ltq_mtd->map->phys, ltq_mtd->map->size);
-+      if (!ltq_mtd->map->virt) {
-+              dev_err(&pdev->dev, "failed to ioremap!\n");
-+              err = -ENOMEM;
-+              goto err_free;
-+      }
-+
-+      ltq_mtd->map->name = ltq_map_name;
-+      ltq_mtd->map->bankwidth = 2;
-+      ltq_mtd->map->read = ltq_read16;
-+      ltq_mtd->map->write = ltq_write16;
-+      ltq_mtd->map->copy_from = ltq_copy_from;
-+      ltq_mtd->map->copy_to = ltq_copy_to;
-+
-+      ltq_mtd->map->map_priv_1 = LTQ_NOR_PROBING;
-+      ltq_mtd->mtd = do_map_probe("cfi_probe", ltq_mtd->map);
-+      ltq_mtd->map->map_priv_1 = LTQ_NOR_NORMAL;
-+
-+      if (!ltq_mtd->mtd) {
-+              dev_err(&pdev->dev, "probing failed\n");
-+              err = -ENXIO;
-+              goto err_unmap;
-+      }
-+
-+      ltq_mtd->mtd->owner = THIS_MODULE;
-+
-+      cfi = ltq_mtd->map->fldrv_priv;
-+      cfi->addr_unlock1 ^= 1;
-+      cfi->addr_unlock2 ^= 1;
-+
-+      nr_parts = parse_mtd_partitions(ltq_mtd->mtd,
-+                              part_probe_types, &parts, 0);
-+      if (nr_parts > 0) {
-+              dev_info(&pdev->dev,
-+                      "using %d partitions from cmdline", nr_parts);
-+      } else {
-+              nr_parts = ltq_mtd_data->nr_parts;
-+              parts = ltq_mtd_data->parts;
-+      }
-+
-+      err = add_mtd_partitions(ltq_mtd->mtd, parts, nr_parts);
-+      if (err) {
-+              dev_err(&pdev->dev, "failed to add partitions\n");
-+              goto err_destroy;
-+      }
-+
-+      return 0;
-+
-+err_destroy:
-+      map_destroy(ltq_mtd->mtd);
-+err_unmap:
-+      iounmap(ltq_mtd->map->virt);
-+err_free:
-+      kfree(ltq_mtd->map);
-+err_out:
-+      kfree(ltq_mtd);
-+      return err;
-+}
-+
-+static int __devexit
-+ltq_mtd_remove(struct platform_device *pdev)
-+{
-+      struct ltq_mtd *ltq_mtd = platform_get_drvdata(pdev);
-+
-+      if (ltq_mtd) {
-+              if (ltq_mtd->mtd) {
-+                      del_mtd_partitions(ltq_mtd->mtd);
-+                      map_destroy(ltq_mtd->mtd);
-+              }
-+              if (ltq_mtd->map->virt)
-+                      iounmap(ltq_mtd->map->virt);
-+              kfree(ltq_mtd->map);
-+              kfree(ltq_mtd);
-+      }
-+      return 0;
-+}
-+
-+static struct platform_driver ltq_mtd_driver = {
-+      .remove = __devexit_p(ltq_mtd_remove),
-+      .driver = {
-+              .name = "ltq_nor",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+static int __init
-+init_ltq_mtd(void)
-+{
-+      int ret = platform_driver_probe(&ltq_mtd_driver, ltq_mtd_probe);
-+
-+      if (ret)
-+              pr_err("ltq_nor: error registering platform driver");
-+      return ret;
-+}
-+
-+static void __exit
-+exit_ltq_mtd(void)
-+{
-+      platform_driver_unregister(&ltq_mtd_driver);
-+}
-+
-+module_init(init_ltq_mtd);
-+module_exit(exit_ltq_mtd);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("John Crispin <blogic@openwrt.org>");
-+MODULE_DESCRIPTION("Lantiq SoC NOR");
diff --git a/target/linux/lantiq/patches-2.6.32/0005-MIPS-Lantiq-Add-platform-device-support.patch b/target/linux/lantiq/patches-2.6.32/0005-MIPS-Lantiq-Add-platform-device-support.patch
deleted file mode 100644 (file)
index 917993f..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-From 09e57348261c1ae0ff89c68679126fc76a28b2a2 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:53 +0200
-Subject: [PATCH 05/13] MIPS: Lantiq: Add platform device support
-
-This patch adds the wrappers for registering our platform devices.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2254/
-Patchwork: https://patchwork.linux-mips.org/patch/2360/
-Patchwork: https://patchwork.linux-mips.org/patch/2359/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/lantiq/Makefile       |    2 +-
- arch/mips/lantiq/devices.c      |  122 +++++++++++++++++++++++++++++++++++++++
- arch/mips/lantiq/devices.h      |   23 +++++++
- arch/mips/lantiq/xway/Makefile  |    2 +-
- arch/mips/lantiq/xway/devices.c |   98 +++++++++++++++++++++++++++++++
- arch/mips/lantiq/xway/devices.h |   18 ++++++
- 6 files changed, 263 insertions(+), 2 deletions(-)
- create mode 100644 arch/mips/lantiq/devices.c
- create mode 100644 arch/mips/lantiq/devices.h
- create mode 100644 arch/mips/lantiq/xway/devices.c
- create mode 100644 arch/mips/lantiq/xway/devices.h
-
-diff --git a/arch/mips/lantiq/Makefile b/arch/mips/lantiq/Makefile
-index a268391..e5dae0e 100644
---- a/arch/mips/lantiq/Makefile
-+++ b/arch/mips/lantiq/Makefile
-@@ -4,7 +4,7 @@
- # under the terms of the GNU General Public License version 2 as published
- # by the Free Software Foundation.
--obj-y := irq.o setup.o clk.o prom.o
-+obj-y := irq.o setup.o clk.o prom.o devices.o
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-diff --git a/arch/mips/lantiq/devices.c b/arch/mips/lantiq/devices.c
-new file mode 100644
-index 0000000..7b82c34
---- /dev/null
-+++ b/arch/mips/lantiq/devices.c
-@@ -0,0 +1,122 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/kernel.h>
-+#include <linux/reboot.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <linux/etherdevice.h>
-+#include <linux/reboot.h>
-+#include <linux/time.h>
-+#include <linux/io.h>
-+#include <linux/gpio.h>
-+#include <linux/leds.h>
-+
-+#include <asm/bootinfo.h>
-+#include <asm/irq.h>
-+
-+#include <lantiq_soc.h>
-+
-+#include "devices.h"
-+
-+/* nor flash */
-+static struct resource ltq_nor_resource = {
-+      .name   = "nor",
-+      .start  = LTQ_FLASH_START,
-+      .end    = LTQ_FLASH_START + LTQ_FLASH_MAX - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+static struct platform_device ltq_nor = {
-+      .name           = "ltq_nor",
-+      .resource       = &ltq_nor_resource,
-+      .num_resources  = 1,
-+};
-+
-+void __init ltq_register_nor(struct physmap_flash_data *data)
-+{
-+      ltq_nor.dev.platform_data = data;
-+      platform_device_register(&ltq_nor);
-+}
-+
-+/* watchdog */
-+static struct resource ltq_wdt_resource = {
-+      .name   = "watchdog",
-+      .start  = LTQ_WDT_BASE_ADDR,
-+      .end    = LTQ_WDT_BASE_ADDR + LTQ_WDT_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+void __init ltq_register_wdt(void)
-+{
-+      platform_device_register_simple("ltq_wdt", 0, &ltq_wdt_resource, 1);
-+}
-+
-+/* asc ports */
-+static struct resource ltq_asc0_resources[] = {
-+      {
-+              .name   = "asc0",
-+              .start  = LTQ_ASC0_BASE_ADDR,
-+              .end    = LTQ_ASC0_BASE_ADDR + LTQ_ASC_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      },
-+      IRQ_RES(tx, LTQ_ASC_TIR(0)),
-+      IRQ_RES(rx, LTQ_ASC_RIR(0)),
-+      IRQ_RES(err, LTQ_ASC_EIR(0)),
-+};
-+
-+static struct resource ltq_asc1_resources[] = {
-+      {
-+              .name   = "asc1",
-+              .start  = LTQ_ASC1_BASE_ADDR,
-+              .end    = LTQ_ASC1_BASE_ADDR + LTQ_ASC_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      },
-+      IRQ_RES(tx, LTQ_ASC_TIR(1)),
-+      IRQ_RES(rx, LTQ_ASC_RIR(1)),
-+      IRQ_RES(err, LTQ_ASC_EIR(1)),
-+};
-+
-+void __init ltq_register_asc(int port)
-+{
-+      switch (port) {
-+      case 0:
-+              platform_device_register_simple("ltq_asc", 0,
-+                      ltq_asc0_resources, ARRAY_SIZE(ltq_asc0_resources));
-+              break;
-+      case 1:
-+              platform_device_register_simple("ltq_asc", 1,
-+                      ltq_asc1_resources, ARRAY_SIZE(ltq_asc1_resources));
-+              break;
-+      default:
-+              break;
-+      }
-+}
-+
-+#ifdef CONFIG_PCI
-+/* pci */
-+static struct platform_device ltq_pci = {
-+      .name           = "ltq_pci",
-+      .num_resources  = 0,
-+};
-+
-+void __init ltq_register_pci(struct ltq_pci_data *data)
-+{
-+      ltq_pci.dev.platform_data = data;
-+      platform_device_register(&ltq_pci);
-+}
-+#else
-+void __init ltq_register_pci(struct ltq_pci_data *data)
-+{
-+      pr_err("kernel is compiled without PCI support\n");
-+}
-+#endif
-diff --git a/arch/mips/lantiq/devices.h b/arch/mips/lantiq/devices.h
-new file mode 100644
-index 0000000..2947bb1
---- /dev/null
-+++ b/arch/mips/lantiq/devices.h
-@@ -0,0 +1,23 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_DEVICES_H__
-+#define _LTQ_DEVICES_H__
-+
-+#include <lantiq_platform.h>
-+#include <linux/mtd/physmap.h>
-+
-+#define IRQ_RES(resname, irq) \
-+      {.name = #resname, .start = (irq), .flags = IORESOURCE_IRQ}
-+
-+extern void ltq_register_nor(struct physmap_flash_data *data);
-+extern void ltq_register_wdt(void);
-+extern void ltq_register_asc(int port);
-+extern void ltq_register_pci(struct ltq_pci_data *data);
-+
-+#endif
-diff --git a/arch/mips/lantiq/xway/Makefile b/arch/mips/lantiq/xway/Makefile
-index 9c85ff9..74ce438 100644
---- a/arch/mips/lantiq/xway/Makefile
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -1,4 +1,4 @@
--obj-y := pmu.o ebu.o reset.o gpio.o
-+obj-y := pmu.o ebu.o reset.o gpio.o devices.o
- obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o
- obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o
-diff --git a/arch/mips/lantiq/xway/devices.c b/arch/mips/lantiq/xway/devices.c
-new file mode 100644
-index 0000000..a71b3b5
---- /dev/null
-+++ b/arch/mips/lantiq/xway/devices.c
-@@ -0,0 +1,98 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/kernel.h>
-+#include <linux/reboot.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <linux/etherdevice.h>
-+#include <linux/reboot.h>
-+#include <linux/time.h>
-+#include <linux/io.h>
-+#include <linux/gpio.h>
-+#include <linux/leds.h>
-+
-+#include <asm/bootinfo.h>
-+#include <asm/irq.h>
-+
-+#include <lantiq_soc.h>
-+#include <lantiq_irq.h>
-+#include <lantiq_platform.h>
-+
-+#include "devices.h"
-+
-+/* gpio */
-+static struct resource ltq_gpio_resource[] = {
-+      {
-+              .name   = "gpio0",
-+              .start  = LTQ_GPIO0_BASE_ADDR,
-+              .end    = LTQ_GPIO0_BASE_ADDR + LTQ_GPIO_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      }, {
-+              .name   = "gpio1",
-+              .start  = LTQ_GPIO1_BASE_ADDR,
-+              .end    = LTQ_GPIO1_BASE_ADDR + LTQ_GPIO_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      }, {
-+              .name   = "gpio2",
-+              .start  = LTQ_GPIO2_BASE_ADDR,
-+              .end    = LTQ_GPIO2_BASE_ADDR + LTQ_GPIO_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      }
-+};
-+
-+void __init ltq_register_gpio(void)
-+{
-+      platform_device_register_simple("ltq_gpio", 0,
-+              &ltq_gpio_resource[0], 1);
-+      platform_device_register_simple("ltq_gpio", 1,
-+              &ltq_gpio_resource[1], 1);
-+
-+      /* AR9 and VR9 have an extra gpio block */
-+      if (ltq_is_ar9() || ltq_is_vr9()) {
-+              platform_device_register_simple("ltq_gpio", 2,
-+                      &ltq_gpio_resource[2], 1);
-+      }
-+}
-+
-+/* serial to parallel conversion */
-+static struct resource ltq_stp_resource = {
-+      .name   = "stp",
-+      .start  = LTQ_STP_BASE_ADDR,
-+      .end    = LTQ_STP_BASE_ADDR + LTQ_STP_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+void __init ltq_register_gpio_stp(void)
-+{
-+      platform_device_register_simple("ltq_stp", 0, &ltq_stp_resource, 1);
-+}
-+
-+/* asc ports - amazon se has its own serial mapping */
-+static struct resource ltq_ase_asc_resources[] = {
-+      {
-+              .name   = "asc0",
-+              .start  = LTQ_ASC1_BASE_ADDR,
-+              .end    = LTQ_ASC1_BASE_ADDR + LTQ_ASC_SIZE - 1,
-+              .flags  = IORESOURCE_MEM,
-+      },
-+      IRQ_RES(tx, LTQ_ASC_ASE_TIR),
-+      IRQ_RES(rx, LTQ_ASC_ASE_RIR),
-+      IRQ_RES(err, LTQ_ASC_ASE_EIR),
-+};
-+
-+void __init ltq_register_ase_asc(void)
-+{
-+      platform_device_register_simple("ltq_asc", 0,
-+              ltq_ase_asc_resources, ARRAY_SIZE(ltq_ase_asc_resources));
-+}
-diff --git a/arch/mips/lantiq/xway/devices.h b/arch/mips/lantiq/xway/devices.h
-new file mode 100644
-index 0000000..51f56b5
---- /dev/null
-+++ b/arch/mips/lantiq/xway/devices.h
-@@ -0,0 +1,18 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LTQ_DEVICES_XWAY_H__
-+#define _LTQ_DEVICES_XWAY_H__
-+
-+#include "../devices.h"
-+
-+extern void ltq_register_gpio(void);
-+extern void ltq_register_gpio_stp(void);
-+extern void ltq_register_ase_asc(void);
-+
-+#endif
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0006-MIPS-Lantiq-Add-mips_machine-support.patch b/target/linux/lantiq/patches-2.6.32/0006-MIPS-Lantiq-Add-mips_machine-support.patch
deleted file mode 100644 (file)
index 9e02b6a..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-From 52a5369d1067d4feddbfa7ff4486a77ac9a2971e Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:54 +0200
-Subject: [PATCH 06/13] MIPS: Lantiq: Add mips_machine support
-
-This patch adds support for Gabor's mips_machine patch.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: Gabor Juhos <juhosg@openwrt.org>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2251/
-Patchwork: https://patchwork.linux-mips.org/patch/2358/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/Kconfig                  |    1 +
- arch/mips/lantiq/machtypes.h       |   18 ++++++++++++++++++
- arch/mips/lantiq/prom.h            |    1 +
- arch/mips/lantiq/setup.c           |   25 +++++++++++++++++++++++++
- arch/mips/lantiq/xway/Makefile     |    4 ++--
- arch/mips/lantiq/xway/setup-ase.c  |   19 +++++++++++++++++++
- arch/mips/lantiq/xway/setup-xway.c |   20 ++++++++++++++++++++
- 7 files changed, 86 insertions(+), 2 deletions(-)
- create mode 100644 arch/mips/lantiq/machtypes.h
- create mode 100644 arch/mips/lantiq/xway/setup-ase.c
- create mode 100644 arch/mips/lantiq/xway/setup-xway.c
-
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -190,6 +190,7 @@
-       select SWAP_IO_SPACE
-       select BOOT_RAW
-       select HAVE_CLK
-+      select MIPS_MACHINE
- config LASAT
-       bool "LASAT Networks platforms"
---- /dev/null
-+++ b/arch/mips/lantiq/machtypes.h
-@@ -0,0 +1,18 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef _LANTIQ_MACH_H__
-+#define _LANTIQ_MACH_H__
-+
-+#include <asm/mips_machine.h>
-+
-+enum lantiq_mach_type {
-+      LTQ_MACH_GENERIC = 0,
-+};
-+
-+#endif
---- a/arch/mips/lantiq/prom.h
-+++ b/arch/mips/lantiq/prom.h
-@@ -20,5 +20,6 @@
- };
- extern void ltq_soc_detect(struct ltq_soc_info *i);
-+extern void ltq_soc_setup(void);
- #endif
---- a/arch/mips/lantiq/setup.c
-+++ b/arch/mips/lantiq/setup.c
-@@ -14,6 +14,12 @@
- #include <lantiq_soc.h>
-+#include "machtypes.h"
-+#include "devices.h"
-+#include "prom.h"
-+
-+unsigned long physical_memsize = 0L;
-+
- void __init plat_mem_setup(void)
- {
-       /* assume 16M as default incase uboot fails to pass proper ramsize */
-@@ -32,10 +38,32 @@
-               if (!strncmp(e, "memsize=", 8)) {
-                       e += 8;
-                       if (strict_strtoul(e, 0, &memsize))
--                              pr_warn("bad memsize specified\n");
-+                              pr_warning("bad memsize specified\n");
-               }
-               envp++;
-       }
-       memsize *= 1024 * 1024;
-       add_memory_region(0x00000000, memsize, BOOT_MEM_RAM);
-+      physical_memsize = memsize;
-+}
-+
-+static int __init
-+lantiq_setup(void)
-+{
-+      ltq_soc_setup();
-+      mips_machine_setup();
-+      return 0;
- }
-+
-+arch_initcall(lantiq_setup);
-+
-+static void __init
-+lantiq_generic_init(void)
-+{
-+      /* Nothing to do */
-+}
-+
-+MIPS_MACHINE(LTQ_MACH_GENERIC,
-+           "Generic",
-+           "Generic Lantiq based board",
-+           lantiq_generic_init);
---- a/arch/mips/lantiq/xway/Makefile
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -1,4 +1,4 @@
- obj-y := pmu.o ebu.o reset.o gpio.o devices.o
--obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o
--obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o
-+obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o setup-xway.o
-+obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o setup-ase.o
---- /dev/null
-+++ b/arch/mips/lantiq/xway/setup-ase.c
-@@ -0,0 +1,19 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <lantiq_soc.h>
-+
-+#include "../prom.h"
-+#include "devices.h"
-+
-+void __init ltq_soc_setup(void)
-+{
-+      ltq_register_ase_asc();
-+      ltq_register_gpio();
-+      ltq_register_wdt();
-+}
---- /dev/null
-+++ b/arch/mips/lantiq/xway/setup-xway.c
-@@ -0,0 +1,20 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <lantiq_soc.h>
-+
-+#include "../prom.h"
-+#include "devices.h"
-+
-+void __init ltq_soc_setup(void)
-+{
-+      ltq_register_asc(0);
-+      ltq_register_asc(1);
-+      ltq_register_gpio();
-+      ltq_register_wdt();
-+}
diff --git a/target/linux/lantiq/patches-2.6.32/0007-MIPS-Lantiq-Add-machtypes-for-lantiq-eval-kits.patch b/target/linux/lantiq/patches-2.6.32/0007-MIPS-Lantiq-Add-machtypes-for-lantiq-eval-kits.patch
deleted file mode 100644 (file)
index e69558c..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-From ab2182fc419548455d03979683eb0e92c372ed79 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:55 +0200
-Subject: [PATCH 07/13] MIPS: Lantiq: Add machtypes for lantiq eval kits
-
-This patch adds mach specific code for the Lantiq EASY50712/50601 evaluation
-boards
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2255/
-Patchwork: https://patchwork.linux-mips.org/patch/2361/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/lantiq/Kconfig               |    2 +
- arch/mips/lantiq/machtypes.h           |    2 +
- arch/mips/lantiq/xway/Kconfig          |   23 +++++++++++
- arch/mips/lantiq/xway/Makefile         |    3 +
- arch/mips/lantiq/xway/mach-easy50601.c |   57 ++++++++++++++++++++++++++
- arch/mips/lantiq/xway/mach-easy50712.c |   68 ++++++++++++++++++++++++++++++++
- 6 files changed, 155 insertions(+), 0 deletions(-)
- create mode 100644 arch/mips/lantiq/xway/Kconfig
- create mode 100644 arch/mips/lantiq/xway/mach-easy50601.c
- create mode 100644 arch/mips/lantiq/xway/mach-easy50712.c
-
-diff --git a/arch/mips/lantiq/Kconfig b/arch/mips/lantiq/Kconfig
-index 2780461..3fccf21 100644
---- a/arch/mips/lantiq/Kconfig
-+++ b/arch/mips/lantiq/Kconfig
-@@ -18,4 +18,6 @@ config SOC_XWAY
-       select HW_HAS_PCI
- endchoice
-+source "arch/mips/lantiq/xway/Kconfig"
-+
- endif
-diff --git a/arch/mips/lantiq/machtypes.h b/arch/mips/lantiq/machtypes.h
-index ffcacfc..7e01b8c 100644
---- a/arch/mips/lantiq/machtypes.h
-+++ b/arch/mips/lantiq/machtypes.h
-@@ -13,6 +13,8 @@
- enum lantiq_mach_type {
-       LTQ_MACH_GENERIC = 0,
-+      LTQ_MACH_EASY50712,     /* Danube evaluation board */
-+      LTQ_MACH_EASY50601,     /* Amazon SE evaluation board */
- };
- #endif
-diff --git a/arch/mips/lantiq/xway/Kconfig b/arch/mips/lantiq/xway/Kconfig
-new file mode 100644
-index 0000000..2b857de
---- /dev/null
-+++ b/arch/mips/lantiq/xway/Kconfig
-@@ -0,0 +1,23 @@
-+if SOC_XWAY
-+
-+menu "MIPS Machine"
-+
-+config LANTIQ_MACH_EASY50712
-+      bool "Easy50712 - Danube"
-+      default y
-+
-+endmenu
-+
-+endif
-+
-+if SOC_AMAZON_SE
-+
-+menu "MIPS Machine"
-+
-+config LANTIQ_MACH_EASY50601
-+      bool "Easy50601 - Amazon SE"
-+      default y
-+
-+endmenu
-+
-+endif
-diff --git a/arch/mips/lantiq/xway/Makefile b/arch/mips/lantiq/xway/Makefile
-index 8c06a97..b1d3640 100644
---- a/arch/mips/lantiq/xway/Makefile
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -2,3 +2,6 @@ obj-y := pmu.o ebu.o reset.o gpio.o devices.o
- obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o setup-xway.o
- obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o setup-ase.o
-+
-+obj-$(CONFIG_LANTIQ_MACH_EASY50712) += mach-easy50712.o
-+obj-$(CONFIG_LANTIQ_MACH_EASY50601) += mach-easy50601.o
-diff --git a/arch/mips/lantiq/xway/mach-easy50601.c b/arch/mips/lantiq/xway/mach-easy50601.c
-new file mode 100644
-index 0000000..d5aaf63
---- /dev/null
-+++ b/arch/mips/lantiq/xway/mach-easy50601.c
-@@ -0,0 +1,57 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+
-+#include <lantiq.h>
-+
-+#include "../machtypes.h"
-+#include "devices.h"
-+
-+static struct mtd_partition easy50601_partitions[] = {
-+      {
-+              .name   = "uboot",
-+              .offset = 0x0,
-+              .size   = 0x10000,
-+      },
-+      {
-+              .name   = "uboot_env",
-+              .offset = 0x10000,
-+              .size   = 0x10000,
-+      },
-+      {
-+              .name   = "linux",
-+              .offset = 0x20000,
-+              .size   = 0xE0000,
-+      },
-+      {
-+              .name   = "rootfs",
-+              .offset = 0x100000,
-+              .size   = 0x300000,
-+      },
-+};
-+
-+static struct physmap_flash_data easy50601_flash_data = {
-+      .nr_parts       = ARRAY_SIZE(easy50601_partitions),
-+      .parts          = easy50601_partitions,
-+};
-+
-+static void __init easy50601_init(void)
-+{
-+      ltq_register_nor(&easy50601_flash_data);
-+}
-+
-+MIPS_MACHINE(LTQ_MACH_EASY50601,
-+                      "EASY50601",
-+                      "EASY50601 Eval Board",
-+                      easy50601_init);
-diff --git a/arch/mips/lantiq/xway/mach-easy50712.c b/arch/mips/lantiq/xway/mach-easy50712.c
-new file mode 100644
-index 0000000..e5e7e09
---- /dev/null
-+++ b/arch/mips/lantiq/xway/mach-easy50712.c
-@@ -0,0 +1,68 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+
-+#include <lantiq_soc.h>
-+#include <irq.h>
-+
-+#include "../machtypes.h"
-+#include "devices.h"
-+
-+static struct mtd_partition easy50712_partitions[] = {
-+      {
-+              .name   = "uboot",
-+              .offset = 0x0,
-+              .size   = 0x10000,
-+      },
-+      {
-+              .name   = "uboot_env",
-+              .offset = 0x10000,
-+              .size   = 0x10000,
-+      },
-+      {
-+              .name   = "linux",
-+              .offset = 0x20000,
-+              .size   = 0xe0000,
-+      },
-+      {
-+              .name   = "rootfs",
-+              .offset = 0x100000,
-+              .size   = 0x300000,
-+      },
-+};
-+
-+static struct physmap_flash_data easy50712_flash_data = {
-+      .nr_parts       = ARRAY_SIZE(easy50712_partitions),
-+      .parts          = easy50712_partitions,
-+};
-+
-+static struct ltq_pci_data ltq_pci_data = {
-+      .clock  = PCI_CLOCK_INT,
-+      .gpio   = PCI_GNT1 | PCI_REQ1,
-+      .irq    = {
-+              [14] = INT_NUM_IM0_IRL0 + 22,
-+      },
-+};
-+
-+static void __init easy50712_init(void)
-+{
-+      ltq_register_gpio_stp();
-+      ltq_register_nor(&easy50712_flash_data);
-+      ltq_register_pci(&ltq_pci_data);
-+}
-+
-+MIPS_MACHINE(LTQ_MACH_EASY50712,
-+           "EASY50712",
-+           "EASY50712 Eval Board",
-+            easy50712_init);
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0008-MIPS-Lantiq-Add-more-gpio-drivers.patch b/target/linux/lantiq/patches-2.6.32/0008-MIPS-Lantiq-Add-more-gpio-drivers.patch
deleted file mode 100644 (file)
index 2daa9e0..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-From f9391211e47cdcc31f341d710efef4b3b46c333d Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Wed, 30 Mar 2011 09:27:56 +0200
-Subject: [PATCH 08/13] MIPS: Lantiq: Add more gpio drivers
-
-The XWAY family allows to extend the number of gpios by using shift registers or latches. This patch adds the 2 drivers needed for this. The extended gpios are output only.
-
-[ralf@linux-mips.org: Fixed ltq_stp_probe section() attributes.]
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2258/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/lantiq/xway/Makefile   |    2 +-
- arch/mips/lantiq/xway/gpio_ebu.c |  126 ++++++++++++++++++++++++++++++
- arch/mips/lantiq/xway/gpio_stp.c |  157 ++++++++++++++++++++++++++++++++++++++
- 3 files changed, 284 insertions(+), 1 deletions(-)
- create mode 100644 arch/mips/lantiq/xway/gpio_ebu.c
- create mode 100644 arch/mips/lantiq/xway/gpio_stp.c
-
-diff --git a/arch/mips/lantiq/xway/Makefile b/arch/mips/lantiq/xway/Makefile
-index b1d3640..6b5e07e 100644
---- a/arch/mips/lantiq/xway/Makefile
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -1,4 +1,4 @@
--obj-y := pmu.o ebu.o reset.o gpio.o devices.o
-+obj-y := pmu.o ebu.o reset.o gpio.o gpio_stp.o gpio_ebu.o devices.o
- obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o setup-xway.o
- obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o setup-ase.o
-diff --git a/arch/mips/lantiq/xway/gpio_ebu.c b/arch/mips/lantiq/xway/gpio_ebu.c
-new file mode 100644
-index 0000000..a479355
---- /dev/null
-+++ b/arch/mips/lantiq/xway/gpio_ebu.c
-@@ -0,0 +1,126 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/gpio.h>
-+#include <linux/io.h>
-+
-+#include <lantiq_soc.h>
-+
-+/*
-+ * By attaching hardware latches to the EBU it is possible to create output
-+ * only gpios. This driver configures a special memory address, which when
-+ * written to outputs 16 bit to the latches.
-+ */
-+
-+#define LTQ_EBU_BUSCON        0x1e7ff         /* 16 bit access, slowest timing */
-+#define LTQ_EBU_WP    0x80000000      /* write protect bit */
-+
-+/* we keep a shadow value of the last value written to the ebu */
-+static int ltq_ebu_gpio_shadow = 0x0;
-+static void __iomem *ltq_ebu_gpio_membase;
-+
-+static void ltq_ebu_apply(void)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&ebu_lock, flags);
-+      ltq_ebu_w32(LTQ_EBU_BUSCON, LTQ_EBU_BUSCON1);
-+      *((__u16 *)ltq_ebu_gpio_membase) = ltq_ebu_gpio_shadow;
-+      ltq_ebu_w32(LTQ_EBU_BUSCON | LTQ_EBU_WP, LTQ_EBU_BUSCON1);
-+      spin_unlock_irqrestore(&ebu_lock, flags);
-+}
-+
-+static void ltq_ebu_set(struct gpio_chip *chip, unsigned offset, int value)
-+{
-+      if (value)
-+              ltq_ebu_gpio_shadow |= (1 << offset);
-+      else
-+              ltq_ebu_gpio_shadow &= ~(1 << offset);
-+      ltq_ebu_apply();
-+}
-+
-+static int ltq_ebu_direction_output(struct gpio_chip *chip, unsigned offset,
-+      int value)
-+{
-+      ltq_ebu_set(chip, offset, value);
-+
-+      return 0;
-+}
-+
-+static struct gpio_chip ltq_ebu_chip = {
-+      .label = "ltq_ebu",
-+      .direction_output = ltq_ebu_direction_output,
-+      .set = ltq_ebu_set,
-+      .base = 72,
-+      .ngpio = 16,
-+      .can_sleep = 1,
-+      .owner = THIS_MODULE,
-+};
-+
-+static int ltq_ebu_probe(struct platform_device *pdev)
-+{
-+      int ret = 0;
-+      struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to get memory resource\n");
-+              return -ENOENT;
-+      }
-+
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              resource_size(res), dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to request memory resource\n");
-+              return -EBUSY;
-+      }
-+
-+      ltq_ebu_gpio_membase = devm_ioremap_nocache(&pdev->dev, res->start,
-+              resource_size(res));
-+      if (!ltq_ebu_gpio_membase) {
-+              dev_err(&pdev->dev, "Failed to ioremap mem region\n");
-+              return -ENOMEM;
-+      }
-+
-+      /* grab the default shadow value passed form the platform code */
-+      ltq_ebu_gpio_shadow = (unsigned int) pdev->dev.platform_data;
-+
-+      /* tell the ebu controller which memory address we will be using */
-+      ltq_ebu_w32(pdev->resource->start | 0x1, LTQ_EBU_ADDRSEL1);
-+
-+      /* write protect the region */
-+      ltq_ebu_w32(LTQ_EBU_BUSCON | LTQ_EBU_WP, LTQ_EBU_BUSCON1);
-+
-+      ret = gpiochip_add(&ltq_ebu_chip);
-+      if (!ret)
-+              ltq_ebu_apply();
-+      return ret;
-+}
-+
-+static struct platform_driver ltq_ebu_driver = {
-+      .probe = ltq_ebu_probe,
-+      .driver = {
-+              .name = "ltq_ebu",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+static int __init ltq_ebu_init(void)
-+{
-+      int ret = platform_driver_register(&ltq_ebu_driver);
-+
-+      if (ret)
-+              pr_info("ltq_ebu : Error registering platfom driver!");
-+      return ret;
-+}
-+
-+postcore_initcall(ltq_ebu_init);
-diff --git a/arch/mips/lantiq/xway/gpio_stp.c b/arch/mips/lantiq/xway/gpio_stp.c
-new file mode 100644
-index 0000000..67d59d6
---- /dev/null
-+++ b/arch/mips/lantiq/xway/gpio_stp.c
-@@ -0,0 +1,157 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2007 John Crispin <blogic@openwrt.org>
-+ *
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/io.h>
-+#include <linux/gpio.h>
-+
-+#include <lantiq_soc.h>
-+
-+#define LTQ_STP_CON0          0x00
-+#define LTQ_STP_CON1          0x04
-+#define LTQ_STP_CPU0          0x08
-+#define LTQ_STP_CPU1          0x0C
-+#define LTQ_STP_AR            0x10
-+
-+#define LTQ_STP_CON_SWU               (1 << 31)
-+#define LTQ_STP_2HZ           0
-+#define LTQ_STP_4HZ           (1 << 23)
-+#define LTQ_STP_8HZ           (2 << 23)
-+#define LTQ_STP_10HZ          (3 << 23)
-+#define LTQ_STP_SPEED_MASK    (0xf << 23)
-+#define LTQ_STP_UPD_FPI               (1 << 31)
-+#define LTQ_STP_UPD_MASK      (3 << 30)
-+#define LTQ_STP_ADSL_SRC      (3 << 24)
-+
-+#define LTQ_STP_GROUP0                (1 << 0)
-+
-+#define LTQ_STP_RISING                0
-+#define LTQ_STP_FALLING               (1 << 26)
-+#define LTQ_STP_EDGE_MASK     (1 << 26)
-+
-+#define ltq_stp_r32(reg)      __raw_readl(ltq_stp_membase + reg)
-+#define ltq_stp_w32(val, reg) __raw_writel(val, ltq_stp_membase + reg)
-+#define ltq_stp_w32_mask(clear, set, reg) \
-+              ltq_w32((ltq_r32(ltq_stp_membase + reg) & ~(clear)) | (set), \
-+              ltq_stp_membase + (reg))
-+
-+static int ltq_stp_shadow = 0xffff;
-+static void __iomem *ltq_stp_membase;
-+
-+static void ltq_stp_set(struct gpio_chip *chip, unsigned offset, int value)
-+{
-+      if (value)
-+              ltq_stp_shadow |= (1 << offset);
-+      else
-+              ltq_stp_shadow &= ~(1 << offset);
-+      ltq_stp_w32(ltq_stp_shadow, LTQ_STP_CPU0);
-+}
-+
-+static int ltq_stp_direction_output(struct gpio_chip *chip, unsigned offset,
-+      int value)
-+{
-+      ltq_stp_set(chip, offset, value);
-+
-+      return 0;
-+}
-+
-+static struct gpio_chip ltq_stp_chip = {
-+      .label = "ltq_stp",
-+      .direction_output = ltq_stp_direction_output,
-+      .set = ltq_stp_set,
-+      .base = 48,
-+      .ngpio = 24,
-+      .can_sleep = 1,
-+      .owner = THIS_MODULE,
-+};
-+
-+static int ltq_stp_hw_init(void)
-+{
-+      /* the 3 pins used to control the external stp */
-+      ltq_gpio_request(4, 1, 0, 1, "stp-st");
-+      ltq_gpio_request(5, 1, 0, 1, "stp-d");
-+      ltq_gpio_request(6, 1, 0, 1, "stp-sh");
-+
-+      /* sane defaults */
-+      ltq_stp_w32(0, LTQ_STP_AR);
-+      ltq_stp_w32(0, LTQ_STP_CPU0);
-+      ltq_stp_w32(0, LTQ_STP_CPU1);
-+      ltq_stp_w32(LTQ_STP_CON_SWU, LTQ_STP_CON0);
-+      ltq_stp_w32(0, LTQ_STP_CON1);
-+
-+      /* rising or falling edge */
-+      ltq_stp_w32_mask(LTQ_STP_EDGE_MASK, LTQ_STP_FALLING, LTQ_STP_CON0);
-+
-+      /* per default stp 15-0 are set */
-+      ltq_stp_w32_mask(0, LTQ_STP_GROUP0, LTQ_STP_CON1);
-+
-+      /* stp are update periodically by the FPI bus */
-+      ltq_stp_w32_mask(LTQ_STP_UPD_MASK, LTQ_STP_UPD_FPI, LTQ_STP_CON1);
-+
-+      /* set stp update speed */
-+      ltq_stp_w32_mask(LTQ_STP_SPEED_MASK, LTQ_STP_8HZ, LTQ_STP_CON1);
-+
-+      /* tell the hardware that pin (led) 0 and 1 are controlled
-+       *  by the dsl arc
-+       */
-+      ltq_stp_w32_mask(0, LTQ_STP_ADSL_SRC, LTQ_STP_CON0);
-+
-+      ltq_pmu_enable(PMU_LED);
-+      return 0;
-+}
-+
-+static int __devinit ltq_stp_probe(struct platform_device *pdev)
-+{
-+      struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      int ret = 0;
-+
-+      if (!res)
-+              return -ENOENT;
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              resource_size(res), dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to request STP memory\n");
-+              return -EBUSY;
-+      }
-+      ltq_stp_membase = devm_ioremap_nocache(&pdev->dev, res->start,
-+              resource_size(res));
-+      if (!ltq_stp_membase) {
-+              dev_err(&pdev->dev, "failed to remap STP memory\n");
-+              return -ENOMEM;
-+      }
-+      ret = gpiochip_add(&ltq_stp_chip);
-+      if (!ret)
-+              ret = ltq_stp_hw_init();
-+
-+      return ret;
-+}
-+
-+static struct platform_driver ltq_stp_driver = {
-+      .probe = ltq_stp_probe,
-+      .driver = {
-+              .name = "ltq_stp",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+int __init ltq_stp_init(void)
-+{
-+      int ret = platform_driver_register(&ltq_stp_driver);
-+
-+      if (ret)
-+              pr_info("ltq_stp: error registering platfom driver");
-+      return ret;
-+}
-+
-+postcore_initcall(ltq_stp_init);
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0009-SERIAL-Lantiq-Add-driver-for-MIPS-Lantiq-SOCs.patch b/target/linux/lantiq/patches-2.6.32/0009-SERIAL-Lantiq-Add-driver-for-MIPS-Lantiq-SOCs.patch
deleted file mode 100644 (file)
index 1d04aaa..0000000
+++ /dev/null
@@ -1,804 +0,0 @@
-From 1d2b44b1afa3ef081cd817dbf947d48eb8f5d21a Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Tue, 5 Apr 2011 14:10:57 +0200
-Subject: [PATCH 09/13] SERIAL: Lantiq: Add driver for MIPS Lantiq SOCs.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-Cc: alan@lxorguk.ukuu.org.uk
-Cc: linux-mips@linux-mips.org
-Cc: linux-serial@vger.kernel.org
-Patchwork: https://patchwork.linux-mips.org/patch/2269/
-Acked-by: Alan Cox <alan@linux.intel.com>
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- drivers/tty/serial/Kconfig  |    8 +
- drivers/tty/serial/Makefile |    1 +
- drivers/tty/serial/lantiq.c |  756 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 765 insertions(+), 0 deletions(-)
- create mode 100644 drivers/tty/serial/lantiq.c
-
---- /dev/null
-+++ b/drivers/serial/lantiq.c
-@@ -0,0 +1,756 @@
-+/*
-+ *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published
-+ * by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ * Copyright (C) 2004 Infineon IFAP DC COM CPE
-+ * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
-+ * Copyright (C) 2007 John Crispin <blogic@openwrt.org>
-+ * Copyright (C) 2010 Thomas Langer, <thomas.langer@lantiq.com>
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+#include <linux/ioport.h>
-+#include <linux/init.h>
-+#include <linux/console.h>
-+#include <linux/sysrq.h>
-+#include <linux/device.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial_core.h>
-+#include <linux/serial.h>
-+#include <linux/platform_device.h>
-+#include <linux/io.h>
-+#include <linux/clk.h>
-+
-+#include <lantiq_soc.h>
-+
-+#define PORT_LTQ_ASC          111
-+#define MAXPORTS              2
-+#define UART_DUMMY_UER_RX     1
-+#define DRVNAME                       "ltq_asc"
-+#ifdef __BIG_ENDIAN
-+#define LTQ_ASC_TBUF          (0x0020 + 3)
-+#define LTQ_ASC_RBUF          (0x0024 + 3)
-+#else
-+#define LTQ_ASC_TBUF          0x0020
-+#define LTQ_ASC_RBUF          0x0024
-+#endif
-+#define LTQ_ASC_FSTAT         0x0048
-+#define LTQ_ASC_WHBSTATE      0x0018
-+#define LTQ_ASC_STATE         0x0014
-+#define LTQ_ASC_IRNCR         0x00F8
-+#define LTQ_ASC_CLC           0x0000
-+#define LTQ_ASC_ID            0x0008
-+#define LTQ_ASC_PISEL         0x0004
-+#define LTQ_ASC_TXFCON                0x0044
-+#define LTQ_ASC_RXFCON                0x0040
-+#define LTQ_ASC_CON           0x0010
-+#define LTQ_ASC_BG            0x0050
-+#define LTQ_ASC_IRNREN                0x00F4
-+
-+#define ASC_IRNREN_TX         0x1
-+#define ASC_IRNREN_RX         0x2
-+#define ASC_IRNREN_ERR                0x4
-+#define ASC_IRNREN_TX_BUF     0x8
-+#define ASC_IRNCR_TIR         0x1
-+#define ASC_IRNCR_RIR         0x2
-+#define ASC_IRNCR_EIR         0x4
-+
-+#define ASCOPT_CSIZE          0x3
-+#define TXFIFO_FL             1
-+#define RXFIFO_FL             1
-+#define ASCCLC_DISS           0x2
-+#define ASCCLC_RMCMASK                0x0000FF00
-+#define ASCCLC_RMCOFFSET      8
-+#define ASCCON_M_8ASYNC               0x0
-+#define ASCCON_M_7ASYNC               0x2
-+#define ASCCON_ODD            0x00000020
-+#define ASCCON_STP            0x00000080
-+#define ASCCON_BRS            0x00000100
-+#define ASCCON_FDE            0x00000200
-+#define ASCCON_R              0x00008000
-+#define ASCCON_FEN            0x00020000
-+#define ASCCON_ROEN           0x00080000
-+#define ASCCON_TOEN           0x00100000
-+#define ASCSTATE_PE           0x00010000
-+#define ASCSTATE_FE           0x00020000
-+#define ASCSTATE_ROE          0x00080000
-+#define ASCSTATE_ANY          (ASCSTATE_ROE|ASCSTATE_PE|ASCSTATE_FE)
-+#define ASCWHBSTATE_CLRREN    0x00000001
-+#define ASCWHBSTATE_SETREN    0x00000002
-+#define ASCWHBSTATE_CLRPE     0x00000004
-+#define ASCWHBSTATE_CLRFE     0x00000008
-+#define ASCWHBSTATE_CLRROE    0x00000020
-+#define ASCTXFCON_TXFEN               0x0001
-+#define ASCTXFCON_TXFFLU      0x0002
-+#define ASCTXFCON_TXFITLMASK  0x3F00
-+#define ASCTXFCON_TXFITLOFF   8
-+#define ASCRXFCON_RXFEN               0x0001
-+#define ASCRXFCON_RXFFLU      0x0002
-+#define ASCRXFCON_RXFITLMASK  0x3F00
-+#define ASCRXFCON_RXFITLOFF   8
-+#define ASCFSTAT_RXFFLMASK    0x003F
-+#define ASCFSTAT_TXFFLMASK    0x3F00
-+#define ASCFSTAT_TXFREEMASK   0x3F000000
-+#define ASCFSTAT_TXFREEOFF    24
-+
-+static void lqasc_tx_chars(struct uart_port *port);
-+static struct ltq_uart_port *lqasc_port[MAXPORTS];
-+static struct uart_driver lqasc_reg;
-+static DEFINE_SPINLOCK(ltq_asc_lock);
-+
-+struct ltq_uart_port {
-+      struct uart_port        port;
-+      struct clk              *clk;
-+      unsigned int            tx_irq;
-+      unsigned int            rx_irq;
-+      unsigned int            err_irq;
-+};
-+
-+static inline struct
-+ltq_uart_port *to_ltq_uart_port(struct uart_port *port)
-+{
-+      return container_of(port, struct ltq_uart_port, port);
-+}
-+
-+static void
-+lqasc_stop_tx(struct uart_port *port)
-+{
-+      return;
-+}
-+
-+static void
-+lqasc_start_tx(struct uart_port *port)
-+{
-+      unsigned long flags;
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+      lqasc_tx_chars(port);
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+      return;
-+}
-+
-+static void
-+lqasc_stop_rx(struct uart_port *port)
-+{
-+      ltq_w32(ASCWHBSTATE_CLRREN, port->membase + LTQ_ASC_WHBSTATE);
-+}
-+
-+static void
-+lqasc_enable_ms(struct uart_port *port)
-+{
-+}
-+
-+static int
-+lqasc_rx_chars(struct uart_port *port)
-+{
-+      struct tty_struct *tty = tty_port_tty_get(&port->state->port);
-+      unsigned int ch = 0, rsr = 0, fifocnt;
-+
-+      if (!tty) {
-+              dev_dbg(port->dev, "%s:tty is busy now", __func__);
-+              return -EBUSY;
-+      }
-+      fifocnt =
-+              ltq_r32(port->membase + LTQ_ASC_FSTAT) & ASCFSTAT_RXFFLMASK;
-+      while (fifocnt--) {
-+              u8 flag = TTY_NORMAL;
-+              ch = ltq_r8(port->membase + LTQ_ASC_RBUF);
-+              rsr = (ltq_r32(port->membase + LTQ_ASC_STATE)
-+                      & ASCSTATE_ANY) | UART_DUMMY_UER_RX;
-+              tty_flip_buffer_push(tty);
-+              port->icount.rx++;
-+
-+              /*
-+               * Note that the error handling code is
-+               * out of the main execution path
-+               */
-+              if (rsr & ASCSTATE_ANY) {
-+                      if (rsr & ASCSTATE_PE) {
-+                              port->icount.parity++;
-+                              ltq_w32_mask(0, ASCWHBSTATE_CLRPE,
-+                                      port->membase + LTQ_ASC_WHBSTATE);
-+                      } else if (rsr & ASCSTATE_FE) {
-+                              port->icount.frame++;
-+                              ltq_w32_mask(0, ASCWHBSTATE_CLRFE,
-+                                      port->membase + LTQ_ASC_WHBSTATE);
-+                      }
-+                      if (rsr & ASCSTATE_ROE) {
-+                              port->icount.overrun++;
-+                              ltq_w32_mask(0, ASCWHBSTATE_CLRROE,
-+                                      port->membase + LTQ_ASC_WHBSTATE);
-+                      }
-+
-+                      rsr &= port->read_status_mask;
-+
-+                      if (rsr & ASCSTATE_PE)
-+                              flag = TTY_PARITY;
-+                      else if (rsr & ASCSTATE_FE)
-+                              flag = TTY_FRAME;
-+              }
-+
-+              if ((rsr & port->ignore_status_mask) == 0)
-+                      tty_insert_flip_char(tty, ch, flag);
-+
-+              if (rsr & ASCSTATE_ROE)
-+                      /*
-+                       * Overrun is special, since it's reported
-+                       * immediately, and doesn't affect the current
-+                       * character
-+                       */
-+                      tty_insert_flip_char(tty, 0, TTY_OVERRUN);
-+      }
-+      if (ch != 0)
-+              tty_flip_buffer_push(tty);
-+      tty_kref_put(tty);
-+      return 0;
-+}
-+
-+static void
-+lqasc_tx_chars(struct uart_port *port)
-+{
-+      struct circ_buf *xmit = &port->state->xmit;
-+      if (uart_tx_stopped(port)) {
-+              lqasc_stop_tx(port);
-+              return;
-+      }
-+
-+      while (((ltq_r32(port->membase + LTQ_ASC_FSTAT) &
-+              ASCFSTAT_TXFREEMASK) >> ASCFSTAT_TXFREEOFF) != 0) {
-+              if (port->x_char) {
-+                      ltq_w8(port->x_char, port->membase + LTQ_ASC_TBUF);
-+                      port->icount.tx++;
-+                      port->x_char = 0;
-+                      continue;
-+              }
-+
-+              if (uart_circ_empty(xmit))
-+                      break;
-+
-+              ltq_w8(port->state->xmit.buf[port->state->xmit.tail],
-+                      port->membase + LTQ_ASC_TBUF);
-+              xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-+              port->icount.tx++;
-+      }
-+
-+      if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
-+              uart_write_wakeup(port);
-+}
-+
-+static irqreturn_t
-+lqasc_tx_int(int irq, void *_port)
-+{
-+      unsigned long flags;
-+      struct uart_port *port = (struct uart_port *)_port;
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+      ltq_w32(ASC_IRNCR_TIR, port->membase + LTQ_ASC_IRNCR);
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+      lqasc_start_tx(port);
-+      return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t
-+lqasc_err_int(int irq, void *_port)
-+{
-+      unsigned long flags;
-+      struct uart_port *port = (struct uart_port *)_port;
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+      /* clear any pending interrupts */
-+      ltq_w32_mask(0, ASCWHBSTATE_CLRPE | ASCWHBSTATE_CLRFE |
-+              ASCWHBSTATE_CLRROE, port->membase + LTQ_ASC_WHBSTATE);
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+      return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t
-+lqasc_rx_int(int irq, void *_port)
-+{
-+      unsigned long flags;
-+      struct uart_port *port = (struct uart_port *)_port;
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+      ltq_w32(ASC_IRNCR_RIR, port->membase + LTQ_ASC_IRNCR);
-+      lqasc_rx_chars(port);
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+      return IRQ_HANDLED;
-+}
-+
-+static unsigned int
-+lqasc_tx_empty(struct uart_port *port)
-+{
-+      int status;
-+      status = ltq_r32(port->membase + LTQ_ASC_FSTAT) & ASCFSTAT_TXFFLMASK;
-+      return status ? 0 : TIOCSER_TEMT;
-+}
-+
-+static unsigned int
-+lqasc_get_mctrl(struct uart_port *port)
-+{
-+      return TIOCM_CTS | TIOCM_CAR | TIOCM_DSR;
-+}
-+
-+static void
-+lqasc_set_mctrl(struct uart_port *port, u_int mctrl)
-+{
-+}
-+
-+static void
-+lqasc_break_ctl(struct uart_port *port, int break_state)
-+{
-+}
-+
-+static int
-+lqasc_startup(struct uart_port *port)
-+{
-+      struct ltq_uart_port *ltq_port = to_ltq_uart_port(port);
-+      int retval;
-+
-+      port->uartclk = clk_get_rate(ltq_port->clk);
-+
-+      ltq_w32_mask(ASCCLC_DISS | ASCCLC_RMCMASK, (1 << ASCCLC_RMCOFFSET),
-+              port->membase + LTQ_ASC_CLC);
-+
-+      ltq_w32(0, port->membase + LTQ_ASC_PISEL);
-+      ltq_w32(
-+              ((TXFIFO_FL << ASCTXFCON_TXFITLOFF) & ASCTXFCON_TXFITLMASK) |
-+              ASCTXFCON_TXFEN | ASCTXFCON_TXFFLU,
-+              port->membase + LTQ_ASC_TXFCON);
-+      ltq_w32(
-+              ((RXFIFO_FL << ASCRXFCON_RXFITLOFF) & ASCRXFCON_RXFITLMASK)
-+              | ASCRXFCON_RXFEN | ASCRXFCON_RXFFLU,
-+              port->membase + LTQ_ASC_RXFCON);
-+      /* make sure other settings are written to hardware before
-+       * setting enable bits
-+       */
-+      wmb();
-+      ltq_w32_mask(0, ASCCON_M_8ASYNC | ASCCON_FEN | ASCCON_TOEN |
-+              ASCCON_ROEN, port->membase + LTQ_ASC_CON);
-+
-+      retval = request_irq(ltq_port->tx_irq, lqasc_tx_int,
-+              IRQF_DISABLED, "asc_tx", port);
-+      if (retval) {
-+              pr_err("failed to request lqasc_tx_int\n");
-+              return retval;
-+      }
-+
-+      retval = request_irq(ltq_port->rx_irq, lqasc_rx_int,
-+              IRQF_DISABLED, "asc_rx", port);
-+      if (retval) {
-+              pr_err("failed to request lqasc_rx_int\n");
-+              goto err1;
-+      }
-+
-+      retval = request_irq(ltq_port->err_irq, lqasc_err_int,
-+              IRQF_DISABLED, "asc_err", port);
-+      if (retval) {
-+              pr_err("failed to request lqasc_err_int\n");
-+              goto err2;
-+      }
-+
-+      ltq_w32(ASC_IRNREN_RX | ASC_IRNREN_ERR | ASC_IRNREN_TX,
-+              port->membase + LTQ_ASC_IRNREN);
-+      return 0;
-+
-+err2:
-+      free_irq(ltq_port->rx_irq, port);
-+err1:
-+      free_irq(ltq_port->tx_irq, port);
-+      return retval;
-+}
-+
-+static void
-+lqasc_shutdown(struct uart_port *port)
-+{
-+      struct ltq_uart_port *ltq_port = to_ltq_uart_port(port);
-+      free_irq(ltq_port->tx_irq, port);
-+      free_irq(ltq_port->rx_irq, port);
-+      free_irq(ltq_port->err_irq, port);
-+
-+      ltq_w32(0, port->membase + LTQ_ASC_CON);
-+      ltq_w32_mask(ASCRXFCON_RXFEN, ASCRXFCON_RXFFLU,
-+              port->membase + LTQ_ASC_RXFCON);
-+      ltq_w32_mask(ASCTXFCON_TXFEN, ASCTXFCON_TXFFLU,
-+              port->membase + LTQ_ASC_TXFCON);
-+}
-+
-+static void
-+lqasc_set_termios(struct uart_port *port,
-+      struct ktermios *new, struct ktermios *old)
-+{
-+      unsigned int cflag;
-+      unsigned int iflag;
-+      unsigned int divisor;
-+      unsigned int baud;
-+      unsigned int con = 0;
-+      unsigned long flags;
-+
-+      cflag = new->c_cflag;
-+      iflag = new->c_iflag;
-+
-+      switch (cflag & CSIZE) {
-+      case CS7:
-+              con = ASCCON_M_7ASYNC;
-+              break;
-+
-+      case CS5:
-+      case CS6:
-+      default:
-+              new->c_cflag &= ~ CSIZE;
-+              new->c_cflag |= CS8;
-+              con = ASCCON_M_8ASYNC;
-+              break;
-+      }
-+
-+      cflag &= ~CMSPAR; /* Mark/Space parity is not supported */
-+
-+      if (cflag & CSTOPB)
-+              con |= ASCCON_STP;
-+
-+      if (cflag & PARENB) {
-+              if (!(cflag & PARODD))
-+                      con &= ~ASCCON_ODD;
-+              else
-+                      con |= ASCCON_ODD;
-+      }
-+
-+      port->read_status_mask = ASCSTATE_ROE;
-+      if (iflag & INPCK)
-+              port->read_status_mask |= ASCSTATE_FE | ASCSTATE_PE;
-+
-+      port->ignore_status_mask = 0;
-+      if (iflag & IGNPAR)
-+              port->ignore_status_mask |= ASCSTATE_FE | ASCSTATE_PE;
-+
-+      if (iflag & IGNBRK) {
-+              /*
-+               * If we're ignoring parity and break indicators,
-+               * ignore overruns too (for real raw support).
-+               */
-+              if (iflag & IGNPAR)
-+                      port->ignore_status_mask |= ASCSTATE_ROE;
-+      }
-+
-+      if ((cflag & CREAD) == 0)
-+              port->ignore_status_mask |= UART_DUMMY_UER_RX;
-+
-+      /* set error signals  - framing, parity  and overrun, enable receiver */
-+      con |= ASCCON_FEN | ASCCON_TOEN | ASCCON_ROEN;
-+
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+
-+      /* set up CON */
-+      ltq_w32_mask(0, con, port->membase + LTQ_ASC_CON);
-+
-+      /* Set baud rate - take a divider of 2 into account */
-+      baud = uart_get_baud_rate(port, new, old, 0, port->uartclk / 16);
-+      divisor = uart_get_divisor(port, baud);
-+      divisor = divisor / 2 - 1;
-+
-+      /* disable the baudrate generator */
-+      ltq_w32_mask(ASCCON_R, 0, port->membase + LTQ_ASC_CON);
-+
-+      /* make sure the fractional divider is off */
-+      ltq_w32_mask(ASCCON_FDE, 0, port->membase + LTQ_ASC_CON);
-+
-+      /* set up to use divisor of 2 */
-+      ltq_w32_mask(ASCCON_BRS, 0, port->membase + LTQ_ASC_CON);
-+
-+      /* now we can write the new baudrate into the register */
-+      ltq_w32(divisor, port->membase + LTQ_ASC_BG);
-+
-+      /* turn the baudrate generator back on */
-+      ltq_w32_mask(0, ASCCON_R, port->membase + LTQ_ASC_CON);
-+
-+      /* enable rx */
-+      ltq_w32(ASCWHBSTATE_SETREN, port->membase + LTQ_ASC_WHBSTATE);
-+
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+
-+      /* Don't rewrite B0 */
-+        if (tty_termios_baud_rate(new))
-+              tty_termios_encode_baud_rate(new, baud, baud);
-+}
-+
-+static const char*
-+lqasc_type(struct uart_port *port)
-+{
-+      if (port->type == PORT_LTQ_ASC)
-+              return DRVNAME;
-+      else
-+              return NULL;
-+}
-+
-+static void
-+lqasc_release_port(struct uart_port *port)
-+{
-+      if (port->flags & UPF_IOREMAP) {
-+              iounmap(port->membase);
-+              port->membase = NULL;
-+      }
-+}
-+
-+static int
-+lqasc_request_port(struct uart_port *port)
-+{
-+      struct platform_device *pdev = to_platform_device(port->dev);
-+      struct resource *res;
-+      int size;
-+
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res) {
-+              dev_err(&pdev->dev, "cannot obtain I/O memory region");
-+              return -ENODEV;
-+      }
-+      size = resource_size(res);
-+
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              size, dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev, "cannot request I/O memory region");
-+              return -EBUSY;
-+      }
-+
-+      if (port->flags & UPF_IOREMAP) {
-+              port->membase = devm_ioremap_nocache(&pdev->dev,
-+                      port->mapbase, size);
-+              if (port->membase == NULL)
-+                      return -ENOMEM;
-+      }
-+      return 0;
-+}
-+
-+static void
-+lqasc_config_port(struct uart_port *port, int flags)
-+{
-+      if (flags & UART_CONFIG_TYPE) {
-+              port->type = PORT_LTQ_ASC;
-+              lqasc_request_port(port);
-+      }
-+}
-+
-+static int
-+lqasc_verify_port(struct uart_port *port,
-+      struct serial_struct *ser)
-+{
-+      int ret = 0;
-+      if (ser->type != PORT_UNKNOWN && ser->type != PORT_LTQ_ASC)
-+              ret = -EINVAL;
-+      if (ser->irq < 0 || ser->irq >= NR_IRQS)
-+              ret = -EINVAL;
-+      if (ser->baud_base < 9600)
-+              ret = -EINVAL;
-+      return ret;
-+}
-+
-+static struct uart_ops lqasc_pops = {
-+      .tx_empty =     lqasc_tx_empty,
-+      .set_mctrl =    lqasc_set_mctrl,
-+      .get_mctrl =    lqasc_get_mctrl,
-+      .stop_tx =      lqasc_stop_tx,
-+      .start_tx =     lqasc_start_tx,
-+      .stop_rx =      lqasc_stop_rx,
-+      .enable_ms =    lqasc_enable_ms,
-+      .break_ctl =    lqasc_break_ctl,
-+      .startup =      lqasc_startup,
-+      .shutdown =     lqasc_shutdown,
-+      .set_termios =  lqasc_set_termios,
-+      .type =         lqasc_type,
-+      .release_port = lqasc_release_port,
-+      .request_port = lqasc_request_port,
-+      .config_port =  lqasc_config_port,
-+      .verify_port =  lqasc_verify_port,
-+};
-+
-+static void
-+lqasc_console_putchar(struct uart_port *port, int ch)
-+{
-+      int fifofree;
-+
-+      if (!port->membase)
-+              return;
-+
-+      do {
-+              fifofree = (ltq_r32(port->membase + LTQ_ASC_FSTAT)
-+                      & ASCFSTAT_TXFREEMASK) >> ASCFSTAT_TXFREEOFF;
-+      } while (fifofree == 0);
-+      ltq_w8(ch, port->membase + LTQ_ASC_TBUF);
-+}
-+
-+
-+static void
-+lqasc_console_write(struct console *co, const char *s, u_int count)
-+{
-+      struct ltq_uart_port *ltq_port;
-+      struct uart_port *port;
-+      unsigned long flags;
-+
-+      if (co->index >= MAXPORTS)
-+              return;
-+
-+      ltq_port = lqasc_port[co->index];
-+      if (!ltq_port)
-+              return;
-+
-+      port = &ltq_port->port;
-+
-+      spin_lock_irqsave(&ltq_asc_lock, flags);
-+      uart_console_write(port, s, count, lqasc_console_putchar);
-+      spin_unlock_irqrestore(&ltq_asc_lock, flags);
-+}
-+
-+static int __init
-+lqasc_console_setup(struct console *co, char *options)
-+{
-+      struct ltq_uart_port *ltq_port;
-+      struct uart_port *port;
-+      int baud = 115200;
-+      int bits = 8;
-+      int parity = 'n';
-+      int flow = 'n';
-+
-+      if (co->index >= MAXPORTS)
-+              return -ENODEV;
-+
-+      ltq_port = lqasc_port[co->index];
-+      if (!ltq_port)
-+              return -ENODEV;
-+
-+      port = &ltq_port->port;
-+
-+      port->uartclk = clk_get_rate(ltq_port->clk);
-+
-+      if (options)
-+              uart_parse_options(options, &baud, &parity, &bits, &flow);
-+      return uart_set_options(port, co, baud, parity, bits, flow);
-+}
-+
-+static struct console lqasc_console = {
-+      .name =         "ttyLTQ",
-+      .write =        lqasc_console_write,
-+      .device =       uart_console_device,
-+      .setup =        lqasc_console_setup,
-+      .flags =        CON_PRINTBUFFER,
-+      .index =        -1,
-+      .data =         &lqasc_reg,
-+};
-+
-+static int __init
-+lqasc_console_init(void)
-+{
-+      register_console(&lqasc_console);
-+      return 0;
-+}
-+console_initcall(lqasc_console_init);
-+
-+static struct uart_driver lqasc_reg = {
-+      .owner =        THIS_MODULE,
-+      .driver_name =  DRVNAME,
-+      .dev_name =     "ttyLTQ",
-+      .major =        0,
-+      .minor =        0,
-+      .nr =           MAXPORTS,
-+      .cons =         &lqasc_console,
-+};
-+
-+static int __init
-+lqasc_probe(struct platform_device *pdev)
-+{
-+      struct ltq_uart_port *ltq_port;
-+      struct uart_port *port;
-+      struct resource *mmres, *irqres;
-+      int tx_irq, rx_irq, err_irq;
-+      struct clk *clk;
-+      int ret;
-+
-+      mmres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      irqres = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-+      if (!mmres || !irqres)
-+              return -ENODEV;
-+
-+      if (pdev->id >= MAXPORTS)
-+              return -EBUSY;
-+
-+      if (lqasc_port[pdev->id] != NULL)
-+              return -EBUSY;
-+
-+      clk = clk_get(&pdev->dev, "fpi");
-+      if (IS_ERR(clk)) {
-+              pr_err("failed to get fpi clk\n");
-+              return -ENOENT;
-+      }
-+
-+      tx_irq = platform_get_irq_byname(pdev, "tx");
-+      rx_irq = platform_get_irq_byname(pdev, "rx");
-+      err_irq = platform_get_irq_byname(pdev, "err");
-+      if ((tx_irq < 0) | (rx_irq < 0) | (err_irq < 0))
-+              return -ENODEV;
-+
-+      ltq_port = kzalloc(sizeof(struct ltq_uart_port), GFP_KERNEL);
-+      if (!ltq_port)
-+              return -ENOMEM;
-+
-+      port = &ltq_port->port;
-+
-+      port->iotype    = SERIAL_IO_MEM;
-+      port->flags     = ASYNC_BOOT_AUTOCONF | UPF_IOREMAP;
-+      port->ops       = &lqasc_pops;
-+      port->fifosize  = 16;
-+      port->type      = PORT_LTQ_ASC,
-+      port->line      = pdev->id;
-+      port->dev       = &pdev->dev;
-+
-+      port->irq       = tx_irq; /* unused, just to be backward-compatibe */
-+      port->mapbase   = mmres->start;
-+
-+      ltq_port->clk   = clk;
-+
-+      ltq_port->tx_irq = tx_irq;
-+      ltq_port->rx_irq = rx_irq;
-+      ltq_port->err_irq = err_irq;
-+
-+      lqasc_port[pdev->id] = ltq_port;
-+      platform_set_drvdata(pdev, ltq_port);
-+
-+      ret = uart_add_one_port(&lqasc_reg, port);
-+
-+      return ret;
-+}
-+
-+static struct platform_driver lqasc_driver = {
-+      .driver         = {
-+              .name   = DRVNAME,
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+int __init
-+init_lqasc(void)
-+{
-+      int ret;
-+
-+      ret = uart_register_driver(&lqasc_reg);
-+      if (ret != 0)
-+              return ret;
-+
-+      ret = platform_driver_probe(&lqasc_driver, lqasc_probe);
-+      if (ret != 0)
-+              uart_unregister_driver(&lqasc_reg);
-+
-+      return ret;
-+}
-+
-+module_init(init_lqasc);
-+
-+MODULE_DESCRIPTION("Lantiq serial port driver");
-+MODULE_LICENSE("GPL");
---- a/drivers/serial/Kconfig
-+++ b/drivers/serial/Kconfig
-@@ -1383,6 +1383,14 @@
-       help
-         Support for Console on the NWP serial ports.
-+config SERIAL_LANTIQ
-+      bool "Lantiq serial driver"
-+      depends on LANTIQ
-+      select SERIAL_CORE
-+      select SERIAL_CORE_CONSOLE
-+      help
-+        Support for console and UART on Lantiq SoCs.
-+
- config SERIAL_QE
-       tristate "Freescale QUICC Engine serial port support"
-       depends on QUICC_ENGINE
---- a/drivers/serial/Makefile
-+++ b/drivers/serial/Makefile
-@@ -81,3 +81,4 @@
- obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
- obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
- obj-$(CONFIG_SERIAL_TIMBERDALE)       += timbuart.o
-+obj-$(CONFIG_SERIAL_LANTIQ)   += lantiq.o
diff --git a/target/linux/lantiq/patches-2.6.32/0010-MIPS-Lantiq-Add-DMA-support.patch b/target/linux/lantiq/patches-2.6.32/0010-MIPS-Lantiq-Add-DMA-support.patch
deleted file mode 100644 (file)
index fd9981a..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-From bd620ec1ca053bab8ce2562968700e6f80e4ff83 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Fri, 6 May 2011 00:10:00 +0200
-Subject: [PATCH 10/13] MIPS: Lantiq: Add DMA support
-
-This patch adds support for the DMA engine found inside the XWAY family of
-SoCs. The engine has 5 ports and 20 channels.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2355/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- .../mips/include/asm/mach-lantiq/xway/lantiq_soc.h |    3 +-
- arch/mips/include/asm/mach-lantiq/xway/xway_dma.h  |   60 +++++
- arch/mips/lantiq/xway/Makefile                     |    2 +-
- arch/mips/lantiq/xway/devices.h                    |    1 +
- arch/mips/lantiq/xway/dma.c                        |  253 ++++++++++++++++++++
- 5 files changed, 317 insertions(+), 2 deletions(-)
- create mode 100644 arch/mips/include/asm/mach-lantiq/xway/xway_dma.h
- create mode 100644 arch/mips/lantiq/xway/dma.c
-
-diff --git a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-index 343e82c..4827afb 100644
---- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-@@ -86,7 +86,8 @@
- #define LTQ_PPE32_SIZE                0x40000
- /* DMA */
--#define LTQ_DMA_BASE_ADDR     0xBE104100
-+#define LTQ_DMA_BASE_ADDR     0x1E104100
-+#define LTQ_DMA_SIZE          0x800
- /* PCI */
- #define PCI_CR_BASE_ADDR      0x1E105400
-diff --git a/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h b/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h
-new file mode 100644
-index 0000000..872943a
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/xway/xway_dma.h
-@@ -0,0 +1,60 @@
-+/*
-+ *   This program is free software; you can redistribute it and/or modify it
-+ *   under the terms of the GNU General Public License version 2 as published
-+ *   by the Free Software Foundation.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ *   Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#ifndef LTQ_DMA_H__
-+#define LTQ_DMA_H__
-+
-+#define LTQ_DESC_SIZE         0x08    /* each descriptor is 64bit */
-+#define LTQ_DESC_NUM          0x40    /* 64 descriptors / channel */
-+
-+#define LTQ_DMA_OWN           BIT(31) /* owner bit */
-+#define LTQ_DMA_C             BIT(30) /* complete bit */
-+#define LTQ_DMA_SOP           BIT(29) /* start of packet */
-+#define LTQ_DMA_EOP           BIT(28) /* end of packet */
-+#define LTQ_DMA_TX_OFFSET(x)  ((x & 0x1f) << 23) /* data bytes offset */
-+#define LTQ_DMA_RX_OFFSET(x)  ((x & 0x7) << 23) /* data bytes offset */
-+#define LTQ_DMA_SIZE_MASK     (0xffff) /* the size field is 16 bit */
-+
-+struct ltq_dma_desc {
-+      u32 ctl;
-+      u32 addr;
-+};
-+
-+struct ltq_dma_channel {
-+      int nr;                         /* the channel number */
-+      int irq;                        /* the mapped irq */
-+      int desc;                       /* the current descriptor */
-+      struct ltq_dma_desc *desc_base; /* the descriptor base */
-+      int phys;                       /* physical addr */
-+};
-+
-+enum {
-+      DMA_PORT_ETOP = 0,
-+      DMA_PORT_DEU,
-+};
-+
-+extern void ltq_dma_enable_irq(struct ltq_dma_channel *ch);
-+extern void ltq_dma_disable_irq(struct ltq_dma_channel *ch);
-+extern void ltq_dma_ack_irq(struct ltq_dma_channel *ch);
-+extern void ltq_dma_open(struct ltq_dma_channel *ch);
-+extern void ltq_dma_close(struct ltq_dma_channel *ch);
-+extern void ltq_dma_alloc_tx(struct ltq_dma_channel *ch);
-+extern void ltq_dma_alloc_rx(struct ltq_dma_channel *ch);
-+extern void ltq_dma_free(struct ltq_dma_channel *ch);
-+extern void ltq_dma_init_port(int p);
-+
-+#endif
-diff --git a/arch/mips/lantiq/xway/Makefile b/arch/mips/lantiq/xway/Makefile
-index 6b5e07e..c517f2e 100644
---- a/arch/mips/lantiq/xway/Makefile
-+++ b/arch/mips/lantiq/xway/Makefile
-@@ -1,4 +1,4 @@
--obj-y := pmu.o ebu.o reset.o gpio.o gpio_stp.o gpio_ebu.o devices.o
-+obj-y := pmu.o ebu.o reset.o gpio.o gpio_stp.o gpio_ebu.o devices.o dma.o
- obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o setup-xway.o
- obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.o setup-ase.o
-diff --git a/arch/mips/lantiq/xway/devices.h b/arch/mips/lantiq/xway/devices.h
-index 51f56b5..d573084 100644
---- a/arch/mips/lantiq/xway/devices.h
-+++ b/arch/mips/lantiq/xway/devices.h
-@@ -10,6 +10,7 @@
- #define _LTQ_DEVICES_XWAY_H__
- #include "../devices.h"
-+#include <linux/phy.h>
- extern void ltq_register_gpio(void);
- extern void ltq_register_gpio_stp(void);
-diff --git a/arch/mips/lantiq/xway/dma.c b/arch/mips/lantiq/xway/dma.c
-new file mode 100644
-index 0000000..4278a45
---- /dev/null
-+++ b/arch/mips/lantiq/xway/dma.c
-@@ -0,0 +1,253 @@
-+/*
-+ *   This program is free software; you can redistribute it and/or modify it
-+ *   under the terms of the GNU General Public License version 2 as published
-+ *   by the Free Software Foundation.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ *   Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/io.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <lantiq_soc.h>
-+#include <xway_dma.h>
-+
-+#define LTQ_DMA_CTRL          0x10
-+#define LTQ_DMA_CPOLL         0x14
-+#define LTQ_DMA_CS            0x18
-+#define LTQ_DMA_CCTRL         0x1C
-+#define LTQ_DMA_CDBA          0x20
-+#define LTQ_DMA_CDLEN         0x24
-+#define LTQ_DMA_CIS           0x28
-+#define LTQ_DMA_CIE           0x2C
-+#define LTQ_DMA_PS            0x40
-+#define LTQ_DMA_PCTRL         0x44
-+#define LTQ_DMA_IRNEN         0xf4
-+
-+#define DMA_DESCPT            BIT(3)          /* descriptor complete irq */
-+#define DMA_TX                        BIT(8)          /* TX channel direction */
-+#define DMA_CHAN_ON           BIT(0)          /* channel on / off bit */
-+#define DMA_PDEN              BIT(6)          /* enable packet drop */
-+#define DMA_CHAN_RST          BIT(1)          /* channel on / off bit */
-+#define DMA_RESET             BIT(0)          /* channel on / off bit */
-+#define DMA_IRQ_ACK           0x7e            /* IRQ status register */
-+#define DMA_POLL              BIT(31)         /* turn on channel polling */
-+#define DMA_CLK_DIV4          BIT(6)          /* polling clock divider */
-+#define DMA_2W_BURST          BIT(1)          /* 2 word burst length */
-+#define DMA_MAX_CHANNEL               20              /* the soc has 20 channels */
-+#define DMA_ETOP_ENDIANESS    (0xf << 8) /* endianess swap etop channels */
-+#define DMA_WEIGHT    (BIT(17) | BIT(16))     /* default channel wheight */
-+
-+#define ltq_dma_r32(x)                        ltq_r32(ltq_dma_membase + (x))
-+#define ltq_dma_w32(x, y)             ltq_w32(x, ltq_dma_membase + (y))
-+#define ltq_dma_w32_mask(x, y, z)     ltq_w32_mask(x, y, \
-+                                              ltq_dma_membase + (z))
-+
-+static struct resource ltq_dma_resource = {
-+      .name   = "dma",
-+      .start  = LTQ_DMA_BASE_ADDR,
-+      .end    = LTQ_DMA_BASE_ADDR + LTQ_DMA_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+static void __iomem *ltq_dma_membase;
-+
-+void
-+ltq_dma_enable_irq(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32_mask(0, 1 << ch->nr, LTQ_DMA_IRNEN);
-+      local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_enable_irq);
-+
-+void
-+ltq_dma_disable_irq(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32_mask(1 << ch->nr, 0, LTQ_DMA_IRNEN);
-+      local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_disable_irq);
-+
-+void
-+ltq_dma_ack_irq(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32(DMA_IRQ_ACK, LTQ_DMA_CIS);
-+      local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_ack_irq);
-+
-+void
-+ltq_dma_open(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flag;
-+
-+      local_irq_save(flag);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32_mask(0, DMA_CHAN_ON, LTQ_DMA_CCTRL);
-+      ltq_dma_enable_irq(ch);
-+      local_irq_restore(flag);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_open);
-+
-+void
-+ltq_dma_close(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flag;
-+
-+      local_irq_save(flag);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL);
-+      ltq_dma_disable_irq(ch);
-+      local_irq_restore(flag);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_close);
-+
-+static void
-+ltq_dma_alloc(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      ch->desc = 0;
-+      ch->desc_base = dma_alloc_coherent(NULL,
-+                              LTQ_DESC_NUM * LTQ_DESC_SIZE,
-+                              &ch->phys, GFP_ATOMIC);
-+      memset(ch->desc_base, 0, LTQ_DESC_NUM * LTQ_DESC_SIZE);
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(ch->nr, LTQ_DMA_CS);
-+      ltq_dma_w32(ch->phys, LTQ_DMA_CDBA);
-+      ltq_dma_w32(LTQ_DESC_NUM, LTQ_DMA_CDLEN);
-+      ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL);
-+      wmb();
-+      ltq_dma_w32_mask(0, DMA_CHAN_RST, LTQ_DMA_CCTRL);
-+      while (ltq_dma_r32(LTQ_DMA_CCTRL) & DMA_CHAN_RST)
-+              ;
-+      local_irq_restore(flags);
-+}
-+
-+void
-+ltq_dma_alloc_tx(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      ltq_dma_alloc(ch);
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(DMA_DESCPT, LTQ_DMA_CIE);
-+      ltq_dma_w32_mask(0, 1 << ch->nr, LTQ_DMA_IRNEN);
-+      ltq_dma_w32(DMA_WEIGHT | DMA_TX, LTQ_DMA_CCTRL);
-+      local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_alloc_tx);
-+
-+void
-+ltq_dma_alloc_rx(struct ltq_dma_channel *ch)
-+{
-+      unsigned long flags;
-+
-+      ltq_dma_alloc(ch);
-+
-+      local_irq_save(flags);
-+      ltq_dma_w32(DMA_DESCPT, LTQ_DMA_CIE);
-+      ltq_dma_w32_mask(0, 1 << ch->nr, LTQ_DMA_IRNEN);
-+      ltq_dma_w32(DMA_WEIGHT, LTQ_DMA_CCTRL);
-+      local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_alloc_rx);
-+
-+void
-+ltq_dma_free(struct ltq_dma_channel *ch)
-+{
-+      if (!ch->desc_base)
-+              return;
-+      ltq_dma_close(ch);
-+      dma_free_coherent(NULL, LTQ_DESC_NUM * LTQ_DESC_SIZE,
-+              ch->desc_base, ch->phys);
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_free);
-+
-+void
-+ltq_dma_init_port(int p)
-+{
-+      ltq_dma_w32(p, LTQ_DMA_PS);
-+      switch (p) {
-+      case DMA_PORT_ETOP:
-+              /*
-+               * Tell the DMA engine to swap the endianess of data frames and
-+               * drop packets if the channel arbitration fails.
-+               */
-+              ltq_dma_w32_mask(0, DMA_ETOP_ENDIANESS | DMA_PDEN,
-+                      LTQ_DMA_PCTRL);
-+              break;
-+
-+      case DMA_PORT_DEU:
-+              ltq_dma_w32((DMA_2W_BURST << 4) | (DMA_2W_BURST << 2),
-+                      LTQ_DMA_PCTRL);
-+              break;
-+
-+      default:
-+              break;
-+      }
-+}
-+EXPORT_SYMBOL_GPL(ltq_dma_init_port);
-+
-+int __init
-+ltq_dma_init(void)
-+{
-+      int i;
-+
-+      /* insert and request the memory region */
-+      if (insert_resource(&iomem_resource, &ltq_dma_resource) < 0)
-+              panic("Failed to insert dma memory\n");
-+
-+      if (request_mem_region(ltq_dma_resource.start,
-+                      resource_size(&ltq_dma_resource), "dma") < 0)
-+              panic("Failed to request dma memory\n");
-+
-+      /* remap dma register range */
-+      ltq_dma_membase = ioremap_nocache(ltq_dma_resource.start,
-+                              resource_size(&ltq_dma_resource));
-+      if (!ltq_dma_membase)
-+              panic("Failed to remap dma memory\n");
-+
-+      /* power up and reset the dma engine */
-+      ltq_pmu_enable(PMU_DMA);
-+      ltq_dma_w32_mask(0, DMA_RESET, LTQ_DMA_CTRL);
-+
-+      /* disable all interrupts */
-+      ltq_dma_w32(0, LTQ_DMA_IRNEN);
-+
-+      /* reset/configure each channel */
-+      for (i = 0; i < DMA_MAX_CHANNEL; i++) {
-+              ltq_dma_w32(i, LTQ_DMA_CS);
-+              ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL);
-+              ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL);
-+              ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL);
-+      }
-+      return 0;
-+}
-+
-+postcore_initcall(ltq_dma_init);
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0011-MIPS-Lantiq-Add-ethernet-driver.patch b/target/linux/lantiq/patches-2.6.32/0011-MIPS-Lantiq-Add-ethernet-driver.patch
deleted file mode 100644 (file)
index 0d869de..0000000
+++ /dev/null
@@ -1,943 +0,0 @@
-From 435de86088af82496bcba69165cd7422bb4622ec Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Fri, 6 May 2011 00:10:01 +0200
-Subject: [PATCH 11/13] MIPS: Lantiq: Add ethernet driver
-
-This patch adds the driver for the ETOP Packet Processing Engine (PPE32)
-found inside the XWAY family of Lantiq MIPS SoCs. This driver makes 100MBit
-ethernet work. Support for all 8 dma channels, gbit and the embedded switch
-found on the ar9/vr9 still needs to be implemented.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: linux-mips@linux-mips.org
-Cc: netdev@vger.kernel.org
-Patchwork: https://patchwork.linux-mips.org/patch/2357/
-Acked-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- .../mips/include/asm/mach-lantiq/lantiq_platform.h |    7 +
- .../mips/include/asm/mach-lantiq/xway/lantiq_soc.h |    4 +-
- arch/mips/lantiq/xway/devices.c                    |   23 +
- arch/mips/lantiq/xway/devices.h                    |    1 +
- drivers/net/Kconfig                                |    7 +
- drivers/net/Makefile                               |    1 +
- drivers/net/lantiq_etop.c                          |  805 ++++++++++++++++++++
- 7 files changed, 846 insertions(+), 2 deletions(-)
- create mode 100644 drivers/net/lantiq_etop.c
-
---- a/arch/mips/include/asm/mach-lantiq/lantiq_platform.h
-+++ b/arch/mips/include/asm/mach-lantiq/lantiq_platform.h
-@@ -10,6 +10,7 @@
- #define _LANTIQ_PLATFORM_H__
- #include <linux/mtd/partitions.h>
-+#include <linux/socket.h>
- /* struct used to pass info to the pci core */
- enum {
-@@ -43,4 +44,10 @@
-       int irq[16];
- };
-+/* struct used to pass info to network drivers */
-+struct ltq_eth_data {
-+      struct sockaddr mac;
-+      int mii_mode;
-+};
-+
- #endif
---- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-@@ -82,8 +82,8 @@
- #define PMU_SWITCH            0x10000000
- /* ETOP - ethernet */
--#define LTQ_PPE32_BASE_ADDR   0xBE180000
--#define LTQ_PPE32_SIZE                0x40000
-+#define LTQ_ETOP_BASE_ADDR    0x1E180000
-+#define LTQ_ETOP_SIZE         0x40000
- /* DMA */
- #define LTQ_DMA_BASE_ADDR     0x1E104100
---- a/arch/mips/lantiq/xway/devices.c
-+++ b/arch/mips/lantiq/xway/devices.c
-@@ -96,3 +96,26 @@
-       platform_device_register_simple("ltq_asc", 0,
-               ltq_ase_asc_resources, ARRAY_SIZE(ltq_ase_asc_resources));
- }
-+
-+/* ethernet */
-+static struct resource ltq_etop_resources = {
-+      .name   = "etop",
-+      .start  = LTQ_ETOP_BASE_ADDR,
-+      .end    = LTQ_ETOP_BASE_ADDR + LTQ_ETOP_SIZE - 1,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+static struct platform_device ltq_etop = {
-+      .name           = "ltq_etop",
-+      .resource       = &ltq_etop_resources,
-+      .num_resources  = 1,
-+};
-+
-+void __init
-+ltq_register_etop(struct ltq_eth_data *eth)
-+{
-+      if (eth) {
-+              ltq_etop.dev.platform_data = eth;
-+              platform_device_register(&ltq_etop);
-+      }
-+}
---- a/arch/mips/lantiq/xway/devices.h
-+++ b/arch/mips/lantiq/xway/devices.h
-@@ -15,5 +15,6 @@
- extern void ltq_register_gpio(void);
- extern void ltq_register_gpio_stp(void);
- extern void ltq_register_ase_asc(void);
-+extern void ltq_register_etop(struct ltq_eth_data *eth);
- #endif
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -1951,6 +1951,13 @@
-         This driver supports the ethernet MACs in the Broadcom 63xx
-         MIPS chipset family (BCM63XX).
-+config LANTIQ_ETOP
-+      tristate "Lantiq SoC ETOP driver"
-+      depends on SOC_TYPE_XWAY
-+      help
-+        Support for the MII0 inside the Lantiq SoC
-+
-+
- source "drivers/net/fs_enet/Kconfig"
- endif # NET_ETHERNET
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -246,6 +246,7 @@
- obj-$(CONFIG_MLX4_CORE) += mlx4/
- obj-$(CONFIG_ENC28J60) += enc28j60.o
- obj-$(CONFIG_ETHOC) += ethoc.o
-+obj-$(CONFIG_LANTIQ_ETOP) += lantiq_etop.o
- obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o
---- /dev/null
-+++ b/drivers/net/lantiq_etop.c
-@@ -0,0 +1,814 @@
-+/*
-+ *   This program is free software; you can redistribute it and/or modify it
-+ *   under the terms of the GNU General Public License version 2 as published
-+ *   by the Free Software Foundation.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ *   Copyright (C) 2011 John Crispin <blogic@openwrt.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/types.h>
-+#include <linux/interrupt.h>
-+#include <linux/uaccess.h>
-+#include <linux/in.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/phy.h>
-+#include <linux/ip.h>
-+#include <linux/tcp.h>
-+#include <linux/skbuff.h>
-+#include <linux/mm.h>
-+#include <linux/platform_device.h>
-+#include <linux/ethtool.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/io.h>
-+
-+#include <asm/checksum.h>
-+
-+#include <lantiq_soc.h>
-+#include <xway_dma.h>
-+#include <lantiq_platform.h>
-+
-+#define LTQ_ETOP_MDIO         0x11804
-+#define MDIO_REQUEST          0x80000000
-+#define MDIO_READ             0x40000000
-+#define MDIO_ADDR_MASK                0x1f
-+#define MDIO_ADDR_OFFSET      0x15
-+#define MDIO_REG_MASK         0x1f
-+#define MDIO_REG_OFFSET               0x10
-+#define MDIO_VAL_MASK         0xffff
-+
-+#define PPE32_CGEN            0x800
-+#define LTQ_PPE32_ENET_MAC_CFG        0x1840
-+
-+#define LTQ_ETOP_ENETS0               0x11850
-+#define LTQ_ETOP_MAC_DA0      0x1186C
-+#define LTQ_ETOP_MAC_DA1      0x11870
-+#define LTQ_ETOP_CFG          0x16020
-+#define LTQ_ETOP_IGPLEN               0x16080
-+
-+#define MAX_DMA_CHAN          0x8
-+#define MAX_DMA_CRC_LEN               0x4
-+#define MAX_DMA_DATA_LEN      0x600
-+
-+#define ETOP_FTCU             BIT(28)
-+#define ETOP_MII_MASK         0xf
-+#define ETOP_MII_NORMAL               0xd
-+#define ETOP_MII_REVERSE      0xe
-+#define ETOP_PLEN_UNDER               0x40
-+#define ETOP_CGEN             0x800
-+
-+/* use 2 static channels for TX/RX */
-+#define LTQ_ETOP_TX_CHANNEL   1
-+#define LTQ_ETOP_RX_CHANNEL   6
-+#define IS_TX(x)              (x == LTQ_ETOP_TX_CHANNEL)
-+#define IS_RX(x)              (x == LTQ_ETOP_RX_CHANNEL)
-+
-+#define ltq_etop_r32(x)               ltq_r32(ltq_etop_membase + (x))
-+#define ltq_etop_w32(x, y)    ltq_w32(x, ltq_etop_membase + (y))
-+#define ltq_etop_w32_mask(x, y, z)    \
-+              ltq_w32_mask(x, y, ltq_etop_membase + (z))
-+
-+#define DRV_VERSION   "1.0"
-+
-+#ifndef netdev_err
-+#define netdev_err(a, b, ...) printk(b, ##__VA_ARGS__)
-+#endif
-+
-+#ifndef pr_warn
-+#define pr_warn pr_warning
-+#endif
-+
-+static void __iomem *ltq_etop_membase;
-+
-+struct ltq_etop_chan {
-+      int idx;
-+      int tx_free;
-+      struct net_device *netdev;
-+      struct napi_struct napi;
-+      struct ltq_dma_channel dma;
-+      struct sk_buff *skb[LTQ_DESC_NUM];
-+};
-+
-+struct ltq_etop_priv {
-+      struct net_device *netdev;
-+      struct ltq_eth_data *pldata;
-+      struct resource *res;
-+
-+      struct mii_bus *mii_bus;
-+      struct phy_device *phydev;
-+
-+      struct ltq_etop_chan ch[MAX_DMA_CHAN];
-+      int tx_free[MAX_DMA_CHAN >> 1];
-+
-+      spinlock_t lock;
-+};
-+
-+static int
-+ltq_etop_alloc_skb(struct ltq_etop_chan *ch)
-+{
-+      ch->skb[ch->dma.desc] = dev_alloc_skb(MAX_DMA_DATA_LEN);
-+      if (!ch->skb[ch->dma.desc])
-+              return -ENOMEM;
-+      ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(NULL,
-+              ch->skb[ch->dma.desc]->data, MAX_DMA_DATA_LEN,
-+              DMA_FROM_DEVICE);
-+      ch->dma.desc_base[ch->dma.desc].addr =
-+              CPHYSADDR(ch->skb[ch->dma.desc]->data);
-+      ch->dma.desc_base[ch->dma.desc].ctl =
-+              LTQ_DMA_OWN | LTQ_DMA_RX_OFFSET(NET_IP_ALIGN) |
-+              MAX_DMA_DATA_LEN;
-+      skb_reserve(ch->skb[ch->dma.desc], NET_IP_ALIGN);
-+      return 0;
-+}
-+
-+static void
-+ltq_etop_hw_receive(struct ltq_etop_chan *ch)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(ch->netdev);
-+      struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
-+      struct sk_buff *skb = ch->skb[ch->dma.desc];
-+      int len = (desc->ctl & LTQ_DMA_SIZE_MASK) - MAX_DMA_CRC_LEN;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&priv->lock, flags);
-+      if (ltq_etop_alloc_skb(ch)) {
-+              netdev_err(ch->netdev,
-+                      "failed to allocate new rx buffer, stopping DMA\n");
-+              ltq_dma_close(&ch->dma);
-+      }
-+      ch->dma.desc++;
-+      ch->dma.desc %= LTQ_DESC_NUM;
-+      spin_unlock_irqrestore(&priv->lock, flags);
-+
-+      skb_put(skb, len);
-+      skb->dev = ch->netdev;
-+      skb->protocol = eth_type_trans(skb, ch->netdev);
-+      netif_receive_skb(skb);
-+}
-+
-+static int
-+ltq_etop_poll_rx(struct napi_struct *napi, int budget)
-+{
-+      struct ltq_etop_chan *ch = container_of(napi,
-+                              struct ltq_etop_chan, napi);
-+      int rx = 0;
-+      int complete = 0;
-+
-+      while ((rx < budget) && !complete) {
-+              struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
-+
-+              if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) {
-+                      ltq_etop_hw_receive(ch);
-+                      rx++;
-+              } else {
-+                      complete = 1;
-+              }
-+      }
-+      if (complete || !rx) {
-+              napi_complete(&ch->napi);
-+              ltq_dma_ack_irq(&ch->dma);
-+      }
-+      return rx;
-+}
-+
-+static int
-+ltq_etop_poll_tx(struct napi_struct *napi, int budget)
-+{
-+      struct ltq_etop_chan *ch =
-+              container_of(napi, struct ltq_etop_chan, napi);
-+      struct ltq_etop_priv *priv = netdev_priv(ch->netdev);
-+      struct netdev_queue *txq =
-+              netdev_get_tx_queue(ch->netdev, ch->idx >> 1);
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&priv->lock, flags);
-+      while ((ch->dma.desc_base[ch->tx_free].ctl &
-+                      (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) {
-+              dev_kfree_skb_any(ch->skb[ch->tx_free]);
-+              ch->skb[ch->tx_free] = NULL;
-+              memset(&ch->dma.desc_base[ch->tx_free], 0,
-+                      sizeof(struct ltq_dma_desc));
-+              ch->tx_free++;
-+              ch->tx_free %= LTQ_DESC_NUM;
-+      }
-+      spin_unlock_irqrestore(&priv->lock, flags);
-+
-+      if (netif_tx_queue_stopped(txq))
-+              netif_tx_start_queue(txq);
-+      napi_complete(&ch->napi);
-+      ltq_dma_ack_irq(&ch->dma);
-+      return 1;
-+}
-+
-+static irqreturn_t
-+ltq_etop_dma_irq(int irq, void *_priv)
-+{
-+      struct ltq_etop_priv *priv = _priv;
-+      int ch = irq - LTQ_DMA_CH0_INT;
-+
-+      napi_schedule(&priv->ch[ch].napi);
-+      return IRQ_HANDLED;
-+}
-+
-+static void
-+ltq_etop_free_channel(struct net_device *dev, struct ltq_etop_chan *ch)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+
-+      ltq_dma_free(&ch->dma);
-+      if (ch->dma.irq)
-+              free_irq(ch->dma.irq, priv);
-+      if (IS_RX(ch->idx)) {
-+              int desc;
-+              for (desc = 0; desc < LTQ_DESC_NUM; desc++)
-+                      dev_kfree_skb_any(ch->skb[ch->dma.desc]);
-+      }
-+}
-+
-+static void
-+ltq_etop_hw_exit(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      int i;
-+
-+      ltq_pmu_disable(PMU_PPE);
-+      for (i = 0; i < MAX_DMA_CHAN; i++)
-+              if (IS_TX(i) || IS_RX(i))
-+                      ltq_etop_free_channel(dev, &priv->ch[i]);
-+}
-+
-+static int
-+ltq_etop_hw_init(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      int i;
-+
-+      ltq_pmu_enable(PMU_PPE);
-+
-+      switch (priv->pldata->mii_mode) {
-+      case PHY_INTERFACE_MODE_RMII:
-+              ltq_etop_w32_mask(ETOP_MII_MASK,
-+                      ETOP_MII_REVERSE, LTQ_ETOP_CFG);
-+              break;
-+
-+      case PHY_INTERFACE_MODE_MII:
-+              ltq_etop_w32_mask(ETOP_MII_MASK,
-+                      ETOP_MII_NORMAL, LTQ_ETOP_CFG);
-+              break;
-+
-+      default:
-+              netdev_err(dev, "unknown mii mode %d\n",
-+                      priv->pldata->mii_mode);
-+              return -ENOTSUPP;
-+      }
-+
-+      /* enable crc generation */
-+      ltq_etop_w32(PPE32_CGEN, LTQ_PPE32_ENET_MAC_CFG);
-+
-+      ltq_dma_init_port(DMA_PORT_ETOP);
-+
-+      for (i = 0; i < MAX_DMA_CHAN; i++) {
-+              int irq = LTQ_DMA_CH0_INT + i;
-+              struct ltq_etop_chan *ch = &priv->ch[i];
-+
-+              ch->idx = ch->dma.nr = i;
-+
-+              if (IS_TX(i)) {
-+                      ltq_dma_alloc_tx(&ch->dma);
-+                      request_irq(irq, ltq_etop_dma_irq, IRQF_DISABLED,
-+                              "etop_tx", priv);
-+              } else if (IS_RX(i)) {
-+                      ltq_dma_alloc_rx(&ch->dma);
-+                      for (ch->dma.desc = 0; ch->dma.desc < LTQ_DESC_NUM;
-+                                      ch->dma.desc++)
-+                              if (ltq_etop_alloc_skb(ch))
-+                                      return -ENOMEM;
-+                      ch->dma.desc = 0;
-+                      request_irq(irq, ltq_etop_dma_irq, IRQF_DISABLED,
-+                              "etop_rx", priv);
-+              }
-+              ch->dma.irq = irq;
-+      }
-+      return 0;
-+}
-+
-+static void
-+ltq_etop_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
-+{
-+      strcpy(info->driver, "Lantiq ETOP");
-+      strcpy(info->bus_info, "internal");
-+      strcpy(info->version, DRV_VERSION);
-+}
-+
-+static int
-+ltq_etop_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+
-+      return phy_ethtool_gset(priv->phydev, cmd);
-+}
-+
-+static int
-+ltq_etop_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+
-+      return phy_ethtool_sset(priv->phydev, cmd);
-+}
-+
-+static int
-+ltq_etop_nway_reset(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+
-+      return phy_start_aneg(priv->phydev);
-+}
-+
-+static const struct ethtool_ops ltq_etop_ethtool_ops = {
-+      .get_drvinfo = ltq_etop_get_drvinfo,
-+      .get_settings = ltq_etop_get_settings,
-+      .set_settings = ltq_etop_set_settings,
-+      .nway_reset = ltq_etop_nway_reset,
-+};
-+
-+static int
-+ltq_etop_mdio_wr(struct mii_bus *bus, int phy_addr, int phy_reg, u16 phy_data)
-+{
-+      u32 val = MDIO_REQUEST |
-+              ((phy_addr & MDIO_ADDR_MASK) << MDIO_ADDR_OFFSET) |
-+              ((phy_reg & MDIO_REG_MASK) << MDIO_REG_OFFSET) |
-+              phy_data;
-+
-+      while (ltq_etop_r32(LTQ_ETOP_MDIO) & MDIO_REQUEST)
-+              ;
-+      ltq_etop_w32(val, LTQ_ETOP_MDIO);
-+      return 0;
-+}
-+
-+static int
-+ltq_etop_mdio_rd(struct mii_bus *bus, int phy_addr, int phy_reg)
-+{
-+      u32 val = MDIO_REQUEST | MDIO_READ |
-+              ((phy_addr & MDIO_ADDR_MASK) << MDIO_ADDR_OFFSET) |
-+              ((phy_reg & MDIO_REG_MASK) << MDIO_REG_OFFSET);
-+
-+      while (ltq_etop_r32(LTQ_ETOP_MDIO) & MDIO_REQUEST)
-+              ;
-+      ltq_etop_w32(val, LTQ_ETOP_MDIO);
-+      while (ltq_etop_r32(LTQ_ETOP_MDIO) & MDIO_REQUEST)
-+              ;
-+      val = ltq_etop_r32(LTQ_ETOP_MDIO) & MDIO_VAL_MASK;
-+      return val;
-+}
-+
-+static void
-+ltq_etop_mdio_link(struct net_device *dev)
-+{
-+      /* nothing to do  */
-+}
-+
-+static int
-+ltq_etop_mdio_probe(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      struct phy_device *phydev = NULL;
-+      int phy_addr;
-+
-+      for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
-+              if (priv->mii_bus->phy_map[phy_addr]) {
-+                      phydev = priv->mii_bus->phy_map[phy_addr];
-+                      break;
-+              }
-+      }
-+
-+      if (!phydev) {
-+              netdev_err(dev, "no PHY found\n");
-+              return -ENODEV;
-+      }
-+
-+      phydev = phy_connect(dev, dev_name(&phydev->dev), &ltq_etop_mdio_link,
-+                      0, priv->pldata->mii_mode);
-+
-+      if (IS_ERR(phydev)) {
-+              netdev_err(dev, "Could not attach to PHY\n");
-+              return PTR_ERR(phydev);
-+      }
-+
-+      phydev->supported &= (SUPPORTED_10baseT_Half
-+                            | SUPPORTED_10baseT_Full
-+                            | SUPPORTED_100baseT_Half
-+                            | SUPPORTED_100baseT_Full
-+                            | SUPPORTED_Autoneg
-+                            | SUPPORTED_MII
-+                            | SUPPORTED_TP);
-+
-+      phydev->advertising = phydev->supported;
-+      priv->phydev = phydev;
-+      pr_info("%s: attached PHY [%s] (phy_addr=%s, irq=%d)\n",
-+             dev->name, phydev->drv->name,
-+             dev_name(&phydev->dev), phydev->irq);
-+
-+      return 0;
-+}
-+
-+static int
-+ltq_etop_mdio_init(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      int i;
-+      int err;
-+
-+      priv->mii_bus = mdiobus_alloc();
-+      if (!priv->mii_bus) {
-+              netdev_err(dev, "failed to allocate mii bus\n");
-+              err = -ENOMEM;
-+              goto err_out;
-+      }
-+
-+      priv->mii_bus->priv = dev;
-+      priv->mii_bus->read = ltq_etop_mdio_rd;
-+      priv->mii_bus->write = ltq_etop_mdio_wr;
-+      priv->mii_bus->name = "ltq_mii";
-+      snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0);
-+      priv->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-+      if (!priv->mii_bus->irq) {
-+              err = -ENOMEM;
-+              goto err_out_free_mdiobus;
-+      }
-+
-+      for (i = 0; i < PHY_MAX_ADDR; ++i)
-+              priv->mii_bus->irq[i] = PHY_POLL;
-+
-+      if (mdiobus_register(priv->mii_bus)) {
-+              err = -ENXIO;
-+              goto err_out_free_mdio_irq;
-+      }
-+
-+      if (ltq_etop_mdio_probe(dev)) {
-+              err = -ENXIO;
-+              goto err_out_unregister_bus;
-+      }
-+      return 0;
-+
-+err_out_unregister_bus:
-+      mdiobus_unregister(priv->mii_bus);
-+err_out_free_mdio_irq:
-+      kfree(priv->mii_bus->irq);
-+err_out_free_mdiobus:
-+      mdiobus_free(priv->mii_bus);
-+err_out:
-+      return err;
-+}
-+
-+static void
-+ltq_etop_mdio_cleanup(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+
-+      phy_disconnect(priv->phydev);
-+      mdiobus_unregister(priv->mii_bus);
-+      kfree(priv->mii_bus->irq);
-+      mdiobus_free(priv->mii_bus);
-+}
-+
-+static int
-+ltq_etop_open(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      int i;
-+
-+      for (i = 0; i < MAX_DMA_CHAN; i++) {
-+              struct ltq_etop_chan *ch = &priv->ch[i];
-+
-+              if (!IS_TX(i) && (!IS_RX(i)))
-+                      continue;
-+              ltq_dma_open(&ch->dma);
-+              napi_enable(&ch->napi);
-+      }
-+      phy_start(priv->phydev);
-+      netif_tx_start_all_queues(dev);
-+      return 0;
-+}
-+
-+static int
-+ltq_etop_stop(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      int i;
-+
-+      netif_tx_stop_all_queues(dev);
-+      phy_stop(priv->phydev);
-+      for (i = 0; i < MAX_DMA_CHAN; i++) {
-+              struct ltq_etop_chan *ch = &priv->ch[i];
-+
-+              if (!IS_RX(i) && !IS_TX(i))
-+                      continue;
-+              napi_disable(&ch->napi);
-+              ltq_dma_close(&ch->dma);
-+      }
-+      return 0;
-+}
-+
-+static int
-+ltq_etop_tx(struct sk_buff *skb, struct net_device *dev)
-+{
-+      int queue = skb_get_queue_mapping(skb);
-+      struct netdev_queue *txq = netdev_get_tx_queue(dev, queue);
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      struct ltq_etop_chan *ch = &priv->ch[(queue << 1) | 1];
-+      struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
-+      int len;
-+      unsigned long flags;
-+      u32 byte_offset;
-+
-+      len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
-+
-+      if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) || ch->skb[ch->dma.desc]) {
-+              dev_kfree_skb_any(skb);
-+              netdev_err(dev, "tx ring full\n");
-+              netif_tx_stop_queue(txq);
-+              return NETDEV_TX_BUSY;
-+      }
-+
-+      /* dma needs to start on a 16 byte aligned address */
-+      byte_offset = CPHYSADDR(skb->data) % 16;
-+      ch->skb[ch->dma.desc] = skb;
-+
-+      dev->trans_start = jiffies;
-+
-+      spin_lock_irqsave(&priv->lock, flags);
-+      desc->addr = ((unsigned int) dma_map_single(NULL, skb->data, len,
-+                                              DMA_TO_DEVICE)) - byte_offset;
-+      wmb();
-+      desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP |
-+              LTQ_DMA_TX_OFFSET(byte_offset) | (len & LTQ_DMA_SIZE_MASK);
-+      ch->dma.desc++;
-+      ch->dma.desc %= LTQ_DESC_NUM;
-+      spin_unlock_irqrestore(&priv->lock, flags);
-+
-+      if (ch->dma.desc_base[ch->dma.desc].ctl & LTQ_DMA_OWN)
-+              netif_tx_stop_queue(txq);
-+
-+      return NETDEV_TX_OK;
-+}
-+
-+static int
-+ltq_etop_change_mtu(struct net_device *dev, int new_mtu)
-+{
-+      int ret = eth_change_mtu(dev, new_mtu);
-+
-+      if (!ret) {
-+              struct ltq_etop_priv *priv = netdev_priv(dev);
-+              unsigned long flags;
-+
-+              spin_lock_irqsave(&priv->lock, flags);
-+              ltq_etop_w32((ETOP_PLEN_UNDER << 16) | new_mtu,
-+                      LTQ_ETOP_IGPLEN);
-+              spin_unlock_irqrestore(&priv->lock, flags);
-+      }
-+      return ret;
-+}
-+
-+static int
-+ltq_etop_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      struct mii_ioctl_data *data = if_mii(rq);
-+
-+      /* TODO: mii-toll reports "No MII transceiver present!." ?!*/
-+      return phy_mii_ioctl(priv->phydev, data, cmd);
-+}
-+
-+static int
-+ltq_etop_set_mac_address(struct net_device *dev, void *p)
-+{
-+      int ret = eth_mac_addr(dev, p);
-+
-+      if (!ret) {
-+              struct ltq_etop_priv *priv = netdev_priv(dev);
-+              unsigned long flags;
-+
-+              /* store the mac for the unicast filter */
-+              spin_lock_irqsave(&priv->lock, flags);
-+              ltq_etop_w32(*((u32 *)dev->dev_addr), LTQ_ETOP_MAC_DA0);
-+              ltq_etop_w32(*((u16 *)&dev->dev_addr[4]) << 16,
-+                      LTQ_ETOP_MAC_DA1);
-+              spin_unlock_irqrestore(&priv->lock, flags);
-+      }
-+      return ret;
-+}
-+
-+static void
-+ltq_etop_set_multicast_list(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      unsigned long flags;
-+
-+      /* ensure that the unicast filter is not enabled in promiscious mode */
-+      spin_lock_irqsave(&priv->lock, flags);
-+      if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI))
-+              ltq_etop_w32_mask(ETOP_FTCU, 0, LTQ_ETOP_ENETS0);
-+      else
-+              ltq_etop_w32_mask(0, ETOP_FTCU, LTQ_ETOP_ENETS0);
-+      spin_unlock_irqrestore(&priv->lock, flags);
-+}
-+
-+static u16
-+ltq_etop_select_queue(struct net_device *dev, struct sk_buff *skb)
-+{
-+      /* we are currently only using the first queue */
-+      return 0;
-+}
-+
-+static int
-+ltq_etop_init(struct net_device *dev)
-+{
-+      struct ltq_etop_priv *priv = netdev_priv(dev);
-+      struct sockaddr mac;
-+      int err;
-+
-+      ether_setup(dev);
-+      dev->watchdog_timeo = 10 * HZ;
-+      err = ltq_etop_hw_init(dev);
-+      if (err)
-+              goto err_hw;
-+      ltq_etop_change_mtu(dev, 1500);
-+
-+      memcpy(&mac, &priv->pldata->mac, sizeof(struct sockaddr));
-+      if (!is_valid_ether_addr(mac.sa_data)) {
-+              pr_warn("etop: invalid MAC, using random\n");
-+              random_ether_addr(mac.sa_data);
-+      }
-+
-+      err = ltq_etop_set_mac_address(dev, &mac);
-+      if (err)
-+              goto err_netdev;
-+      ltq_etop_set_multicast_list(dev);
-+      err = ltq_etop_mdio_init(dev);
-+      if (err)
-+              goto err_netdev;
-+      return 0;
-+
-+err_netdev:
-+      unregister_netdev(dev);
-+      free_netdev(dev);
-+err_hw:
-+      ltq_etop_hw_exit(dev);
-+      return err;
-+}
-+
-+static void
-+ltq_etop_tx_timeout(struct net_device *dev)
-+{
-+      int err;
-+
-+      ltq_etop_hw_exit(dev);
-+      err = ltq_etop_hw_init(dev);
-+      if (err)
-+              goto err_hw;
-+      dev->trans_start = jiffies;
-+      netif_wake_queue(dev);
-+      return;
-+
-+err_hw:
-+      ltq_etop_hw_exit(dev);
-+      netdev_err(dev, "failed to restart etop after TX timeout\n");
-+}
-+
-+static const struct net_device_ops ltq_eth_netdev_ops = {
-+      .ndo_open = ltq_etop_open,
-+      .ndo_stop = ltq_etop_stop,
-+      .ndo_start_xmit = ltq_etop_tx,
-+      .ndo_change_mtu = ltq_etop_change_mtu,
-+      .ndo_do_ioctl = ltq_etop_ioctl,
-+      .ndo_set_mac_address = ltq_etop_set_mac_address,
-+      .ndo_validate_addr = eth_validate_addr,
-+      .ndo_set_multicast_list = ltq_etop_set_multicast_list,
-+      .ndo_select_queue = ltq_etop_select_queue,
-+      .ndo_init = ltq_etop_init,
-+      .ndo_tx_timeout = ltq_etop_tx_timeout,
-+};
-+
-+static int __init
-+ltq_etop_probe(struct platform_device *pdev)
-+{
-+      struct net_device *dev;
-+      struct ltq_etop_priv *priv;
-+      struct resource *res;
-+      int err;
-+      int i;
-+
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to get etop resource\n");
-+              err = -ENOENT;
-+              goto err_out;
-+      }
-+
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              resource_size(res), dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev, "failed to request etop resource\n");
-+              err = -EBUSY;
-+              goto err_out;
-+      }
-+
-+      ltq_etop_membase = devm_ioremap_nocache(&pdev->dev,
-+              res->start, resource_size(res));
-+      if (!ltq_etop_membase) {
-+              dev_err(&pdev->dev, "failed to remap etop engine %d\n",
-+                      pdev->id);
-+              err = -ENOMEM;
-+              goto err_out;
-+      }
-+
-+      dev = alloc_etherdev_mq(sizeof(struct ltq_etop_priv), 4);
-+      strcpy(dev->name, "eth%d");
-+      dev->netdev_ops = &ltq_eth_netdev_ops;
-+      dev->ethtool_ops = &ltq_etop_ethtool_ops;
-+      priv = netdev_priv(dev);
-+      priv->res = res;
-+      priv->pldata = dev_get_platdata(&pdev->dev);
-+      priv->netdev = dev;
-+      spin_lock_init(&priv->lock);
-+
-+      for (i = 0; i < MAX_DMA_CHAN; i++) {
-+              if (IS_TX(i))
-+                      netif_napi_add(dev, &priv->ch[i].napi,
-+                              ltq_etop_poll_tx, 8);
-+              else if (IS_RX(i))
-+                      netif_napi_add(dev, &priv->ch[i].napi,
-+                              ltq_etop_poll_rx, 32);
-+              priv->ch[i].netdev = dev;
-+      }
-+
-+      err = register_netdev(dev);
-+      if (err)
-+              goto err_free;
-+
-+      platform_set_drvdata(pdev, dev);
-+      return 0;
-+
-+err_free:
-+      kfree(dev);
-+err_out:
-+      return err;
-+}
-+
-+static int __devexit
-+ltq_etop_remove(struct platform_device *pdev)
-+{
-+      struct net_device *dev = platform_get_drvdata(pdev);
-+
-+      if (dev) {
-+              netif_tx_stop_all_queues(dev);
-+              ltq_etop_hw_exit(dev);
-+              ltq_etop_mdio_cleanup(dev);
-+              unregister_netdev(dev);
-+      }
-+      return 0;
-+}
-+
-+static struct platform_driver ltq_mii_driver = {
-+      .remove = __devexit_p(ltq_etop_remove),
-+      .driver = {
-+              .name = "ltq_etop",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+int __init
-+init_ltq_etop(void)
-+{
-+      int ret = platform_driver_probe(&ltq_mii_driver, ltq_etop_probe);
-+
-+      if (ret)
-+              pr_err("ltq_etop: Error registering platfom driver!");
-+      return ret;
-+}
-+
-+static void __exit
-+exit_ltq_etop(void)
-+{
-+      platform_driver_unregister(&ltq_mii_driver);
-+}
-+
-+module_init(init_ltq_etop);
-+module_exit(exit_ltq_etop);
-+
-+MODULE_AUTHOR("John Crispin <blogic@openwrt.org>");
-+MODULE_DESCRIPTION("Lantiq SoC ETOP");
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/lantiq/patches-2.6.32/0012-MIPS-Lantiq-Add-etop-board-support.patch b/target/linux/lantiq/patches-2.6.32/0012-MIPS-Lantiq-Add-etop-board-support.patch
deleted file mode 100644 (file)
index 2bc4abd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From 72a9b536ef81f06bb8042abee0410458f5df93d2 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Fri, 6 May 2011 00:10:02 +0200
-Subject: [PATCH 12/13] MIPS: Lantiq: Add etop board support
-
-Register the etop platform device inside the machtype specific init code.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Signed-off-by: David Daney <ddaney@caviumnetworks.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/2356/
-Patchwork: https://patchwork.linux-mips.org/patch/2370/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/lantiq/xway/mach-easy50712.c |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
-
-diff --git a/arch/mips/lantiq/xway/mach-easy50712.c b/arch/mips/lantiq/xway/mach-easy50712.c
-index e5e7e09..ea5027b 100644
---- a/arch/mips/lantiq/xway/mach-easy50712.c
-+++ b/arch/mips/lantiq/xway/mach-easy50712.c
-@@ -12,6 +12,7 @@
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/physmap.h>
- #include <linux/input.h>
-+#include <linux/phy.h>
- #include <lantiq_soc.h>
- #include <irq.h>
-@@ -55,11 +56,16 @@ static struct ltq_pci_data ltq_pci_data = {
-       },
- };
-+static struct ltq_eth_data ltq_eth_data = {
-+      .mii_mode = PHY_INTERFACE_MODE_MII,
-+};
-+
- static void __init easy50712_init(void)
- {
-       ltq_register_gpio_stp();
-       ltq_register_nor(&easy50712_flash_data);
-       ltq_register_pci(&ltq_pci_data);
-+      ltq_register_etop(&ltq_eth_data);
- }
- MIPS_MACHINE(LTQ_MACH_EASY50712,
--- 
-1.7.2.3
-
diff --git a/target/linux/lantiq/patches-2.6.32/0013-MIPS-Lantiq-Add-watchdog-support.patch b/target/linux/lantiq/patches-2.6.32/0013-MIPS-Lantiq-Add-watchdog-support.patch
deleted file mode 100644 (file)
index 903f674..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-From 3466449c8f455da0cb646231602e6af16190f592 Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Thu, 5 May 2011 23:00:23 +0200
-Subject: [PATCH 13/13] MIPS: Lantiq: Add watchdog support
-
-This patch adds the driver for the watchdog found inside the Lantiq SoC family.
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
-Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com>
-Cc: Wim Van Sebroeck <wim@iguana.be>
-Cc: linux-mips@linux-mips.org
-Cc: linux-watchdog@vger.kernel.org
-Patchwork: https://patchwork.linux-mips.org/patch/2327/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- drivers/watchdog/Kconfig      |    6 +
- drivers/watchdog/Makefile     |    1 +
- drivers/watchdog/lantiq_wdt.c |  261 +++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 268 insertions(+), 0 deletions(-)
- create mode 100644 drivers/watchdog/lantiq_wdt.c
-
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -850,6 +850,12 @@
-       help
-         Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
-+config LANTIQ_WDT
-+      tristate "Lantiq SoC watchdog"
-+      depends on LANTIQ
-+      help
-+        Hardware driver for the Lantiq SoC Watchdog Timer.
-+
- # PARISC Architecture
- # POWERPC Architecture
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -113,6 +113,7 @@
- obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
- obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
- obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
-+obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
- # PARISC Architecture
---- /dev/null
-+++ b/drivers/watchdog/lantiq_wdt.c
-@@ -0,0 +1,261 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+ *
-+ *  Copyright (C) 2010 John Crispin <blogic@openwrt.org>
-+ *  Based on EP93xx wdt driver
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/miscdevice.h>
-+#include <linux/watchdog.h>
-+#include <linux/platform_device.h>
-+#include <linux/uaccess.h>
-+#include <linux/clk.h>
-+#include <linux/io.h>
-+
-+#include <lantiq.h>
-+
-+/* Section 3.4 of the datasheet
-+ * The password sequence protects the WDT control register from unintended
-+ * write actions, which might cause malfunction of the WDT.
-+ *
-+ * essentially the following two magic passwords need to be written to allow
-+ * IO access to the WDT core
-+ */
-+#define LTQ_WDT_PW1           0x00BE0000
-+#define LTQ_WDT_PW2           0x00DC0000
-+
-+#define LTQ_WDT_CR            0x0     /* watchdog control register */
-+#define LTQ_WDT_SR            0x8     /* watchdog status register */
-+
-+#define LTQ_WDT_SR_EN         (0x1 << 31)     /* enable bit */
-+#define LTQ_WDT_SR_PWD                (0x3 << 26)     /* turn on power */
-+#define LTQ_WDT_SR_CLKDIV     (0x3 << 24)     /* turn on clock and set */
-+                                              /* divider to 0x40000 */
-+#define LTQ_WDT_DIVIDER               0x40000
-+#define LTQ_MAX_TIMEOUT               ((1 << 16) - 1) /* the reload field is 16 bit */
-+
-+static int nowayout = WATCHDOG_NOWAYOUT;
-+
-+static void __iomem *ltq_wdt_membase;
-+static unsigned long ltq_io_region_clk_rate;
-+
-+static unsigned long ltq_wdt_bootstatus;
-+static unsigned long ltq_wdt_in_use;
-+static int ltq_wdt_timeout = 30;
-+static int ltq_wdt_ok_to_close;
-+
-+static void
-+ltq_wdt_enable(void)
-+{
-+      ltq_wdt_timeout = ltq_wdt_timeout *
-+                      (ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000;
-+      if (ltq_wdt_timeout > LTQ_MAX_TIMEOUT)
-+              ltq_wdt_timeout = LTQ_MAX_TIMEOUT;
-+
-+      /* write the first password magic */
-+      ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR);
-+      /* write the second magic plus the configuration and new timeout */
-+      ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV |
-+              LTQ_WDT_PW2 | ltq_wdt_timeout, ltq_wdt_membase + LTQ_WDT_CR);
-+}
-+
-+static void
-+ltq_wdt_disable(void)
-+{
-+      /* write the first password magic */
-+      ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR);
-+      /* write the second password magic with no config
-+       * this turns the watchdog off
-+       */
-+      ltq_w32(LTQ_WDT_PW2, ltq_wdt_membase + LTQ_WDT_CR);
-+}
-+
-+static ssize_t
-+ltq_wdt_write(struct file *file, const char __user *data,
-+              size_t len, loff_t *ppos)
-+{
-+      if (len) {
-+              if (!nowayout) {
-+                      size_t i;
-+
-+                      ltq_wdt_ok_to_close = 0;
-+                      for (i = 0; i != len; i++) {
-+                              char c;
-+
-+                              if (get_user(c, data + i))
-+                                      return -EFAULT;
-+                              if (c == 'V')
-+                                      ltq_wdt_ok_to_close = 1;
-+                              else
-+                                      ltq_wdt_ok_to_close = 0;
-+                      }
-+              }
-+              ltq_wdt_enable();
-+      }
-+
-+      return len;
-+}
-+
-+static struct watchdog_info ident = {
-+      .options = WDIOF_MAGICCLOSE | WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING |
-+                      WDIOF_CARDRESET,
-+      .identity = "ltq_wdt",
-+};
-+
-+static long
-+ltq_wdt_ioctl(struct file *file,
-+              unsigned int cmd, unsigned long arg)
-+{
-+      int ret = -ENOTTY;
-+
-+      switch (cmd) {
-+      case WDIOC_GETSUPPORT:
-+              ret = copy_to_user((struct watchdog_info __user *)arg, &ident,
-+                              sizeof(ident)) ? -EFAULT : 0;
-+              break;
-+
-+      case WDIOC_GETBOOTSTATUS:
-+              ret = put_user(ltq_wdt_bootstatus, (int __user *)arg);
-+              break;
-+
-+      case WDIOC_GETSTATUS:
-+              ret = put_user(0, (int __user *)arg);
-+              break;
-+
-+      case WDIOC_SETTIMEOUT:
-+              ret = get_user(ltq_wdt_timeout, (int __user *)arg);
-+              if (!ret)
-+                      ltq_wdt_enable();
-+              /* intentional drop through */
-+      case WDIOC_GETTIMEOUT:
-+              ret = put_user(ltq_wdt_timeout, (int __user *)arg);
-+              break;
-+
-+      case WDIOC_KEEPALIVE:
-+              ltq_wdt_enable();
-+              ret = 0;
-+              break;
-+      }
-+      return ret;
-+}
-+
-+static int
-+ltq_wdt_open(struct inode *inode, struct file *file)
-+{
-+      if (test_and_set_bit(0, &ltq_wdt_in_use))
-+              return -EBUSY;
-+      ltq_wdt_in_use = 1;
-+      ltq_wdt_enable();
-+
-+      return nonseekable_open(inode, file);
-+}
-+
-+static int
-+ltq_wdt_release(struct inode *inode, struct file *file)
-+{
-+      if (ltq_wdt_ok_to_close)
-+              ltq_wdt_disable();
-+      else
-+              pr_err("ltq_wdt: watchdog closed without warning\n");
-+      ltq_wdt_ok_to_close = 0;
-+      clear_bit(0, &ltq_wdt_in_use);
-+
-+      return 0;
-+}
-+
-+static const struct file_operations ltq_wdt_fops = {
-+      .owner          = THIS_MODULE,
-+      .write          = ltq_wdt_write,
-+      .unlocked_ioctl = ltq_wdt_ioctl,
-+      .open           = ltq_wdt_open,
-+      .release        = ltq_wdt_release,
-+      .llseek         = no_llseek,
-+};
-+
-+static struct miscdevice ltq_wdt_miscdev = {
-+      .minor  = WATCHDOG_MINOR,
-+      .name   = "watchdog",
-+      .fops   = &ltq_wdt_fops,
-+};
-+
-+static int __init
-+ltq_wdt_probe(struct platform_device *pdev)
-+{
-+      struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      struct clk *clk;
-+
-+      if (!res) {
-+              dev_err(&pdev->dev, "cannot obtain I/O memory region");
-+              return -ENOENT;
-+      }
-+      res = devm_request_mem_region(&pdev->dev, res->start,
-+              resource_size(res), dev_name(&pdev->dev));
-+      if (!res) {
-+              dev_err(&pdev->dev, "cannot request I/O memory region");
-+              return -EBUSY;
-+      }
-+      ltq_wdt_membase = devm_ioremap_nocache(&pdev->dev, res->start,
-+              resource_size(res));
-+      if (!ltq_wdt_membase) {
-+              dev_err(&pdev->dev, "cannot remap I/O memory region\n");
-+              return -ENOMEM;
-+      }
-+
-+      /* we do not need to enable the clock as it is always running */
-+      clk = clk_get(&pdev->dev, "io");
-+      WARN_ON(!clk);
-+      ltq_io_region_clk_rate = clk_get_rate(clk);
-+      clk_put(clk);
-+
-+      if (ltq_reset_cause() == LTQ_RST_CAUSE_WDTRST)
-+              ltq_wdt_bootstatus = WDIOF_CARDRESET;
-+
-+      return misc_register(&ltq_wdt_miscdev);
-+}
-+
-+static int __devexit
-+ltq_wdt_remove(struct platform_device *pdev)
-+{
-+      misc_deregister(&ltq_wdt_miscdev);
-+
-+      if (ltq_wdt_membase)
-+              iounmap(ltq_wdt_membase);
-+
-+      return 0;
-+}
-+
-+
-+static struct platform_driver ltq_wdt_driver = {
-+      .remove = __devexit_p(ltq_wdt_remove),
-+      .driver = {
-+              .name = "ltq_wdt",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+static int __init
-+init_ltq_wdt(void)
-+{
-+      return platform_driver_probe(&ltq_wdt_driver, ltq_wdt_probe);
-+}
-+
-+static void __exit
-+exit_ltq_wdt(void)
-+{
-+      return platform_driver_unregister(&ltq_wdt_driver);
-+}
-+
-+module_init(init_ltq_wdt);
-+module_exit(exit_ltq_wdt);
-+
-+module_param(nowayout, int, 0);
-+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started");
-+
-+MODULE_AUTHOR("John Crispin <blogic@openwrt.org>");
-+MODULE_DESCRIPTION("Lantiq SoC Watchdog");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
diff --git a/target/linux/lantiq/patches-2.6.32/0014-fix_mtd.patch b/target/linux/lantiq/patches-2.6.32/0014-fix_mtd.patch
deleted file mode 100644 (file)
index 051ba86..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/arch/mips/lantiq/xway/mach-easy50601.c
-+++ b/arch/mips/lantiq/xway/mach-easy50601.c
-@@ -32,12 +32,7 @@
-       {
-               .name   = "linux",
-               .offset = 0x20000,
--              .size   = 0xE0000,
--      },
--      {
--              .name   = "rootfs",
--              .offset = 0x100000,
--              .size   = 0x300000,
-+              .size   = 0x3d0000,
-       },
- };
---- a/arch/mips/lantiq/xway/mach-easy50712.c
-+++ b/arch/mips/lantiq/xway/mach-easy50712.c
-@@ -34,12 +34,7 @@
-       {
-               .name   = "linux",
-               .offset = 0x20000,
--              .size   = 0xe0000,
--      },
--      {
--              .name   = "rootfs",
--              .offset = 0x100000,
--              .size   = 0x300000,
-+              .size   = 0x3d0000,
-       },
- };
diff --git a/target/linux/lantiq/patches-2.6.32/100-falcon_header.patch b/target/linux/lantiq/patches-2.6.32/100-falcon_header.patch
deleted file mode 100644 (file)
index f4da9ef..0000000
+++ /dev/null
@@ -1,13992 +0,0 @@
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/falcon/falcon_irq.h
-@@ -0,0 +1,277 @@
-+/*
-+ *   This program is free software; you can redistribute it and/or modify
-+ *   it under the terms of the GNU General Public License as published by
-+ *   the Free Software Foundation; either version 2 of the License, or
-+ *   (at your option) any later version.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ *   Copyright (C) 2010 Lantiq
-+ */
-+#ifndef _FALCON_IRQ__
-+#define _FALCON_IRQ__
-+
-+#define INT_NUM_IRQ0                  8
-+#define INT_NUM_IM0_IRL0              (INT_NUM_IRQ0 + 0)
-+#define INT_NUM_IM1_IRL0              (INT_NUM_IM0_IRL0 + 32)
-+#define INT_NUM_IM2_IRL0              (INT_NUM_IM1_IRL0 + 32)
-+#define INT_NUM_IM3_IRL0              (INT_NUM_IM2_IRL0 + 32)
-+#define INT_NUM_IM4_IRL0              (INT_NUM_IM3_IRL0 + 32)
-+#define INT_NUM_EXTRA_START           (INT_NUM_IM4_IRL0 + 32)
-+#define INT_NUM_IM_OFFSET             (INT_NUM_IM1_IRL0 - INT_NUM_IM0_IRL0)
-+
-+#define MIPS_CPU_TIMER_IRQ                    7
-+
-+/* HOST IF Event Interrupt */
-+#define FALCON_IRQ_HOST                               (INT_NUM_IM0_IRL0 + 0)
-+/* HOST IF Mailbox0 Receive Interrupt */
-+#define FALCON_IRQ_HOST_MB0_RX                        (INT_NUM_IM0_IRL0 + 1)
-+/* HOST IF Mailbox0 Transmit Interrupt */
-+#define FALCON_IRQ_HOST_MB0_TX                        (INT_NUM_IM0_IRL0 + 2)
-+/* HOST IF Mailbox1 Receive Interrupt */
-+#define FALCON_IRQ_HOST_MB1_RX                        (INT_NUM_IM0_IRL0 + 3)
-+/* HOST IF Mailbox1 Transmit Interrupt */
-+#define FALCON_IRQ_HOST_MB1_TX                        (INT_NUM_IM0_IRL0 + 4)
-+/* I2C Last Single Data Transfer Request */
-+#define FALCON_IRQ_I2C_LSREQ                  (INT_NUM_IM0_IRL0 + 8)
-+/* I2C Single Data Transfer Request */
-+#define FALCON_IRQ_I2C_SREQ                   (INT_NUM_IM0_IRL0 + 9)
-+/* I2C Last Burst Data Transfer Request */
-+#define FALCON_IRQ_I2C_LBREQ                  (INT_NUM_IM0_IRL0 + 10)
-+/* I2C Burst Data Transfer Request */
-+#define FALCON_IRQ_I2C_BREQ                   (INT_NUM_IM0_IRL0 + 11)
-+/* I2C Error Interrupt */
-+#define FALCON_IRQ_I2C_I2C_ERR                        (INT_NUM_IM0_IRL0 + 12)
-+/* I2C Protocol Interrupt */
-+#define FALCON_IRQ_I2C_I2C_P                  (INT_NUM_IM0_IRL0 + 13)
-+/* SSC Transmit Interrupt */
-+#define FALCON_IRQ_SSC_T                      (INT_NUM_IM0_IRL0 + 14)
-+/* SSC Receive Interrupt */
-+#define FALCON_IRQ_SSC_R                      (INT_NUM_IM0_IRL0 + 15)
-+/* SSC Error Interrupt */
-+#define FALCON_IRQ_SSC_E                      (INT_NUM_IM0_IRL0 + 16)
-+/* SSC Frame Interrupt */
-+#define FALCON_IRQ_SSC_F                      (INT_NUM_IM0_IRL0 + 17)
-+/* Advanced Encryption Standard Interrupt */
-+#define FALCON_IRQ_AES_AES                    (INT_NUM_IM0_IRL0 + 27)
-+/* Secure Hash Algorithm Interrupt */
-+#define FALCON_IRQ_SHA_HASH                   (INT_NUM_IM0_IRL0 + 28)
-+/* PCM Receive Interrupt */
-+#define FALCON_IRQ_PCM_RX                     (INT_NUM_IM0_IRL0 + 29)
-+/* PCM Transmit Interrupt */
-+#define FALCON_IRQ_PCM_TX                     (INT_NUM_IM0_IRL0 + 30)
-+/* PCM Transmit Crash Interrupt */
-+#define FALCON_IRQ_PCM_HW2_CRASH              (INT_NUM_IM0_IRL0 + 31)
-+
-+/* EBU Serial Flash Command Error */
-+#define FALCON_IRQ_EBU_SF_CMDERR              (INT_NUM_IM1_IRL0 + 0)
-+/* EBU Serial Flash Command Overwrite Error */
-+#define FALCON_IRQ_EBU_SF_COVERR              (INT_NUM_IM1_IRL0 + 1)
-+/* EBU Serial Flash Busy */
-+#define FALCON_IRQ_EBU_SF_BUSY                        (INT_NUM_IM1_IRL0 + 2)
-+/* External Interrupt from GPIO P0 */
-+#define FALCON_IRQ_GPIO_P0                    (INT_NUM_IM1_IRL0 + 4)
-+/* External Interrupt from GPIO P1 */
-+#define FALCON_IRQ_GPIO_P1                    (INT_NUM_IM1_IRL0 + 5)
-+/* External Interrupt from GPIO P2 */
-+#define FALCON_IRQ_GPIO_P2                    (INT_NUM_IM1_IRL0 + 6)
-+/* External Interrupt from GPIO P3 */
-+#define FALCON_IRQ_GPIO_P3                    (INT_NUM_IM1_IRL0 + 7)
-+/* External Interrupt from GPIO P4 */
-+#define FALCON_IRQ_GPIO_P4                    (INT_NUM_IM1_IRL0 + 8)
-+/* 8kHz backup interrupt derived from core-PLL */
-+#define FALCON_IRQ_FSC_BKP                    (INT_NUM_IM1_IRL0 + 10)
-+/* FSC Timer Interrupt 0 */
-+#define FALCON_IRQ_FSCT_CMP0                  (INT_NUM_IM1_IRL0 + 11)
-+/* FSC Timer Interrupt 1 */
-+#define FALCON_IRQ_FSCT_CMP1                  (INT_NUM_IM1_IRL0 + 12)
-+/* 8kHz root interrupt derived from GPON interface */
-+#define FALCON_IRQ_FSC_ROOT                   (INT_NUM_IM1_IRL0 + 13)
-+/* Time of Day */
-+#define FALCON_IRQ_TOD                                (INT_NUM_IM1_IRL0 + 14)
-+/* PMA Interrupt from IntNode of the 200MHz Domain */
-+#define FALCON_IRQ_PMA_200M                   (INT_NUM_IM1_IRL0 + 15)
-+/* PMA Interrupt from IntNode of the TX Clk Domain */
-+#define FALCON_IRQ_PMA_TX                     (INT_NUM_IM1_IRL0 + 16)
-+/* PMA Interrupt from IntNode of the RX Clk Domain */
-+#define FALCON_IRQ_PMA_RX                     (INT_NUM_IM1_IRL0 + 17)
-+/* SYS1 Interrupt */
-+#define FALCON_IRQ_SYS1                               (INT_NUM_IM1_IRL0 + 20)
-+/* SYS GPE Interrupt */
-+#define FALCON_IRQ_SYS_GPE                    (INT_NUM_IM1_IRL0 + 21)
-+/* Watchdog Access Error Interrupt */
-+#define FALCON_IRQ_WDT_AEIR                   (INT_NUM_IM1_IRL0 + 24)
-+/* Watchdog Prewarning Interrupt */
-+#define FALCON_IRQ_WDT_PIR                    (INT_NUM_IM1_IRL0 + 25)
-+/* SBIU interrupt */
-+#define FALCON_IRQ_SBIU0                      (INT_NUM_IM1_IRL0 + 27)
-+/* FPI Bus Control Unit Interrupt */
-+#define FALCON_IRQ_BCU0                               (INT_NUM_IM1_IRL0 + 29)
-+/* DDR Controller Interrupt */
-+#define FALCON_IRQ_DDR                                (INT_NUM_IM1_IRL0 + 30)
-+/* Crossbar Error Interrupt */
-+#define FALCON_IRQ_XBAR_ERROR                 (INT_NUM_IM1_IRL0 + 31)
-+
-+/* ICTRLL 0 Interrupt */
-+#define FALCON_IRQ_ICTRLL0                    (INT_NUM_IM2_IRL0 + 0)
-+/* ICTRLL 1 Interrupt */
-+#define FALCON_IRQ_ICTRLL1                    (INT_NUM_IM2_IRL0 + 1)
-+/* ICTRLL 2 Interrupt */
-+#define FALCON_IRQ_ICTRLL2                    (INT_NUM_IM2_IRL0 + 2)
-+/* ICTRLL 3 Interrupt */
-+#define FALCON_IRQ_ICTRLL3                    (INT_NUM_IM2_IRL0 + 3)
-+/* OCTRLL 0 Interrupt */
-+#define FALCON_IRQ_OCTRLL0                    (INT_NUM_IM2_IRL0 + 4)
-+/* OCTRLL 1 Interrupt */
-+#define FALCON_IRQ_OCTRLL1                    (INT_NUM_IM2_IRL0 + 5)
-+/* OCTRLL 2 Interrupt */
-+#define FALCON_IRQ_OCTRLL2                    (INT_NUM_IM2_IRL0 + 6)
-+/* OCTRLL 3 Interrupt */
-+#define FALCON_IRQ_OCTRLL3                    (INT_NUM_IM2_IRL0 + 7)
-+/* OCTRLG Interrupt */
-+#define FALCON_IRQ_OCTRLG                     (INT_NUM_IM2_IRL0 + 9)
-+/* IQM Interrupt */
-+#define FALCON_IRQ_IQM                                (INT_NUM_IM2_IRL0 + 10)
-+/* FSQM Interrupt */
-+#define FALCON_IRQ_FSQM                               (INT_NUM_IM2_IRL0 + 11)
-+/* TMU Interrupt */
-+#define FALCON_IRQ_TMU                                (INT_NUM_IM2_IRL0 + 12)
-+/* LINK1 Interrupt */
-+#define FALCON_IRQ_LINK1                      (INT_NUM_IM2_IRL0 + 14)
-+/* ICTRLC 0 Interrupt */
-+#define FALCON_IRQ_ICTRLC0                    (INT_NUM_IM2_IRL0 + 16)
-+/* ICTRLC 1 Interrupt */
-+#define FALCON_IRQ_ICTRLC1                    (INT_NUM_IM2_IRL0 + 17)
-+/* OCTRLC Interrupt */
-+#define FALCON_IRQ_OCTRLC                     (INT_NUM_IM2_IRL0 + 18)
-+/* CONFIG Break Interrupt */
-+#define FALCON_IRQ_CONFIG_BREAK                       (INT_NUM_IM2_IRL0 + 19)
-+/* CONFIG Interrupt */
-+#define FALCON_IRQ_CONFIG                     (INT_NUM_IM2_IRL0 + 20)
-+/* Dispatcher Interrupt */
-+#define FALCON_IRQ_DISP                               (INT_NUM_IM2_IRL0 + 21)
-+/* TBM Interrupt */
-+#define FALCON_IRQ_TBM                                (INT_NUM_IM2_IRL0 + 22)
-+/* GTC Downstream Interrupt */
-+#define FALCON_IRQ_GTC_DS                     (INT_NUM_IM2_IRL0 + 29)
-+/* GTC Upstream Interrupt */
-+#define FALCON_IRQ_GTC_US                     (INT_NUM_IM2_IRL0 + 30)
-+/* EIM Interrupt */
-+#define FALCON_IRQ_EIM                                (INT_NUM_IM2_IRL0 + 31)
-+
-+/* ASC0 Transmit Interrupt */
-+#define FALCON_IRQ_ASC0_T                     (INT_NUM_IM3_IRL0 + 0)
-+/* ASC0 Receive Interrupt */
-+#define FALCON_IRQ_ASC0_R                     (INT_NUM_IM3_IRL0 + 1)
-+/* ASC0 Error Interrupt */
-+#define FALCON_IRQ_ASC0_E                     (INT_NUM_IM3_IRL0 + 2)
-+/* ASC0 Transmit Buffer Interrupt */
-+#define FALCON_IRQ_ASC0_TB                    (INT_NUM_IM3_IRL0 + 3)
-+/* ASC0 Autobaud Start Interrupt */
-+#define FALCON_IRQ_ASC0_ABST                  (INT_NUM_IM3_IRL0 + 4)
-+/* ASC0 Autobaud Detection Interrupt */
-+#define FALCON_IRQ_ASC0_ABDET                 (INT_NUM_IM3_IRL0 + 5)
-+/* ASC1 Modem Status Interrupt */
-+#define FALCON_IRQ_ASC0_MS                    (INT_NUM_IM3_IRL0 + 6)
-+/* ASC0 Soft Flow Control Interrupt */
-+#define FALCON_IRQ_ASC0_SFC                   (INT_NUM_IM3_IRL0 + 7)
-+/* ASC1 Transmit Interrupt */
-+#define FALCON_IRQ_ASC1_T                     (INT_NUM_IM3_IRL0 + 8)
-+/* ASC1 Receive Interrupt */
-+#define FALCON_IRQ_ASC1_R                     (INT_NUM_IM3_IRL0 + 9)
-+/* ASC1 Error Interrupt */
-+#define FALCON_IRQ_ASC1_E                     (INT_NUM_IM3_IRL0 + 10)
-+/* ASC1 Transmit Buffer Interrupt */
-+#define FALCON_IRQ_ASC1_TB                    (INT_NUM_IM3_IRL0 + 11)
-+/* ASC1 Autobaud Start Interrupt */
-+#define FALCON_IRQ_ASC1_ABST                  (INT_NUM_IM3_IRL0 + 12)
-+/* ASC1 Autobaud Detection Interrupt */
-+#define FALCON_IRQ_ASC1_ABDET                 (INT_NUM_IM3_IRL0 + 13)
-+/* ASC1 Modem Status Interrupt */
-+#define FALCON_IRQ_ASC1_MS                    (INT_NUM_IM3_IRL0 + 14)
-+/* ASC1 Soft Flow Control Interrupt */
-+#define FALCON_IRQ_ASC1_SFC                   (INT_NUM_IM3_IRL0 + 15)
-+/* GPTC Timer/Counter 1A Interrupt */
-+#define FALCON_IRQ_GPTC_TC1A                  (INT_NUM_IM3_IRL0 + 16)
-+/* GPTC Timer/Counter 1B Interrupt */
-+#define FALCON_IRQ_GPTC_TC1B                  (INT_NUM_IM3_IRL0 + 17)
-+/* GPTC Timer/Counter 2A Interrupt */
-+#define FALCON_IRQ_GPTC_TC2A                  (INT_NUM_IM3_IRL0 + 18)
-+/* GPTC Timer/Counter 2B Interrupt */
-+#define FALCON_IRQ_GPTC_TC2B                  (INT_NUM_IM3_IRL0 + 19)
-+/* GPTC Timer/Counter 3A Interrupt */
-+#define FALCON_IRQ_GPTC_TC3A                  (INT_NUM_IM3_IRL0 + 20)
-+/* GPTC Timer/Counter 3B Interrupt */
-+#define FALCON_IRQ_GPTC_TC3B                  (INT_NUM_IM3_IRL0 + 21)
-+/* DFEV0, Channel 1 Transmit Interrupt */
-+#define FALCON_IRQ_DFEV0_2TX                  (INT_NUM_IM3_IRL0 + 26)
-+/* DFEV0, Channel 1 Receive Interrupt */
-+#define FALCON_IRQ_DFEV0_2RX                  (INT_NUM_IM3_IRL0 + 27)
-+/* DFEV0, Channel 1 General Purpose Interrupt */
-+#define FALCON_IRQ_DFEV0_2GP                  (INT_NUM_IM3_IRL0 + 28)
-+/* DFEV0, Channel 0 Transmit Interrupt */
-+#define FALCON_IRQ_DFEV0_1TX                  (INT_NUM_IM3_IRL0 + 29)
-+/* DFEV0, Channel 0 Receive Interrupt */
-+#define FALCON_IRQ_DFEV0_1RX                  (INT_NUM_IM3_IRL0 + 30)
-+/* DFEV0, Channel 0 General Purpose Interrupt */
-+#define FALCON_IRQ_DFEV0_1GP                  (INT_NUM_IM3_IRL0 + 31)
-+
-+/* ICTRLL 0 Error */
-+#define FALCON_IRQ_ICTRLL0_ERR                        (INT_NUM_IM4_IRL0 + 0)
-+/* ICTRLL 1 Error */
-+#define FALCON_IRQ_ICTRLL1_ERR                        (INT_NUM_IM4_IRL0 + 1)
-+/* ICTRLL 2 Error */
-+#define FALCON_IRQ_ICTRLL2_ERR                        (INT_NUM_IM4_IRL0 + 2)
-+/* ICTRLL 3 Error */
-+#define FALCON_IRQ_ICTRLL3_ERR                        (INT_NUM_IM4_IRL0 + 3)
-+/* OCTRLL 0 Error */
-+#define FALCON_IRQ_OCTRLL0_ERR                        (INT_NUM_IM4_IRL0 + 4)
-+/* OCTRLL 1 Error */
-+#define FALCON_IRQ_OCTRLL1_ERR                        (INT_NUM_IM4_IRL0 + 5)
-+/* OCTRLL 2 Error */
-+#define FALCON_IRQ_OCTRLL2_ERR                        (INT_NUM_IM4_IRL0 + 6)
-+/* OCTRLL 3 Error */
-+#define FALCON_IRQ_OCTRLL3_ERR                        (INT_NUM_IM4_IRL0 + 7)
-+/* ICTRLG Error */
-+#define FALCON_IRQ_ICTRLG_ERR                 (INT_NUM_IM4_IRL0 + 8)
-+/* OCTRLG Error */
-+#define FALCON_IRQ_OCTRLG_ERR                 (INT_NUM_IM4_IRL0 + 9)
-+/* IQM Error */
-+#define FALCON_IRQ_IQM_ERR                    (INT_NUM_IM4_IRL0 + 10)
-+/* FSQM Error */
-+#define FALCON_IRQ_FSQM_ERR                   (INT_NUM_IM4_IRL0 + 11)
-+/* TMU Error */
-+#define FALCON_IRQ_TMU_ERR                    (INT_NUM_IM4_IRL0 + 12)
-+/* MPS Status Interrupt #0 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR0                    (INT_NUM_IM4_IRL0 + 14)
-+/* MPS Status Interrupt #1 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR1                    (INT_NUM_IM4_IRL0 + 15)
-+/* MPS Status Interrupt #2 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR2                    (INT_NUM_IM4_IRL0 + 16)
-+/* MPS Status Interrupt #3 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR3                    (INT_NUM_IM4_IRL0 + 17)
-+/* MPS Status Interrupt #4 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR4                    (INT_NUM_IM4_IRL0 + 18)
-+/* MPS Status Interrupt #5 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR5                    (INT_NUM_IM4_IRL0 + 19)
-+/* MPS Status Interrupt #6 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR6                    (INT_NUM_IM4_IRL0 + 20)
-+/* MPS Status Interrupt #7 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR7                    (INT_NUM_IM4_IRL0 + 21)
-+/* MPS Status Interrupt #8 (VPE1 to VPE0) */
-+#define FALCON_IRQ_MPS_IR8                    (INT_NUM_IM4_IRL0 + 22)
-+/* VPE0 Exception Level Flag Interrupt */
-+#define FALCON_IRQ_VPE0_EXL                   (INT_NUM_IM4_IRL0 + 29)
-+/* VPE0 Error Level Flag Interrupt */
-+#define FALCON_IRQ_VPE0_ERL                   (INT_NUM_IM4_IRL0 + 30)
-+/* VPE0 Performance Monitoring Counter Interrupt */
-+#define FALCON_IRQ_VPE0_PMCIR                 (INT_NUM_IM4_IRL0 + 31)
-+
-+#endif /* _FALCON_IRQ__ */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/falcon/gpon_reg_base.h
-@@ -0,0 +1,376 @@
-+/******************************************************************************
-+
-+                               Copyright (c) 2010
-+                            Lantiq Deutschland GmbH
-+
-+  For licensing information, see the file 'LICENSE' in the root folder of
-+  this software module.
-+
-+******************************************************************************/
-+
-+#ifndef _gpon_reg_base_h
-+#define _gpon_reg_base_h
-+
-+/** \addtogroup GPON_BASE
-+   @{
-+*/
-+
-+#ifndef KSEG1
-+#define KSEG1 0xA0000000
-+#endif
-+
-+/** address range for ebu
-+    0x18000000--0x180000FF */
-+#define GPON_EBU_BASE         (KSEG1 | 0x18000000)
-+#define GPON_EBU_END          (KSEG1 | 0x180000FF)
-+#define GPON_EBU_SIZE         0x00000100
-+/** address range for gpearb
-+    0x1D400100--0x1D4001FF */
-+#define GPON_GPEARB_BASE              (KSEG1 | 0x1D400100)
-+#define GPON_GPEARB_END               (KSEG1 | 0x1D4001FF)
-+#define GPON_GPEARB_SIZE              0x00000100
-+/** address range for tmu
-+    0x1D404000--0x1D404FFF */
-+#define GPON_TMU_BASE         (KSEG1 | 0x1D404000)
-+#define GPON_TMU_END          (KSEG1 | 0x1D404FFF)
-+#define GPON_TMU_SIZE         0x00001000
-+/** address range for iqm
-+    0x1D410000--0x1D41FFFF */
-+#define GPON_IQM_BASE         (KSEG1 | 0x1D410000)
-+#define GPON_IQM_END          (KSEG1 | 0x1D41FFFF)
-+#define GPON_IQM_SIZE         0x00010000
-+/** address range for octrlg
-+    0x1D420000--0x1D42FFFF */
-+#define GPON_OCTRLG_BASE              (KSEG1 | 0x1D420000)
-+#define GPON_OCTRLG_END               (KSEG1 | 0x1D42FFFF)
-+#define GPON_OCTRLG_SIZE              0x00010000
-+/** address range for octrll0
-+    0x1D440000--0x1D4400FF */
-+#define GPON_OCTRLL0_BASE             (KSEG1 | 0x1D440000)
-+#define GPON_OCTRLL0_END              (KSEG1 | 0x1D4400FF)
-+#define GPON_OCTRLL0_SIZE             0x00000100
-+/** address range for octrll1
-+    0x1D440100--0x1D4401FF */
-+#define GPON_OCTRLL1_BASE             (KSEG1 | 0x1D440100)
-+#define GPON_OCTRLL1_END              (KSEG1 | 0x1D4401FF)
-+#define GPON_OCTRLL1_SIZE             0x00000100
-+/** address range for octrll2
-+    0x1D440200--0x1D4402FF */
-+#define GPON_OCTRLL2_BASE             (KSEG1 | 0x1D440200)
-+#define GPON_OCTRLL2_END              (KSEG1 | 0x1D4402FF)
-+#define GPON_OCTRLL2_SIZE             0x00000100
-+/** address range for octrll3
-+    0x1D440300--0x1D4403FF */
-+#define GPON_OCTRLL3_BASE             (KSEG1 | 0x1D440300)
-+#define GPON_OCTRLL3_END              (KSEG1 | 0x1D4403FF)
-+#define GPON_OCTRLL3_SIZE             0x00000100
-+/** address range for octrlc
-+    0x1D441000--0x1D4410FF */
-+#define GPON_OCTRLC_BASE              (KSEG1 | 0x1D441000)
-+#define GPON_OCTRLC_END               (KSEG1 | 0x1D4410FF)
-+#define GPON_OCTRLC_SIZE              0x00000100
-+/** address range for ictrlg
-+    0x1D450000--0x1D45FFFF */
-+#define GPON_ICTRLG_BASE              (KSEG1 | 0x1D450000)
-+#define GPON_ICTRLG_END               (KSEG1 | 0x1D45FFFF)
-+#define GPON_ICTRLG_SIZE              0x00010000
-+/** address range for ictrll0
-+    0x1D460000--0x1D4601FF */
-+#define GPON_ICTRLL0_BASE             (KSEG1 | 0x1D460000)
-+#define GPON_ICTRLL0_END              (KSEG1 | 0x1D4601FF)
-+#define GPON_ICTRLL0_SIZE             0x00000200
-+/** address range for ictrll1
-+    0x1D460200--0x1D4603FF */
-+#define GPON_ICTRLL1_BASE             (KSEG1 | 0x1D460200)
-+#define GPON_ICTRLL1_END              (KSEG1 | 0x1D4603FF)
-+#define GPON_ICTRLL1_SIZE             0x00000200
-+/** address range for ictrll2
-+    0x1D460400--0x1D4605FF */
-+#define GPON_ICTRLL2_BASE             (KSEG1 | 0x1D460400)
-+#define GPON_ICTRLL2_END              (KSEG1 | 0x1D4605FF)
-+#define GPON_ICTRLL2_SIZE             0x00000200
-+/** address range for ictrll3
-+    0x1D460600--0x1D4607FF */
-+#define GPON_ICTRLL3_BASE             (KSEG1 | 0x1D460600)
-+#define GPON_ICTRLL3_END              (KSEG1 | 0x1D4607FF)
-+#define GPON_ICTRLL3_SIZE             0x00000200
-+/** address range for ictrlc0
-+    0x1D461000--0x1D4610FF */
-+#define GPON_ICTRLC0_BASE             (KSEG1 | 0x1D461000)
-+#define GPON_ICTRLC0_END              (KSEG1 | 0x1D4610FF)
-+#define GPON_ICTRLC0_SIZE             0x00000100
-+/** address range for ictrlc1
-+    0x1D461100--0x1D4611FF */
-+#define GPON_ICTRLC1_BASE             (KSEG1 | 0x1D461100)
-+#define GPON_ICTRLC1_END              (KSEG1 | 0x1D4611FF)
-+#define GPON_ICTRLC1_SIZE             0x00000100
-+/** address range for fsqm
-+    0x1D500000--0x1D5FFFFF */
-+#define GPON_FSQM_BASE                (KSEG1 | 0x1D500000)
-+#define GPON_FSQM_END         (KSEG1 | 0x1D5FFFFF)
-+#define GPON_FSQM_SIZE                0x00100000
-+/** address range for pctrl
-+    0x1D600000--0x1D6001FF */
-+#define GPON_PCTRL_BASE               (KSEG1 | 0x1D600000)
-+#define GPON_PCTRL_END                (KSEG1 | 0x1D6001FF)
-+#define GPON_PCTRL_SIZE               0x00000200
-+/** address range for link0
-+    0x1D600200--0x1D6002FF */
-+#define GPON_LINK0_BASE               (KSEG1 | 0x1D600200)
-+#define GPON_LINK0_END                (KSEG1 | 0x1D6002FF)
-+#define GPON_LINK0_SIZE               0x00000100
-+/** address range for link1
-+    0x1D600300--0x1D6003FF */
-+#define GPON_LINK1_BASE               (KSEG1 | 0x1D600300)
-+#define GPON_LINK1_END                (KSEG1 | 0x1D6003FF)
-+#define GPON_LINK1_SIZE               0x00000100
-+/** address range for link2
-+    0x1D600400--0x1D6004FF */
-+#define GPON_LINK2_BASE               (KSEG1 | 0x1D600400)
-+#define GPON_LINK2_END                (KSEG1 | 0x1D6004FF)
-+#define GPON_LINK2_SIZE               0x00000100
-+/** address range for disp
-+    0x1D600500--0x1D6005FF */
-+#define GPON_DISP_BASE                (KSEG1 | 0x1D600500)
-+#define GPON_DISP_END         (KSEG1 | 0x1D6005FF)
-+#define GPON_DISP_SIZE                0x00000100
-+/** address range for merge
-+    0x1D600600--0x1D6006FF */
-+#define GPON_MERGE_BASE               (KSEG1 | 0x1D600600)
-+#define GPON_MERGE_END                (KSEG1 | 0x1D6006FF)
-+#define GPON_MERGE_SIZE               0x00000100
-+/** address range for tbm
-+    0x1D600700--0x1D6007FF */
-+#define GPON_TBM_BASE         (KSEG1 | 0x1D600700)
-+#define GPON_TBM_END          (KSEG1 | 0x1D6007FF)
-+#define GPON_TBM_SIZE         0x00000100
-+/** address range for pe0
-+    0x1D610000--0x1D61FFFF */
-+#define GPON_PE0_BASE         (KSEG1 | 0x1D610000)
-+#define GPON_PE0_END          (KSEG1 | 0x1D61FFFF)
-+#define GPON_PE0_SIZE         0x00010000
-+/** address range for pe1
-+    0x1D620000--0x1D62FFFF */
-+#define GPON_PE1_BASE         (KSEG1 | 0x1D620000)
-+#define GPON_PE1_END          (KSEG1 | 0x1D62FFFF)
-+#define GPON_PE1_SIZE         0x00010000
-+/** address range for pe2
-+    0x1D630000--0x1D63FFFF */
-+#define GPON_PE2_BASE         (KSEG1 | 0x1D630000)
-+#define GPON_PE2_END          (KSEG1 | 0x1D63FFFF)
-+#define GPON_PE2_SIZE         0x00010000
-+/** address range for pe3
-+    0x1D640000--0x1D64FFFF */
-+#define GPON_PE3_BASE         (KSEG1 | 0x1D640000)
-+#define GPON_PE3_END          (KSEG1 | 0x1D64FFFF)
-+#define GPON_PE3_SIZE         0x00010000
-+/** address range for pe4
-+    0x1D650000--0x1D65FFFF */
-+#define GPON_PE4_BASE         (KSEG1 | 0x1D650000)
-+#define GPON_PE4_END          (KSEG1 | 0x1D65FFFF)
-+#define GPON_PE4_SIZE         0x00010000
-+/** address range for pe5
-+    0x1D660000--0x1D66FFFF */
-+#define GPON_PE5_BASE         (KSEG1 | 0x1D660000)
-+#define GPON_PE5_END          (KSEG1 | 0x1D66FFFF)
-+#define GPON_PE5_SIZE         0x00010000
-+/** address range for sys_gpe
-+    0x1D700000--0x1D7000FF */
-+#define GPON_SYS_GPE_BASE             (KSEG1 | 0x1D700000)
-+#define GPON_SYS_GPE_END              (KSEG1 | 0x1D7000FF)
-+#define GPON_SYS_GPE_SIZE             0x00000100
-+/** address range for eim
-+    0x1D800000--0x1D800FFF */
-+#define GPON_EIM_BASE         (KSEG1 | 0x1D800000)
-+#define GPON_EIM_END          (KSEG1 | 0x1D800FFF)
-+#define GPON_EIM_SIZE         0x00001000
-+/** address range for sxgmii
-+    0x1D808800--0x1D8088FF */
-+#define GPON_SXGMII_BASE              (KSEG1 | 0x1D808800)
-+#define GPON_SXGMII_END               (KSEG1 | 0x1D8088FF)
-+#define GPON_SXGMII_SIZE              0x00000100
-+/** address range for sgmii
-+    0x1D808C00--0x1D808CFF */
-+#define GPON_SGMII_BASE               (KSEG1 | 0x1D808C00)
-+#define GPON_SGMII_END                (KSEG1 | 0x1D808CFF)
-+#define GPON_SGMII_SIZE               0x00000100
-+/** address range for gpio0
-+    0x1D810000--0x1D81007F */
-+#define GPON_GPIO0_BASE               (KSEG1 | 0x1D810000)
-+#define GPON_GPIO0_END                (KSEG1 | 0x1D81007F)
-+#define GPON_GPIO0_SIZE               0x00000080
-+/** address range for gpio2
-+    0x1D810100--0x1D81017F */
-+#define GPON_GPIO2_BASE               (KSEG1 | 0x1D810100)
-+#define GPON_GPIO2_END                (KSEG1 | 0x1D81017F)
-+#define GPON_GPIO2_SIZE               0x00000080
-+/** address range for sys_eth
-+    0x1DB00000--0x1DB000FF */
-+#define GPON_SYS_ETH_BASE             (KSEG1 | 0x1DB00000)
-+#define GPON_SYS_ETH_END              (KSEG1 | 0x1DB000FF)
-+#define GPON_SYS_ETH_SIZE             0x00000100
-+/** address range for padctrl0
-+    0x1DB01000--0x1DB010FF */
-+#define GPON_PADCTRL0_BASE            (KSEG1 | 0x1DB01000)
-+#define GPON_PADCTRL0_END             (KSEG1 | 0x1DB010FF)
-+#define GPON_PADCTRL0_SIZE            0x00000100
-+/** address range for padctrl2
-+    0x1DB02000--0x1DB020FF */
-+#define GPON_PADCTRL2_BASE            (KSEG1 | 0x1DB02000)
-+#define GPON_PADCTRL2_END             (KSEG1 | 0x1DB020FF)
-+#define GPON_PADCTRL2_SIZE            0x00000100
-+/** address range for gtc
-+    0x1DC05000--0x1DC052D4 */
-+#define GPON_GTC_BASE         (KSEG1 | 0x1DC05000)
-+#define GPON_GTC_END          (KSEG1 | 0x1DC052D4)
-+#define GPON_GTC_SIZE         0x000002D5
-+/** address range for pma
-+    0x1DD00000--0x1DD003FF */
-+#define GPON_PMA_BASE         (KSEG1 | 0x1DD00000)
-+#define GPON_PMA_END          (KSEG1 | 0x1DD003FF)
-+#define GPON_PMA_SIZE         0x00000400
-+/** address range for fcsic
-+    0x1DD00600--0x1DD0061F */
-+#define GPON_FCSIC_BASE               (KSEG1 | 0x1DD00600)
-+#define GPON_FCSIC_END                (KSEG1 | 0x1DD0061F)
-+#define GPON_FCSIC_SIZE               0x00000020
-+/** address range for pma_int200
-+    0x1DD00700--0x1DD0070F */
-+#define GPON_PMA_INT200_BASE          (KSEG1 | 0x1DD00700)
-+#define GPON_PMA_INT200_END           (KSEG1 | 0x1DD0070F)
-+#define GPON_PMA_INT200_SIZE          0x00000010
-+/** address range for pma_inttx
-+    0x1DD00720--0x1DD0072F */
-+#define GPON_PMA_INTTX_BASE           (KSEG1 | 0x1DD00720)
-+#define GPON_PMA_INTTX_END            (KSEG1 | 0x1DD0072F)
-+#define GPON_PMA_INTTX_SIZE           0x00000010
-+/** address range for pma_intrx
-+    0x1DD00740--0x1DD0074F */
-+#define GPON_PMA_INTRX_BASE           (KSEG1 | 0x1DD00740)
-+#define GPON_PMA_INTRX_END            (KSEG1 | 0x1DD0074F)
-+#define GPON_PMA_INTRX_SIZE           0x00000010
-+/** address range for gtc_pma
-+    0x1DEFFF00--0x1DEFFFFF */
-+#define GPON_GTC_PMA_BASE             (KSEG1 | 0x1DEFFF00)
-+#define GPON_GTC_PMA_END              (KSEG1 | 0x1DEFFFFF)
-+#define GPON_GTC_PMA_SIZE             0x00000100
-+/** address range for sys
-+    0x1DF00000--0x1DF000FF */
-+#define GPON_SYS_BASE         (KSEG1 | 0x1DF00000)
-+#define GPON_SYS_END          (KSEG1 | 0x1DF000FF)
-+#define GPON_SYS_SIZE         0x00000100
-+/** address range for asc1
-+    0x1E100B00--0x1E100BFF */
-+#define GPON_ASC1_BASE                (KSEG1 | 0x1E100B00)
-+#define GPON_ASC1_END         (KSEG1 | 0x1E100BFF)
-+#define GPON_ASC1_SIZE                0x00000100
-+/** address range for asc0
-+    0x1E100C00--0x1E100CFF */
-+#define GPON_ASC0_BASE                (KSEG1 | 0x1E100C00)
-+#define GPON_ASC0_END         (KSEG1 | 0x1E100CFF)
-+#define GPON_ASC0_SIZE                0x00000100
-+/** address range for i2c
-+    0x1E200000--0x1E20FFFF */
-+#define GPON_I2C_BASE         (KSEG1 | 0x1E200000)
-+#define GPON_I2C_END          (KSEG1 | 0x1E20FFFF)
-+#define GPON_I2C_SIZE         0x00010000
-+/** address range for gpio1
-+    0x1E800100--0x1E80017F */
-+#define GPON_GPIO1_BASE               (KSEG1 | 0x1E800100)
-+#define GPON_GPIO1_END                (KSEG1 | 0x1E80017F)
-+#define GPON_GPIO1_SIZE               0x00000080
-+/** address range for gpio3
-+    0x1E800200--0x1E80027F */
-+#define GPON_GPIO3_BASE               (KSEG1 | 0x1E800200)
-+#define GPON_GPIO3_END                (KSEG1 | 0x1E80027F)
-+#define GPON_GPIO3_SIZE               0x00000080
-+/** address range for gpio4
-+    0x1E800300--0x1E80037F */
-+#define GPON_GPIO4_BASE               (KSEG1 | 0x1E800300)
-+#define GPON_GPIO4_END                (KSEG1 | 0x1E80037F)
-+#define GPON_GPIO4_SIZE               0x00000080
-+/** address range for padctrl1
-+    0x1E800400--0x1E8004FF */
-+#define GPON_PADCTRL1_BASE            (KSEG1 | 0x1E800400)
-+#define GPON_PADCTRL1_END             (KSEG1 | 0x1E8004FF)
-+#define GPON_PADCTRL1_SIZE            0x00000100
-+/** address range for padctrl3
-+    0x1E800500--0x1E8005FF */
-+#define GPON_PADCTRL3_BASE            (KSEG1 | 0x1E800500)
-+#define GPON_PADCTRL3_END             (KSEG1 | 0x1E8005FF)
-+#define GPON_PADCTRL3_SIZE            0x00000100
-+/** address range for padctrl4
-+    0x1E800600--0x1E8006FF */
-+#define GPON_PADCTRL4_BASE            (KSEG1 | 0x1E800600)
-+#define GPON_PADCTRL4_END             (KSEG1 | 0x1E8006FF)
-+#define GPON_PADCTRL4_SIZE            0x00000100
-+/** address range for status
-+    0x1E802000--0x1E80207F */
-+#define GPON_STATUS_BASE              (KSEG1 | 0x1E802000)
-+#define GPON_STATUS_END               (KSEG1 | 0x1E80207F)
-+#define GPON_STATUS_SIZE              0x00000080
-+/** address range for dcdc_1v0
-+    0x1E803000--0x1E8033FF */
-+#define GPON_DCDC_1V0_BASE            (KSEG1 | 0x1E803000)
-+#define GPON_DCDC_1V0_END             (KSEG1 | 0x1E8033FF)
-+#define GPON_DCDC_1V0_SIZE            0x00000400
-+/** address range for dcdc_ddr
-+    0x1E804000--0x1E8043FF */
-+#define GPON_DCDC_DDR_BASE            (KSEG1 | 0x1E804000)
-+#define GPON_DCDC_DDR_END             (KSEG1 | 0x1E8043FF)
-+#define GPON_DCDC_DDR_SIZE            0x00000400
-+/** address range for dcdc_apd
-+    0x1E805000--0x1E8053FF */
-+#define GPON_DCDC_APD_BASE            (KSEG1 | 0x1E805000)
-+#define GPON_DCDC_APD_END             (KSEG1 | 0x1E8053FF)
-+#define GPON_DCDC_APD_SIZE            0x00000400
-+/** address range for sys1
-+    0x1EF00000--0x1EF000FF */
-+#define GPON_SYS1_BASE                (KSEG1 | 0x1EF00000)
-+#define GPON_SYS1_END         (KSEG1 | 0x1EF000FF)
-+#define GPON_SYS1_SIZE                0x00000100
-+/** address range for sbs0ctrl
-+    0x1F080000--0x1F0801FF */
-+#define GPON_SBS0CTRL_BASE            (KSEG1 | 0x1F080000)
-+#define GPON_SBS0CTRL_END             (KSEG1 | 0x1F0801FF)
-+#define GPON_SBS0CTRL_SIZE            0x00000200
-+/** address range for sbs0red
-+    0x1F080200--0x1F08027F */
-+#define GPON_SBS0RED_BASE             (KSEG1 | 0x1F080200)
-+#define GPON_SBS0RED_END              (KSEG1 | 0x1F08027F)
-+#define GPON_SBS0RED_SIZE             0x00000080
-+/** address range for sbs0ram
-+    0x1F200000--0x1F32FFFF */
-+#define GPON_SBS0RAM_BASE             (KSEG1 | 0x1F200000)
-+#define GPON_SBS0RAM_END              (KSEG1 | 0x1F32FFFF)
-+#define GPON_SBS0RAM_SIZE             0x00130000
-+/** address range for ddrdb
-+    0x1F701000--0x1F701FFF */
-+#define GPON_DDRDB_BASE               (KSEG1 | 0x1F701000)
-+#define GPON_DDRDB_END                (KSEG1 | 0x1F701FFF)
-+#define GPON_DDRDB_SIZE               0x00001000
-+/** address range for sbiu
-+    0x1F880000--0x1F8800FF */
-+#define GPON_SBIU_BASE                (KSEG1 | 0x1F880000)
-+#define GPON_SBIU_END         (KSEG1 | 0x1F8800FF)
-+#define GPON_SBIU_SIZE                0x00000100
-+/** address range for icu0
-+    0x1F880200--0x1F8802DF */
-+#define GPON_ICU0_BASE                (KSEG1 | 0x1F880200)
-+#define GPON_ICU0_END         (KSEG1 | 0x1F8802DF)
-+#define GPON_ICU0_SIZE                0x000000E0
-+/** address range for icu1
-+    0x1F880300--0x1F8803DF */
-+#define GPON_ICU1_BASE                (KSEG1 | 0x1F880300)
-+#define GPON_ICU1_END         (KSEG1 | 0x1F8803DF)
-+#define GPON_ICU1_SIZE                0x000000E0
-+/** address range for wdt
-+    0x1F8803F0--0x1F8803FF */
-+#define GPON_WDT_BASE         (KSEG1 | 0x1F8803F0)
-+#define GPON_WDT_END          (KSEG1 | 0x1F8803FF)
-+#define GPON_WDT_SIZE         0x00000010
-+
-+/*! @} */ /* GPON_BASE */
-+
-+#endif /* _gpon_reg_base_h */
-+
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/falcon/i2c_reg.h
-@@ -0,0 +1,830 @@
-+/******************************************************************************
-+
-+                               Copyright (c) 2010
-+                            Lantiq Deutschland GmbH
-+
-+  For licensing information, see the file 'LICENSE' in the root folder of
-+  this software module.
-+
-+******************************************************************************/
-+
-+#ifndef _i2c_reg_h
-+#define _i2c_reg_h
-+
-+/** \addtogroup I2C_REGISTER
-+   @{
-+*/
-+/* access macros */
-+#define i2c_r32(reg) reg_r32(&i2c->reg)
-+#define i2c_w32(val, reg) reg_w32(val, &i2c->reg)
-+#define i2c_w32_mask(clear, set, reg) reg_w32_mask(clear, set, &i2c->reg)
-+#define i2c_r32_table(reg, idx) reg_r32_table(i2c->reg, idx)
-+#define i2c_w32_table(val, reg, idx) reg_w32_table(val, i2c->reg, idx)
-+#define i2c_w32_table_mask(clear, set, reg, idx) reg_w32_table_mask(clear, set, i2c->reg, idx)
-+#define i2c_adr_table(reg, idx) adr_table(i2c->reg, idx)
-+
-+
-+/** I2C register structure */
-+struct gpon_reg_i2c
-+{
-+   /** I2C Kernel Clock Control Register */
-+   unsigned int clc; /* 0x00000000 */
-+   /** Reserved */
-+   unsigned int res_0; /* 0x00000004 */
-+   /** I2C Identification Register */
-+   unsigned int id; /* 0x00000008 */
-+   /** Reserved */
-+   unsigned int res_1; /* 0x0000000C */
-+   /** I2C RUN Control Register
-+       This register enables and disables the I2C peripheral. Before enabling, the I2C has to be configured properly. After enabling no configuration is possible */
-+   unsigned int run_ctrl; /* 0x00000010 */
-+   /** I2C End Data Control Register
-+       This register is used to either turn around the data transmission direction or to address another slave without sending a stop condition. Also the software can stop the slave-transmitter by sending a not-accolade when working as master-receiver or even stop data transmission immediately when operating as master-transmitter. The writing to the bits of this control register is only effective when in MASTER RECEIVES BYTES, MASTER TRANSMITS BYTES, MASTER RESTART or SLAVE RECEIVE BYTES state */
-+   unsigned int endd_ctrl; /* 0x00000014 */
-+   /** I2C Fractional Divider Configuration Register
-+       These register is used to program the fractional divider of the I2C bus. Before the peripheral is switched on by setting the RUN-bit the two (fixed) values for the two operating frequencies are programmed into these (configuration) registers. The Register FDIV_HIGH_CFG has the same layout as I2C_FDIV_CFG. */
-+   unsigned int fdiv_cfg; /* 0x00000018 */
-+   /** I2C Fractional Divider (highspeed mode) Configuration Register
-+       These register is used to program the fractional divider of the I2C bus. Before the peripheral is switched on by setting the RUN-bit the two (fixed) values for the two operating frequencies are programmed into these (configuration) registers. The Register FDIV_CFG has the same layout as I2C_FDIV_CFG. */
-+   unsigned int fdiv_high_cfg; /* 0x0000001C */
-+   /** I2C Address Configuration Register */
-+   unsigned int addr_cfg; /* 0x00000020 */
-+   /** I2C Bus Status Register
-+       This register gives a status information of the I2C. This additional information can be used by the software to start proper actions. */
-+   unsigned int bus_stat; /* 0x00000024 */
-+   /** I2C FIFO Configuration Register */
-+   unsigned int fifo_cfg; /* 0x00000028 */
-+   /** I2C Maximum Received Packet Size Register */
-+   unsigned int mrps_ctrl; /* 0x0000002C */
-+   /** I2C Received Packet Size Status Register */
-+   unsigned int rps_stat; /* 0x00000030 */
-+   /** I2C Transmit Packet Size Register */
-+   unsigned int tps_ctrl; /* 0x00000034 */
-+   /** I2C Filled FIFO Stages Status Register */
-+   unsigned int ffs_stat; /* 0x00000038 */
-+   /** Reserved */
-+   unsigned int res_2; /* 0x0000003C */
-+   /** I2C Timing Configuration Register */
-+   unsigned int tim_cfg; /* 0x00000040 */
-+   /** Reserved */
-+   unsigned int res_3[7]; /* 0x00000044 */
-+   /** I2C Error Interrupt Request Source Mask Register */
-+   unsigned int err_irqsm; /* 0x00000060 */
-+   /** I2C Error Interrupt Request Source Status Register */
-+   unsigned int err_irqss; /* 0x00000064 */
-+   /** I2C Error Interrupt Request Source Clear Register */
-+   unsigned int err_irqsc; /* 0x00000068 */
-+   /** Reserved */
-+   unsigned int res_4; /* 0x0000006C */
-+   /** I2C Protocol Interrupt Request Source Mask Register */
-+   unsigned int p_irqsm; /* 0x00000070 */
-+   /** I2C Protocol Interrupt Request Source Status Register */
-+   unsigned int p_irqss; /* 0x00000074 */
-+   /** I2C Protocol Interrupt Request Source Clear Register */
-+   unsigned int p_irqsc; /* 0x00000078 */
-+   /** Reserved */
-+   unsigned int res_5; /* 0x0000007C */
-+   /** I2C Raw Interrupt Status Register */
-+   unsigned int ris; /* 0x00000080 */
-+   /** I2C Interrupt Mask Control Register */
-+   unsigned int imsc; /* 0x00000084 */
-+   /** I2C Masked Interrupt Status Register */
-+   unsigned int mis; /* 0x00000088 */
-+   /** I2C Interrupt Clear Register */
-+   unsigned int icr; /* 0x0000008C */
-+   /** I2C Interrupt Set Register */
-+   unsigned int isr; /* 0x00000090 */
-+   /** I2C DMA Enable Register */
-+   unsigned int dmae; /* 0x00000094 */
-+   /** Reserved */
-+   unsigned int res_6[8154]; /* 0x00000098 */
-+   /** I2C Transmit Data Register */
-+   unsigned int txd; /* 0x00008000 */
-+   /** Reserved */
-+   unsigned int res_7[4095]; /* 0x00008004 */
-+   /** I2C Receive Data Register */
-+   unsigned int rxd; /* 0x0000C000 */
-+   /** Reserved */
-+   unsigned int res_8[4095]; /* 0x0000C004 */
-+};
-+
-+
-+/* Fields of "I2C Kernel Clock Control Register" */
-+/** Clock Divider for Optional Run Mode (AHB peripherals)
-+    Max 8-bit divider value. Note: As long as the new divider value ORMC is not valid, the register returns 0x0000 00xx on reading. */
-+#define I2C_CLC_ORMC_MASK 0x00FF0000
-+/** field offset */
-+#define I2C_CLC_ORMC_OFFSET 16
-+/** Clock Divider for Normal Run Mode
-+    Max 8-bit divider value. IF RMC is 0 the module is disabled. Note: As long as the new divider value RMC is not valid, the register returns 0x0000 00xx on reading. */
-+#define I2C_CLC_RMC_MASK 0x0000FF00
-+/** field offset */
-+#define I2C_CLC_RMC_OFFSET 8
-+/** Fast Shut-Off Enable Bit */
-+#define I2C_CLC_FSOE 0x00000020
-+/* Disable
-+#define I2C_CLC_FSOE_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_CLC_FSOE_EN 0x00000020
-+/** Suspend Bit Write Enable for OCDS */
-+#define I2C_CLC_SBWE 0x00000010
-+/* Disable
-+#define I2C_CLC_SBWE_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_CLC_SBWE_EN 0x00000010
-+/** Disable External Request Disable */
-+#define I2C_CLC_EDIS 0x00000008
-+/* Enable
-+#define I2C_CLC_EDIS_EN 0x00000000 */
-+/** Disable */
-+#define I2C_CLC_EDIS_DIS 0x00000008
-+/** Suspend Enable Bit for OCDS */
-+#define I2C_CLC_SPEN 0x00000004
-+/* Disable
-+#define I2C_CLC_SPEN_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_CLC_SPEN_EN 0x00000004
-+/** Disable Status Bit
-+    Bit DISS can be modified only by writing to bit DISR */
-+#define I2C_CLC_DISS 0x00000002
-+/* Enable
-+#define I2C_CLC_DISS_EN 0x00000000 */
-+/** Disable */
-+#define I2C_CLC_DISS_DIS 0x00000002
-+/** Disable Request Bit */
-+#define I2C_CLC_DISR 0x00000001
-+/* Module disable not requested
-+#define I2C_CLC_DISR_OFF 0x00000000 */
-+/** Module disable requested */
-+#define I2C_CLC_DISR_ON 0x00000001
-+
-+/* Fields of "I2C Identification Register" */
-+/** Module ID */
-+#define I2C_ID_ID_MASK 0x0000FF00
-+/** field offset */
-+#define I2C_ID_ID_OFFSET 8
-+/** Revision */
-+#define I2C_ID_REV_MASK 0x000000FF
-+/** field offset */
-+#define I2C_ID_REV_OFFSET 0
-+
-+/* Fields of "I2C RUN Control Register" */
-+/** Enabling I2C Interface
-+    Only when this bit is set to zero, the configuration registers of the I2C peripheral are writable by SW. */
-+#define I2C_RUN_CTRL_RUN 0x00000001
-+/* Disable
-+#define I2C_RUN_CTRL_RUN_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_RUN_CTRL_RUN_EN 0x00000001
-+
-+/* Fields of "I2C End Data Control Register" */
-+/** Set End of Transmission
-+    Note:Do not write '1' to this bit when bus is free. This will cause an abort after the first byte when a new transfer is started. */
-+#define I2C_ENDD_CTRL_SETEND 0x00000002
-+/* No-Operation
-+#define I2C_ENDD_CTRL_SETEND_NOP 0x00000000 */
-+/** Master Receives Bytes */
-+#define I2C_ENDD_CTRL_SETEND_MRB 0x00000002
-+/** Set Restart Condition */
-+#define I2C_ENDD_CTRL_SETRSC 0x00000001
-+/* No-Operation
-+#define I2C_ENDD_CTRL_SETRSC_NOP 0x00000000 */
-+/** Master Restart */
-+#define I2C_ENDD_CTRL_SETRSC_RESTART 0x00000001
-+
-+/* Fields of "I2C Fractional Divider Configuration Register" */
-+/** Decrement Value of fractional divider */
-+#define I2C_FDIV_CFG_INC_MASK 0x00FF0000
-+/** field offset */
-+#define I2C_FDIV_CFG_INC_OFFSET 16
-+/** Increment Value of fractional divider */
-+#define I2C_FDIV_CFG_DEC_MASK 0x000007FF
-+/** field offset */
-+#define I2C_FDIV_CFG_DEC_OFFSET 0
-+
-+/* Fields of "I2C Fractional Divider (highspeed mode) Configuration Register" */
-+/** Decrement Value of fractional divider */
-+#define I2C_FDIV_HIGH_CFG_INC_MASK 0x00FF0000
-+/** field offset */
-+#define I2C_FDIV_HIGH_CFG_INC_OFFSET 16
-+/** Increment Value of fractional divider */
-+#define I2C_FDIV_HIGH_CFG_DEC_MASK 0x000007FF
-+/** field offset */
-+#define I2C_FDIV_HIGH_CFG_DEC_OFFSET 0
-+
-+/* Fields of "I2C Address Configuration Register" */
-+/** Stop on Packet End
-+    If device works as receiver a not acknowledge is generated in both cases. After successful transmission of a master code (during high speed mode) SOPE is not considered till a stop condition is manually generated by SETEND. */
-+#define I2C_ADDR_CFG_SOPE 0x00200000
-+/* Disable
-+#define I2C_ADDR_CFG_SOPE_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ADDR_CFG_SOPE_EN 0x00200000
-+/** Stop on Not Acknowledge
-+    After successful transmission of a master code (during high speed mode) SONA is not considered till a stop condition is manually generated by SETEND. */
-+#define I2C_ADDR_CFG_SONA 0x00100000
-+/* Disable
-+#define I2C_ADDR_CFG_SONA_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ADDR_CFG_SONA_EN 0x00100000
-+/** Master Enable */
-+#define I2C_ADDR_CFG_MnS 0x00080000
-+/* Disable
-+#define I2C_ADDR_CFG_MnS_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ADDR_CFG_MnS_EN 0x00080000
-+/** Master Code Enable */
-+#define I2C_ADDR_CFG_MCE 0x00040000
-+/* Disable
-+#define I2C_ADDR_CFG_MCE_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ADDR_CFG_MCE_EN 0x00040000
-+/** General Call Enable */
-+#define I2C_ADDR_CFG_GCE 0x00020000
-+/* Disable
-+#define I2C_ADDR_CFG_GCE_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ADDR_CFG_GCE_EN 0x00020000
-+/** Ten Bit Address Mode */
-+#define I2C_ADDR_CFG_TBAM 0x00010000
-+/* 7-bit address mode enabled.
-+#define I2C_ADDR_CFG_TBAM_7bit 0x00000000 */
-+/** 10-bit address mode enabled. */
-+#define I2C_ADDR_CFG_TBAM_10bit 0x00010000
-+/** I2C Bus device address
-+    This is the address of this device. (Watch out for reserved addresses by referring to Phillips Spec V2.1) This could either be a 7bit- address (bits [7:1]) or a 10bit- address (bits [9:0]). Note:The validity of the bits are in accordance with the TBAM bit. Bit-1 (Bit-0) is the LSB of the device address. */
-+#define I2C_ADDR_CFG_ADR_MASK 0x000003FF
-+/** field offset */
-+#define I2C_ADDR_CFG_ADR_OFFSET 0
-+
-+/* Fields of "I2C Bus Status Register" */
-+/** Read / not Write */
-+#define I2C_BUS_STAT_RNW 0x00000004
-+/* Write to I2C Bus.
-+#define I2C_BUS_STAT_RNW_WRITE 0x00000000 */
-+/** Read from I2C Bus. */
-+#define I2C_BUS_STAT_RNW_READ 0x00000004
-+/** Bus Status */
-+#define I2C_BUS_STAT_BS_MASK 0x00000003
-+/** field offset */
-+#define I2C_BUS_STAT_BS_OFFSET 0
-+/** I2C Bus is free. */
-+#define I2C_BUS_STAT_BS_FREE 0x00000000
-+/** A start condition has been detected on the bus (bus busy). */
-+#define I2C_BUS_STAT_BS_SC 0x00000001
-+/** The device is working as master and has claimed the control on the I2C-bus (busy master). */
-+#define I2C_BUS_STAT_BS_BM 0x00000002
-+/** A remote master has accessed this device as slave. */
-+#define I2C_BUS_STAT_BS_RM 0x00000003
-+
-+/* Fields of "I2C FIFO Configuration Register" */
-+/** TX FIFO Flow Control */
-+#define I2C_FIFO_CFG_TXFC 0x00020000
-+/* TX FIFO not as Flow Controller
-+#define I2C_FIFO_CFG_TXFC_TXNFC 0x00000000 */
-+/** RX FIFO Flow Control */
-+#define I2C_FIFO_CFG_RXFC 0x00010000
-+/* RX FIFO not as Flow Controller
-+#define I2C_FIFO_CFG_RXFC_RXNFC 0x00000000 */
-+/** The reset value depends on the used character sizes of the peripheral. The maximum selectable alignment depends on the maximum number of characters per stage. */
-+#define I2C_FIFO_CFG_TXFA_MASK 0x00003000
-+/** field offset */
-+#define I2C_FIFO_CFG_TXFA_OFFSET 12
-+/** Byte aligned (character alignment) */
-+#define I2C_FIFO_CFG_TXFA_TXFA0 0x00000000
-+/** Half word aligned (character alignment of two characters) */
-+#define I2C_FIFO_CFG_TXFA_TXFA1 0x00001000
-+/** Word aligned (character alignment of four characters) */
-+#define I2C_FIFO_CFG_TXFA_TXFA2 0x00002000
-+/** Double word aligned (character alignment of eight */
-+#define I2C_FIFO_CFG_TXFA_TXFA3 0x00003000
-+/** The reset value depends on the used character sizes of the peripheral. The maximum selectable alignment depends on the maximum number of characters per stage. */
-+#define I2C_FIFO_CFG_RXFA_MASK 0x00000300
-+/** field offset */
-+#define I2C_FIFO_CFG_RXFA_OFFSET 8
-+/** Byte aligned (character alignment) */
-+#define I2C_FIFO_CFG_RXFA_RXFA0 0x00000000
-+/** Half word aligned (character alignment of two characters) */
-+#define I2C_FIFO_CFG_RXFA_RXFA1 0x00000100
-+/** Word aligned (character alignment of four characters) */
-+#define I2C_FIFO_CFG_RXFA_RXFA2 0x00000200
-+/** Double word aligned (character alignment of eight */
-+#define I2C_FIFO_CFG_RXFA_RXFA3 0x00000300
-+/** DMA controller does not support a burst size of 2 words. The reset value is the half of the FIFO size. The maximum selectable burst size is smaller than the FIFO size. */
-+#define I2C_FIFO_CFG_TXBS_MASK 0x00000030
-+/** field offset */
-+#define I2C_FIFO_CFG_TXBS_OFFSET 4
-+/** 1 word */
-+#define I2C_FIFO_CFG_TXBS_TXBS0 0x00000000
-+/** 2 words */
-+#define I2C_FIFO_CFG_TXBS_TXBS1 0x00000010
-+/** 4 words */
-+#define I2C_FIFO_CFG_TXBS_TXBS2 0x00000020
-+/** 8 words */
-+#define I2C_FIFO_CFG_TXBS_TXBS3 0x00000030
-+/** DMA controller does not support a burst size of 2 words. The reset value is the half of the FIFO size. The maximum selectable burst size is smaller than the FIFO size. */
-+#define I2C_FIFO_CFG_RXBS_MASK 0x00000003
-+/** field offset */
-+#define I2C_FIFO_CFG_RXBS_OFFSET 0
-+/** 1 word */
-+#define I2C_FIFO_CFG_RXBS_RXBS0 0x00000000
-+/** 2 words */
-+#define I2C_FIFO_CFG_RXBS_RXBS1 0x00000001
-+/** 4 words */
-+#define I2C_FIFO_CFG_RXBS_RXBS2 0x00000002
-+/** 8 words */
-+#define I2C_FIFO_CFG_RXBS_RXBS3 0x00000003
-+
-+/* Fields of "I2C Maximum Received Packet Size Register" */
-+/** MRPS */
-+#define I2C_MRPS_CTRL_MRPS_MASK 0x00003FFF
-+/** field offset */
-+#define I2C_MRPS_CTRL_MRPS_OFFSET 0
-+
-+/* Fields of "I2C Received Packet Size Status Register" */
-+/** RPS */
-+#define I2C_RPS_STAT_RPS_MASK 0x00003FFF
-+/** field offset */
-+#define I2C_RPS_STAT_RPS_OFFSET 0
-+
-+/* Fields of "I2C Transmit Packet Size Register" */
-+/** TPS */
-+#define I2C_TPS_CTRL_TPS_MASK 0x00003FFF
-+/** field offset */
-+#define I2C_TPS_CTRL_TPS_OFFSET 0
-+
-+/* Fields of "I2C Filled FIFO Stages Status Register" */
-+/** FFS */
-+#define I2C_FFS_STAT_FFS_MASK 0x0000000F
-+/** field offset */
-+#define I2C_FFS_STAT_FFS_OFFSET 0
-+
-+/* Fields of "I2C Timing Configuration Register" */
-+/** SDA Delay Stages for Start/Stop bit in High Speed Mode
-+    The actual delay is calculated as the value of this field + 3 */
-+#define I2C_TIM_CFG_HS_SDA_DEL_MASK 0x00070000
-+/** field offset */
-+#define I2C_TIM_CFG_HS_SDA_DEL_OFFSET 16
-+/** Enable Fast Mode SCL Low period timing */
-+#define I2C_TIM_CFG_FS_SCL_LOW 0x00008000
-+/* Disable
-+#define I2C_TIM_CFG_FS_SCL_LOW_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_TIM_CFG_FS_SCL_LOW_EN 0x00008000
-+/** SCL Delay Stages for Hold Time Start (Restart) Bit.
-+    The actual delay is calculated as the value of this field + 2 */
-+#define I2C_TIM_CFG_SCL_DEL_HD_STA_MASK 0x00000E00
-+/** field offset */
-+#define I2C_TIM_CFG_SCL_DEL_HD_STA_OFFSET 9
-+/** SDA Delay Stages for Start/Stop bit in High Speed Mode
-+    The actual delay is calculated as the value of this field + 3 */
-+#define I2C_TIM_CFG_HS_SDA_DEL_HD_DAT_MASK 0x000001C0
-+/** field offset */
-+#define I2C_TIM_CFG_HS_SDA_DEL_HD_DAT_OFFSET 6
-+/** SDA Delay Stages for Start/Stop bit in High Speed Mode
-+    The actual delay is calculated as the value of this field + 3 */
-+#define I2C_TIM_CFG_SDA_DEL_HD_DAT_MASK 0x0000003F
-+/** field offset */
-+#define I2C_TIM_CFG_SDA_DEL_HD_DAT_OFFSET 0
-+
-+/* Fields of "I2C Error Interrupt Request Source Mask Register" */
-+/** Enables the corresponding error interrupt. */
-+#define I2C_ERR_IRQSM_TXF_OFL 0x00000008
-+/* Disable
-+#define I2C_ERR_IRQSM_TXF_OFL_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ERR_IRQSM_TXF_OFL_EN 0x00000008
-+/** Enables the corresponding error interrupt. */
-+#define I2C_ERR_IRQSM_TXF_UFL 0x00000004
-+/* Disable
-+#define I2C_ERR_IRQSM_TXF_UFL_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ERR_IRQSM_TXF_UFL_EN 0x00000004
-+/** Enables the corresponding error interrupt. */
-+#define I2C_ERR_IRQSM_RXF_OFL 0x00000002
-+/* Disable
-+#define I2C_ERR_IRQSM_RXF_OFL_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ERR_IRQSM_RXF_OFL_EN 0x00000002
-+/** Enables the corresponding error interrupt. */
-+#define I2C_ERR_IRQSM_RXF_UFL 0x00000001
-+/* Disable
-+#define I2C_ERR_IRQSM_RXF_UFL_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_ERR_IRQSM_RXF_UFL_EN 0x00000001
-+
-+/* Fields of "I2C Error Interrupt Request Source Status Register" */
-+/** TXF_OFL */
-+#define I2C_ERR_IRQSS_TXF_OFL 0x00000008
-+/* Nothing
-+#define I2C_ERR_IRQSS_TXF_OFL_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_ERR_IRQSS_TXF_OFL_INTOCC 0x00000008
-+/** TXF_UFL */
-+#define I2C_ERR_IRQSS_TXF_UFL 0x00000004
-+/* Nothing
-+#define I2C_ERR_IRQSS_TXF_UFL_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_ERR_IRQSS_TXF_UFL_INTOCC 0x00000004
-+/** RXF_OFL */
-+#define I2C_ERR_IRQSS_RXF_OFL 0x00000002
-+/* Nothing
-+#define I2C_ERR_IRQSS_RXF_OFL_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_ERR_IRQSS_RXF_OFL_INTOCC 0x00000002
-+/** RXF_UFL */
-+#define I2C_ERR_IRQSS_RXF_UFL 0x00000001
-+/* Nothing
-+#define I2C_ERR_IRQSS_RXF_UFL_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_ERR_IRQSS_RXF_UFL_INTOCC 0x00000001
-+
-+/* Fields of "I2C Error Interrupt Request Source Clear Register" */
-+/** TXF_OFL */
-+#define I2C_ERR_IRQSC_TXF_OFL 0x00000008
-+/* No-Operation
-+#define I2C_ERR_IRQSC_TXF_OFL_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ERR_IRQSC_TXF_OFL_CLR 0x00000008
-+/** TXF_UFL */
-+#define I2C_ERR_IRQSC_TXF_UFL 0x00000004
-+/* No-Operation
-+#define I2C_ERR_IRQSC_TXF_UFL_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ERR_IRQSC_TXF_UFL_CLR 0x00000004
-+/** RXF_OFL */
-+#define I2C_ERR_IRQSC_RXF_OFL 0x00000002
-+/* No-Operation
-+#define I2C_ERR_IRQSC_RXF_OFL_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ERR_IRQSC_RXF_OFL_CLR 0x00000002
-+/** RXF_UFL */
-+#define I2C_ERR_IRQSC_RXF_UFL 0x00000001
-+/* No-Operation
-+#define I2C_ERR_IRQSC_RXF_UFL_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ERR_IRQSC_RXF_UFL_CLR 0x00000001
-+
-+/* Fields of "I2C Protocol Interrupt Request Source Mask Register" */
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_RX 0x00000040
-+/* Disable
-+#define I2C_P_IRQSM_RX_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_RX_EN 0x00000040
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_TX_END 0x00000020
-+/* Disable
-+#define I2C_P_IRQSM_TX_END_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_TX_END_EN 0x00000020
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_NACK 0x00000010
-+/* Disable
-+#define I2C_P_IRQSM_NACK_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_NACK_EN 0x00000010
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_AL 0x00000008
-+/* Disable
-+#define I2C_P_IRQSM_AL_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_AL_EN 0x00000008
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_MC 0x00000004
-+/* Disable
-+#define I2C_P_IRQSM_MC_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_MC_EN 0x00000004
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_GC 0x00000002
-+/* Disable
-+#define I2C_P_IRQSM_GC_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_GC_EN 0x00000002
-+/** Enables the corresponding interrupt. */
-+#define I2C_P_IRQSM_AM 0x00000001
-+/* Disable
-+#define I2C_P_IRQSM_AM_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_P_IRQSM_AM_EN 0x00000001
-+
-+/* Fields of "I2C Protocol Interrupt Request Source Status Register" */
-+/** RX */
-+#define I2C_P_IRQSS_RX 0x00000040
-+/* Nothing
-+#define I2C_P_IRQSS_RX_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_RX_INTOCC 0x00000040
-+/** TX_END */
-+#define I2C_P_IRQSS_TX_END 0x00000020
-+/* Nothing
-+#define I2C_P_IRQSS_TX_END_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_TX_END_INTOCC 0x00000020
-+/** NACK */
-+#define I2C_P_IRQSS_NACK 0x00000010
-+/* Nothing
-+#define I2C_P_IRQSS_NACK_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_NACK_INTOCC 0x00000010
-+/** AL */
-+#define I2C_P_IRQSS_AL 0x00000008
-+/* Nothing
-+#define I2C_P_IRQSS_AL_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_AL_INTOCC 0x00000008
-+/** MC */
-+#define I2C_P_IRQSS_MC 0x00000004
-+/* Nothing
-+#define I2C_P_IRQSS_MC_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_MC_INTOCC 0x00000004
-+/** GC */
-+#define I2C_P_IRQSS_GC 0x00000002
-+/* Nothing
-+#define I2C_P_IRQSS_GC_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_GC_INTOCC 0x00000002
-+/** AM */
-+#define I2C_P_IRQSS_AM 0x00000001
-+/* Nothing
-+#define I2C_P_IRQSS_AM_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_P_IRQSS_AM_INTOCC 0x00000001
-+
-+/* Fields of "I2C Protocol Interrupt Request Source Clear Register" */
-+/** RX */
-+#define I2C_P_IRQSC_RX 0x00000040
-+/* No-Operation
-+#define I2C_P_IRQSC_RX_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_RX_CLR 0x00000040
-+/** TX_END */
-+#define I2C_P_IRQSC_TX_END 0x00000020
-+/* No-Operation
-+#define I2C_P_IRQSC_TX_END_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_TX_END_CLR 0x00000020
-+/** NACK */
-+#define I2C_P_IRQSC_NACK 0x00000010
-+/* No-Operation
-+#define I2C_P_IRQSC_NACK_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_NACK_CLR 0x00000010
-+/** AL */
-+#define I2C_P_IRQSC_AL 0x00000008
-+/* No-Operation
-+#define I2C_P_IRQSC_AL_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_AL_CLR 0x00000008
-+/** MC */
-+#define I2C_P_IRQSC_MC 0x00000004
-+/* No-Operation
-+#define I2C_P_IRQSC_MC_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_MC_CLR 0x00000004
-+/** GC */
-+#define I2C_P_IRQSC_GC 0x00000002
-+/* No-Operation
-+#define I2C_P_IRQSC_GC_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_GC_CLR 0x00000002
-+/** AM */
-+#define I2C_P_IRQSC_AM 0x00000001
-+/* No-Operation
-+#define I2C_P_IRQSC_AM_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_P_IRQSC_AM_CLR 0x00000001
-+
-+/* Fields of "I2C Raw Interrupt Status Register" */
-+/** This is the combined interrupt bit for indication of an protocol event in the I2C kernel. */
-+#define I2C_RIS_I2C_P_INT 0x00000020
-+/* Nothing
-+#define I2C_RIS_I2C_P_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_I2C_P_INT_INTOCC 0x00000020
-+/** This is the combined interrupt bit for indication of FIFO errors due to overflow and underrun. */
-+#define I2C_RIS_I2C_ERR_INT 0x00000010
-+/* Nothing
-+#define I2C_RIS_I2C_ERR_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_I2C_ERR_INT_INTOCC 0x00000010
-+/** BREQ_INT */
-+#define I2C_RIS_BREQ_INT 0x00000008
-+/* Nothing
-+#define I2C_RIS_BREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_BREQ_INT_INTOCC 0x00000008
-+/** LBREQ_INT */
-+#define I2C_RIS_LBREQ_INT 0x00000004
-+/* Nothing
-+#define I2C_RIS_LBREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_LBREQ_INT_INTOCC 0x00000004
-+/** SREQ_INT */
-+#define I2C_RIS_SREQ_INT 0x00000002
-+/* Nothing
-+#define I2C_RIS_SREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_SREQ_INT_INTOCC 0x00000002
-+/** LSREQ_INT */
-+#define I2C_RIS_LSREQ_INT 0x00000001
-+/* Nothing
-+#define I2C_RIS_LSREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_RIS_LSREQ_INT_INTOCC 0x00000001
-+
-+/* Fields of "I2C Interrupt Mask Control Register" */
-+/** This is the combined interrupt bit for indication of an protocol event in the I2C kernel. */
-+#define I2C_IMSC_I2C_P_INT 0x00000020
-+/* Disable
-+#define I2C_IMSC_I2C_P_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_I2C_P_INT_EN 0x00000020
-+/** This is the combined interrupt bit for indication of FIFO errors due to overflow and underrun. */
-+#define I2C_IMSC_I2C_ERR_INT 0x00000010
-+/* Disable
-+#define I2C_IMSC_I2C_ERR_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_I2C_ERR_INT_EN 0x00000010
-+/** BREQ_INT */
-+#define I2C_IMSC_BREQ_INT 0x00000008
-+/* Disable
-+#define I2C_IMSC_BREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_BREQ_INT_EN 0x00000008
-+/** LBREQ_INT */
-+#define I2C_IMSC_LBREQ_INT 0x00000004
-+/* Disable
-+#define I2C_IMSC_LBREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_LBREQ_INT_EN 0x00000004
-+/** SREQ_INT */
-+#define I2C_IMSC_SREQ_INT 0x00000002
-+/* Disable
-+#define I2C_IMSC_SREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_SREQ_INT_EN 0x00000002
-+/** LSREQ_INT */
-+#define I2C_IMSC_LSREQ_INT 0x00000001
-+/* Disable
-+#define I2C_IMSC_LSREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_IMSC_LSREQ_INT_EN 0x00000001
-+
-+/* Fields of "I2C Masked Interrupt Status Register" */
-+/** This is the combined interrupt bit for indication of an protocol event in the I2C kernel. */
-+#define I2C_MIS_I2C_P_INT 0x00000020
-+/* Nothing
-+#define I2C_MIS_I2C_P_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_I2C_P_INT_INTOCC 0x00000020
-+/** This is the combined interrupt bit for indication of FIFO errors due to overflow and underrun. */
-+#define I2C_MIS_I2C_ERR_INT 0x00000010
-+/* Nothing
-+#define I2C_MIS_I2C_ERR_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_I2C_ERR_INT_INTOCC 0x00000010
-+/** BREQ_INT */
-+#define I2C_MIS_BREQ_INT 0x00000008
-+/* Nothing
-+#define I2C_MIS_BREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_BREQ_INT_INTOCC 0x00000008
-+/** LBREQ_INT */
-+#define I2C_MIS_LBREQ_INT 0x00000004
-+/* Nothing
-+#define I2C_MIS_LBREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_LBREQ_INT_INTOCC 0x00000004
-+/** SREQ_INT */
-+#define I2C_MIS_SREQ_INT 0x00000002
-+/* Nothing
-+#define I2C_MIS_SREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_SREQ_INT_INTOCC 0x00000002
-+/** LSREQ_INT */
-+#define I2C_MIS_LSREQ_INT 0x00000001
-+/* Nothing
-+#define I2C_MIS_LSREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define I2C_MIS_LSREQ_INT_INTOCC 0x00000001
-+
-+/* Fields of "I2C Interrupt Clear Register" */
-+/** This is the combined interrupt bit for indication of an protocol event in the I2C kernel. */
-+#define I2C_ICR_I2C_P_INT 0x00000020
-+/* No-Operation
-+#define I2C_ICR_I2C_P_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_I2C_P_INT_CLR 0x00000020
-+/** This is the combined interrupt bit for indication of FIFO errors due to overflow and underrun. */
-+#define I2C_ICR_I2C_ERR_INT 0x00000010
-+/* No-Operation
-+#define I2C_ICR_I2C_ERR_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_I2C_ERR_INT_CLR 0x00000010
-+/** BREQ_INT */
-+#define I2C_ICR_BREQ_INT 0x00000008
-+/* No-Operation
-+#define I2C_ICR_BREQ_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_BREQ_INT_CLR 0x00000008
-+/** LBREQ_INT */
-+#define I2C_ICR_LBREQ_INT 0x00000004
-+/* No-Operation
-+#define I2C_ICR_LBREQ_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_LBREQ_INT_CLR 0x00000004
-+/** SREQ_INT */
-+#define I2C_ICR_SREQ_INT 0x00000002
-+/* No-Operation
-+#define I2C_ICR_SREQ_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_SREQ_INT_CLR 0x00000002
-+/** LSREQ_INT */
-+#define I2C_ICR_LSREQ_INT 0x00000001
-+/* No-Operation
-+#define I2C_ICR_LSREQ_INT_NOP 0x00000000 */
-+/** Clear */
-+#define I2C_ICR_LSREQ_INT_CLR 0x00000001
-+
-+/* Fields of "I2C Interrupt Set Register" */
-+/** This is the combined interrupt bit for indication of an protocol event in the I2C kernel. */
-+#define I2C_ISR_I2C_P_INT 0x00000020
-+/* No-Operation
-+#define I2C_ISR_I2C_P_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_I2C_P_INT_SET 0x00000020
-+/** This is the combined interrupt bit for indication of FIFO errors due to overflow and underrun. */
-+#define I2C_ISR_I2C_ERR_INT 0x00000010
-+/* No-Operation
-+#define I2C_ISR_I2C_ERR_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_I2C_ERR_INT_SET 0x00000010
-+/** BREQ_INT */
-+#define I2C_ISR_BREQ_INT 0x00000008
-+/* No-Operation
-+#define I2C_ISR_BREQ_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_BREQ_INT_SET 0x00000008
-+/** LBREQ_INT */
-+#define I2C_ISR_LBREQ_INT 0x00000004
-+/* No-Operation
-+#define I2C_ISR_LBREQ_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_LBREQ_INT_SET 0x00000004
-+/** SREQ_INT */
-+#define I2C_ISR_SREQ_INT 0x00000002
-+/* No-Operation
-+#define I2C_ISR_SREQ_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_SREQ_INT_SET 0x00000002
-+/** LSREQ_INT */
-+#define I2C_ISR_LSREQ_INT 0x00000001
-+/* No-Operation
-+#define I2C_ISR_LSREQ_INT_NOP 0x00000000 */
-+/** Set */
-+#define I2C_ISR_LSREQ_INT_SET 0x00000001
-+
-+/* Fields of "I2C DMA Enable Register" */
-+/** BREQ_INT */
-+#define I2C_DMAE_BREQ_INT 0x00000008
-+/* Disable
-+#define I2C_DMAE_BREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_DMAE_BREQ_INT_EN 0x00000008
-+/** LBREQ_INT */
-+#define I2C_DMAE_LBREQ_INT 0x00000004
-+/* Disable
-+#define I2C_DMAE_LBREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_DMAE_LBREQ_INT_EN 0x00000004
-+/** SREQ_INT */
-+#define I2C_DMAE_SREQ_INT 0x00000002
-+/* Disable
-+#define I2C_DMAE_SREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_DMAE_SREQ_INT_EN 0x00000002
-+/** LSREQ_INT */
-+#define I2C_DMAE_LSREQ_INT 0x00000001
-+/* Disable
-+#define I2C_DMAE_LSREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define I2C_DMAE_LSREQ_INT_EN 0x00000001
-+
-+/* Fields of "I2C Transmit Data Register" */
-+/** Characters to be transmitted */
-+#define I2C_TXD_TXD_MASK 0xFFFFFFFF
-+/** field offset */
-+#define I2C_TXD_TXD_OFFSET 0
-+
-+/* Fields of "I2C Receive Data Register" */
-+/** Received characters */
-+#define I2C_RXD_RXD_MASK 0xFFFFFFFF
-+/** field offset */
-+#define I2C_RXD_RXD_OFFSET 0
-+
-+/*! @} */ /* I2C_REGISTER */
-+
-+#endif /* _i2c_reg_h */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-lantiq/falcon/icu0_reg.h
-@@ -0,0 +1,4324 @@
-+/******************************************************************************
-+
-+                               Copyright (c) 2010
-+                            Lantiq Deutschland GmbH
-+
-+  For licensing information, see the file 'LICENSE' in the root folder of
-+  this software module.
-+
-+******************************************************************************/
-+
-+#ifndef _icu0_reg_h
-+#define _icu0_reg_h
-+
-+/** \addtogroup ICU0_REGISTER
-+   @{
-+*/
-+/* access macros */
-+#define icu0_r32(reg) reg_r32(&icu0->reg)
-+#define icu0_w32(val, reg) reg_w32(val, &icu0->reg)
-+#define icu0_w32_mask(clear, set, reg) reg_w32_mask(clear, set, &icu0->reg)
-+#define icu0_r32_table(reg, idx) reg_r32_table(icu0->reg, idx)
-+#define icu0_w32_table(val, reg, idx) reg_w32_table(val, icu0->reg, idx)
-+#define icu0_w32_table_mask(clear, set, reg, idx) reg_w32_table_mask(clear, set, icu0->reg, idx)
-+#define icu0_adr_table(reg, idx) adr_table(icu0->reg, idx)
-+
-+
-+/** ICU0 register structure */
-+struct gpon_reg_icu0
-+{
-+   /** IM0 Interrupt Status Register
-+       A read action to this register delivers the unmasked captured status of the interrupt request lines. Each bit can be cleared by a write operation. */
-+   unsigned int im0_isr; /* 0x00000000 */
-+   /** Reserved */
-+   unsigned int res_0; /* 0x00000004 */
-+   /** IM0 Interrupt Enable Register
-+       This register contains the enable (or mask) bits for the interrupts. Disabled interrupts are not visible in the IM0_IOSR register and are not signalled via the interrupt line towards the controller. */
-+   unsigned int im0_ier; /* 0x00000008 */
-+   /** Reserved */
-+   unsigned int res_1; /* 0x0000000C */
-+   /** IM0 Interrupt Output Status Register
-+       This register shows the currently active interrupt requests masked with the corresponding enable bits of the IM0_IER register. */
-+   unsigned int im0_iosr; /* 0x00000010 */
-+   /** Reserved */
-+   unsigned int res_2; /* 0x00000014 */
-+   /** IM0 Interrupt Request Set Register
-+       A write operation directly effects the interrupts. This can be used to trigger events under software control for testing purposes. A read operation returns the unmasked interrupt events. */
-+   unsigned int im0_irsr; /* 0x00000018 */
-+   /** Reserved */
-+   unsigned int res_3; /* 0x0000001C */
-+   /** IM0 Interrupt Mode Register
-+       This register shows the type of interrupt for each bit. */
-+   unsigned int im0_imr; /* 0x00000020 */
-+   /** Reserved */
-+   unsigned int res_4; /* 0x00000024 */
-+   /** IM1 Interrupt Status Register
-+       A read action to this register delivers the unmasked captured status of the interrupt request lines. Each bit can be cleared by a write operation. */
-+   unsigned int im1_isr; /* 0x00000028 */
-+   /** Reserved */
-+   unsigned int res_5; /* 0x0000002C */
-+   /** IM1 Interrupt Enable Register
-+       This register contains the enable (or mask) bits for the interrupts. Disabled interrupts are not visible in the IM1_IOSR register and are not signalled via the interrupt line towards the controller. */
-+   unsigned int im1_ier; /* 0x00000030 */
-+   /** Reserved */
-+   unsigned int res_6; /* 0x00000034 */
-+   /** IM1 Interrupt Output Status Register
-+       This register shows the currently active interrupt requests masked with the corresponding enable bits of the IM1_IER register. */
-+   unsigned int im1_iosr; /* 0x00000038 */
-+   /** Reserved */
-+   unsigned int res_7; /* 0x0000003C */
-+   /** IM1 Interrupt Request Set Register
-+       A write operation directly effects the interrupts. This can be used to trigger events under software control for testing purposes. A read operation returns the unmasked interrupt events. */
-+   unsigned int im1_irsr; /* 0x00000040 */
-+   /** Reserved */
-+   unsigned int res_8; /* 0x00000044 */
-+   /** IM1 Interrupt Mode Register
-+       This register shows the type of interrupt for each bit. */
-+   unsigned int im1_imr; /* 0x00000048 */
-+   /** Reserved */
-+   unsigned int res_9; /* 0x0000004C */
-+   /** IM2 Interrupt Status Register
-+       A read action to this register delivers the unmasked captured status of the interrupt request lines. Each bit can be cleared by a write operation. */
-+   unsigned int im2_isr; /* 0x00000050 */
-+   /** Reserved */
-+   unsigned int res_10; /* 0x00000054 */
-+   /** IM2 Interrupt Enable Register
-+       This register contains the enable (or mask) bits for the interrupts. Disabled interrupts are not visible in the IM2_IOSR register and are not signalled via the interrupt line towards the controller. */
-+   unsigned int im2_ier; /* 0x00000058 */
-+   /** Reserved */
-+   unsigned int res_11; /* 0x0000005C */
-+   /** IM2 Interrupt Output Status Register
-+       This register shows the currently active interrupt requests masked with the corresponding enable bits of the IM2_IER register. */
-+   unsigned int im2_iosr; /* 0x00000060 */
-+   /** Reserved */
-+   unsigned int res_12; /* 0x00000064 */
-+   /** IM2 Interrupt Request Set Register
-+       A write operation directly effects the interrupts. This can be used to trigger events under software control for testing purposes. A read operation returns the unmasked interrupt events. */
-+   unsigned int im2_irsr; /* 0x00000068 */
-+   /** Reserved */
-+   unsigned int res_13; /* 0x0000006C */
-+   /** IM2 Interrupt Mode Register
-+       This register shows the type of interrupt for each bit. */
-+   unsigned int im2_imr; /* 0x00000070 */
-+   /** Reserved */
-+   unsigned int res_14; /* 0x00000074 */
-+   /** IM3 Interrupt Status Register
-+       A read action to this register delivers the unmasked captured status of the interrupt request lines. Each bit can be cleared by a write operation. */
-+   unsigned int im3_isr; /* 0x00000078 */
-+   /** Reserved */
-+   unsigned int res_15; /* 0x0000007C */
-+   /** IM3 Interrupt Enable Register
-+       This register contains the enable (or mask) bits for the interrupts. Disabled interrupts are not visible in the IM3_IOSR register and are not signalled via the interrupt line towards the controller. */
-+   unsigned int im3_ier; /* 0x00000080 */
-+   /** Reserved */
-+   unsigned int res_16; /* 0x00000084 */
-+   /** IM3 Interrupt Output Status Register
-+       This register shows the currently active interrupt requests masked with the corresponding enable bits of the IM3_IER register. */
-+   unsigned int im3_iosr; /* 0x00000088 */
-+   /** Reserved */
-+   unsigned int res_17; /* 0x0000008C */
-+   /** IM3 Interrupt Request Set Register
-+       A write operation directly effects the interrupts. This can be used to trigger events under software control for testing purposes. A read operation returns the unmasked interrupt events. */
-+   unsigned int im3_irsr; /* 0x00000090 */
-+   /** Reserved */
-+   unsigned int res_18; /* 0x00000094 */
-+   /** IM3 Interrupt Mode Register
-+       This register shows the type of interrupt for each bit. */
-+   unsigned int im3_imr; /* 0x00000098 */
-+   /** Reserved */
-+   unsigned int res_19; /* 0x0000009C */
-+   /** IM4 Interrupt Status Register
-+       A read action to this register delivers the unmasked captured status of the interrupt request lines. Each bit can be cleared by a write operation. */
-+   unsigned int im4_isr; /* 0x000000A0 */
-+   /** Reserved */
-+   unsigned int res_20; /* 0x000000A4 */
-+   /** IM4 Interrupt Enable Register
-+       This register contains the enable (or mask) bits for the interrupts. Disabled interrupts are not visible in the IM4_IOSR register and are not signalled via the interrupt line towards the controller. */
-+   unsigned int im4_ier; /* 0x000000A8 */
-+   /** Reserved */
-+   unsigned int res_21; /* 0x000000AC */
-+   /** IM4 Interrupt Output Status Register
-+       This register shows the currently active interrupt requests masked with the corresponding enable bits of the IM4_IER register. */
-+   unsigned int im4_iosr; /* 0x000000B0 */
-+   /** Reserved */
-+   unsigned int res_22; /* 0x000000B4 */
-+   /** IM4 Interrupt Request Set Register
-+       A write operation directly effects the interrupts. This can be used to trigger events under software control for testing purposes. A read operation returns the unmasked interrupt events. */
-+   unsigned int im4_irsr; /* 0x000000B8 */
-+   /** Reserved */
-+   unsigned int res_23; /* 0x000000BC */
-+   /** IM4 Interrupt Mode Register
-+       This register shows the type of interrupt for each bit. */
-+   unsigned int im4_imr; /* 0x000000C0 */
-+   /** Reserved */
-+   unsigned int res_24; /* 0x000000C4 */
-+   /** ICU Interrupt Vector Register (5 bit variant)
-+       Shows the leftmost pending interrupt request. If e.g. bit 14 of the IOSR register is set, 15 is reported, because the 15th interrupt request is active. */
-+   unsigned int icu_ivec; /* 0x000000C8 */
-+   /** Reserved */
-+   unsigned int res_25; /* 0x000000CC */
-+   /** ICU Interrupt Vector Register (6 bit variant)
-+       Shows the leftmost pending interrupt request. If e.g. bit 14 of the IOSR register is set, 15 is reported, because the 15th interrupt request is active. */
-+   unsigned int icu_ivec_6; /* 0x000000D0 */
-+   /** Reserved */
-+   unsigned int res_26[3]; /* 0x000000D4 */
-+};
-+
-+
-+/* Fields of "IM0 Interrupt Status Register" */
-+/** PCM Transmit Crash Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_PCM_HW2_CRASH 0x80000000
-+/* Nothing
-+#define ICU0_IM0_ISR_PCM_HW2_CRASH_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_PCM_HW2_CRASH_INTACK 0x80000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_PCM_HW2_CRASH_INTOCC 0x80000000
-+/** PCM Transmit Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_PCM_TX 0x40000000
-+/* Nothing
-+#define ICU0_IM0_ISR_PCM_TX_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_PCM_TX_INTACK 0x40000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_PCM_TX_INTOCC 0x40000000
-+/** PCM Receive Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_PCM_RX 0x20000000
-+/* Nothing
-+#define ICU0_IM0_ISR_PCM_RX_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_PCM_RX_INTACK 0x20000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_PCM_RX_INTOCC 0x20000000
-+/** Secure Hash Algorithm Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_SHA1_HASH 0x10000000
-+/* Nothing
-+#define ICU0_IM0_ISR_SHA1_HASH_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_SHA1_HASH_INTACK 0x10000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_SHA1_HASH_INTOCC 0x10000000
-+/** Advanced Encryption Standard Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_AES_AES 0x08000000
-+/* Nothing
-+#define ICU0_IM0_ISR_AES_AES_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_AES_AES_INTACK 0x08000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_AES_AES_INTOCC 0x08000000
-+/** SSC Frame Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_SSC0_F 0x00020000
-+/* Nothing
-+#define ICU0_IM0_ISR_SSC0_F_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_SSC0_F_INTACK 0x00020000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_SSC0_F_INTOCC 0x00020000
-+/** SSC Error Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_SSC0_E 0x00010000
-+/* Nothing
-+#define ICU0_IM0_ISR_SSC0_E_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_SSC0_E_INTACK 0x00010000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_SSC0_E_INTOCC 0x00010000
-+/** SSC Receive Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_SSC0_R 0x00008000
-+/* Nothing
-+#define ICU0_IM0_ISR_SSC0_R_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_SSC0_R_INTACK 0x00008000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_SSC0_R_INTOCC 0x00008000
-+/** SSC Transmit Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM0_ISR_SSC0_T 0x00004000
-+/* Nothing
-+#define ICU0_IM0_ISR_SSC0_T_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_SSC0_T_INTACK 0x00004000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_SSC0_T_INTOCC 0x00004000
-+/** I2C Peripheral Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_I2C_P_INT 0x00002000
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_I2C_P_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_I2C_P_INT_INTACK 0x00002000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_I2C_P_INT_INTOCC 0x00002000
-+/** I2C Error Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_I2C_ERR_INT 0x00001000
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_I2C_ERR_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_I2C_ERR_INT_INTACK 0x00001000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_I2C_ERR_INT_INTOCC 0x00001000
-+/** I2C Burst Data Transfer Request
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_BREQ_INT 0x00000800
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_BREQ_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_BREQ_INT_INTACK 0x00000800
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_BREQ_INT_INTOCC 0x00000800
-+/** I2C Last Burst Data Transfer Request
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_LBREQ_INT 0x00000400
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_LBREQ_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_LBREQ_INT_INTACK 0x00000400
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_LBREQ_INT_INTOCC 0x00000400
-+/** I2C Single Data Transfer Request
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_SREQ_INT 0x00000200
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_SREQ_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_SREQ_INT_INTACK 0x00000200
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_SREQ_INT_INTOCC 0x00000200
-+/** I2C Last Single Data Transfer Request
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_I2C_LSREQ_INT 0x00000100
-+/* Nothing
-+#define ICU0_IM0_ISR_I2C_LSREQ_INT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_I2C_LSREQ_INT_INTACK 0x00000100
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_I2C_LSREQ_INT_INTOCC 0x00000100
-+/** HOST IF Mailbox1 Transmit Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB1_TIR 0x00000010
-+/* Nothing
-+#define ICU0_IM0_ISR_HOST_MB1_TIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB1_TIR_INTACK 0x00000010
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_HOST_MB1_TIR_INTOCC 0x00000010
-+/** HOST IF Mailbox1 Receive Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB1_RIR 0x00000008
-+/* Nothing
-+#define ICU0_IM0_ISR_HOST_MB1_RIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB1_RIR_INTACK 0x00000008
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_HOST_MB1_RIR_INTOCC 0x00000008
-+/** HOST IF Mailbox0 Transmit Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB0_TIR 0x00000004
-+/* Nothing
-+#define ICU0_IM0_ISR_HOST_MB0_TIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB0_TIR_INTACK 0x00000004
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_HOST_MB0_TIR_INTOCC 0x00000004
-+/** HOST IF Mailbox0 Receive Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB0_RIR 0x00000002
-+/* Nothing
-+#define ICU0_IM0_ISR_HOST_MB0_RIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_HOST_MB0_RIR_INTACK 0x00000002
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_HOST_MB0_RIR_INTOCC 0x00000002
-+/** HOST IF Event Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM0_ISR_HOST_EIR 0x00000001
-+/* Nothing
-+#define ICU0_IM0_ISR_HOST_EIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM0_ISR_HOST_EIR_INTACK 0x00000001
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_ISR_HOST_EIR_INTOCC 0x00000001
-+
-+/* Fields of "IM0 Interrupt Enable Register" */
-+/** PCM Transmit Crash Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_PCM_HW2_CRASH 0x80000000
-+/* Disable
-+#define ICU0_IM0_IER_PCM_HW2_CRASH_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_PCM_HW2_CRASH_EN 0x80000000
-+/** PCM Transmit Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_PCM_TX 0x40000000
-+/* Disable
-+#define ICU0_IM0_IER_PCM_TX_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_PCM_TX_EN 0x40000000
-+/** PCM Receive Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_PCM_RX 0x20000000
-+/* Disable
-+#define ICU0_IM0_IER_PCM_RX_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_PCM_RX_EN 0x20000000
-+/** Secure Hash Algorithm Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_SHA1_HASH 0x10000000
-+/* Disable
-+#define ICU0_IM0_IER_SHA1_HASH_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_SHA1_HASH_EN 0x10000000
-+/** Advanced Encryption Standard Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_AES_AES 0x08000000
-+/* Disable
-+#define ICU0_IM0_IER_AES_AES_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_AES_AES_EN 0x08000000
-+/** SSC Frame Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_SSC0_F 0x00020000
-+/* Disable
-+#define ICU0_IM0_IER_SSC0_F_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_SSC0_F_EN 0x00020000
-+/** SSC Error Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_SSC0_E 0x00010000
-+/* Disable
-+#define ICU0_IM0_IER_SSC0_E_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_SSC0_E_EN 0x00010000
-+/** SSC Receive Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_SSC0_R 0x00008000
-+/* Disable
-+#define ICU0_IM0_IER_SSC0_R_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_SSC0_R_EN 0x00008000
-+/** SSC Transmit Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_SSC0_T 0x00004000
-+/* Disable
-+#define ICU0_IM0_IER_SSC0_T_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_SSC0_T_EN 0x00004000
-+/** I2C Peripheral Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_I2C_P_INT 0x00002000
-+/* Disable
-+#define ICU0_IM0_IER_I2C_I2C_P_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_I2C_P_INT_EN 0x00002000
-+/** I2C Error Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_I2C_ERR_INT 0x00001000
-+/* Disable
-+#define ICU0_IM0_IER_I2C_I2C_ERR_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_I2C_ERR_INT_EN 0x00001000
-+/** I2C Burst Data Transfer Request
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_BREQ_INT 0x00000800
-+/* Disable
-+#define ICU0_IM0_IER_I2C_BREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_BREQ_INT_EN 0x00000800
-+/** I2C Last Burst Data Transfer Request
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_LBREQ_INT 0x00000400
-+/* Disable
-+#define ICU0_IM0_IER_I2C_LBREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_LBREQ_INT_EN 0x00000400
-+/** I2C Single Data Transfer Request
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_SREQ_INT 0x00000200
-+/* Disable
-+#define ICU0_IM0_IER_I2C_SREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_SREQ_INT_EN 0x00000200
-+/** I2C Last Single Data Transfer Request
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_I2C_LSREQ_INT 0x00000100
-+/* Disable
-+#define ICU0_IM0_IER_I2C_LSREQ_INT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_I2C_LSREQ_INT_EN 0x00000100
-+/** HOST IF Mailbox1 Transmit Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_HOST_MB1_TIR 0x00000010
-+/* Disable
-+#define ICU0_IM0_IER_HOST_MB1_TIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_HOST_MB1_TIR_EN 0x00000010
-+/** HOST IF Mailbox1 Receive Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_HOST_MB1_RIR 0x00000008
-+/* Disable
-+#define ICU0_IM0_IER_HOST_MB1_RIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_HOST_MB1_RIR_EN 0x00000008
-+/** HOST IF Mailbox0 Transmit Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_HOST_MB0_TIR 0x00000004
-+/* Disable
-+#define ICU0_IM0_IER_HOST_MB0_TIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_HOST_MB0_TIR_EN 0x00000004
-+/** HOST IF Mailbox0 Receive Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_HOST_MB0_RIR 0x00000002
-+/* Disable
-+#define ICU0_IM0_IER_HOST_MB0_RIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_HOST_MB0_RIR_EN 0x00000002
-+/** HOST IF Event Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IER_HOST_EIR 0x00000001
-+/* Disable
-+#define ICU0_IM0_IER_HOST_EIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM0_IER_HOST_EIR_EN 0x00000001
-+
-+/* Fields of "IM0 Interrupt Output Status Register" */
-+/** PCM Transmit Crash Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_PCM_HW2_CRASH 0x80000000
-+/* Nothing
-+#define ICU0_IM0_IOSR_PCM_HW2_CRASH_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_PCM_HW2_CRASH_INTOCC 0x80000000
-+/** PCM Transmit Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_PCM_TX 0x40000000
-+/* Nothing
-+#define ICU0_IM0_IOSR_PCM_TX_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_PCM_TX_INTOCC 0x40000000
-+/** PCM Receive Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_PCM_RX 0x20000000
-+/* Nothing
-+#define ICU0_IM0_IOSR_PCM_RX_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_PCM_RX_INTOCC 0x20000000
-+/** Secure Hash Algorithm Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_SHA1_HASH 0x10000000
-+/* Nothing
-+#define ICU0_IM0_IOSR_SHA1_HASH_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_SHA1_HASH_INTOCC 0x10000000
-+/** Advanced Encryption Standard Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_AES_AES 0x08000000
-+/* Nothing
-+#define ICU0_IM0_IOSR_AES_AES_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_AES_AES_INTOCC 0x08000000
-+/** SSC Frame Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_SSC0_F 0x00020000
-+/* Nothing
-+#define ICU0_IM0_IOSR_SSC0_F_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_SSC0_F_INTOCC 0x00020000
-+/** SSC Error Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_SSC0_E 0x00010000
-+/* Nothing
-+#define ICU0_IM0_IOSR_SSC0_E_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_SSC0_E_INTOCC 0x00010000
-+/** SSC Receive Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_SSC0_R 0x00008000
-+/* Nothing
-+#define ICU0_IM0_IOSR_SSC0_R_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_SSC0_R_INTOCC 0x00008000
-+/** SSC Transmit Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_SSC0_T 0x00004000
-+/* Nothing
-+#define ICU0_IM0_IOSR_SSC0_T_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_SSC0_T_INTOCC 0x00004000
-+/** I2C Peripheral Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_I2C_P_INT 0x00002000
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_I2C_P_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_I2C_P_INT_INTOCC 0x00002000
-+/** I2C Error Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_I2C_ERR_INT 0x00001000
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_I2C_ERR_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_I2C_ERR_INT_INTOCC 0x00001000
-+/** I2C Burst Data Transfer Request
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_BREQ_INT 0x00000800
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_BREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_BREQ_INT_INTOCC 0x00000800
-+/** I2C Last Burst Data Transfer Request
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_LBREQ_INT 0x00000400
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_LBREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_LBREQ_INT_INTOCC 0x00000400
-+/** I2C Single Data Transfer Request
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_SREQ_INT 0x00000200
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_SREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_SREQ_INT_INTOCC 0x00000200
-+/** I2C Last Single Data Transfer Request
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_I2C_LSREQ_INT 0x00000100
-+/* Nothing
-+#define ICU0_IM0_IOSR_I2C_LSREQ_INT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_I2C_LSREQ_INT_INTOCC 0x00000100
-+/** HOST IF Mailbox1 Transmit Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_HOST_MB1_TIR 0x00000010
-+/* Nothing
-+#define ICU0_IM0_IOSR_HOST_MB1_TIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_HOST_MB1_TIR_INTOCC 0x00000010
-+/** HOST IF Mailbox1 Receive Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_HOST_MB1_RIR 0x00000008
-+/* Nothing
-+#define ICU0_IM0_IOSR_HOST_MB1_RIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_HOST_MB1_RIR_INTOCC 0x00000008
-+/** HOST IF Mailbox0 Transmit Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_HOST_MB0_TIR 0x00000004
-+/* Nothing
-+#define ICU0_IM0_IOSR_HOST_MB0_TIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_HOST_MB0_TIR_INTOCC 0x00000004
-+/** HOST IF Mailbox0 Receive Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_HOST_MB0_RIR 0x00000002
-+/* Nothing
-+#define ICU0_IM0_IOSR_HOST_MB0_RIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_HOST_MB0_RIR_INTOCC 0x00000002
-+/** HOST IF Event Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IOSR_HOST_EIR 0x00000001
-+/* Nothing
-+#define ICU0_IM0_IOSR_HOST_EIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM0_IOSR_HOST_EIR_INTOCC 0x00000001
-+
-+/* Fields of "IM0 Interrupt Request Set Register" */
-+/** PCM Transmit Crash Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_PCM_HW2_CRASH 0x80000000
-+/** PCM Transmit Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_PCM_TX 0x40000000
-+/** PCM Receive Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_PCM_RX 0x20000000
-+/** Secure Hash Algorithm Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_SHA1_HASH 0x10000000
-+/** Advanced Encryption Standard Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_AES_AES 0x08000000
-+/** SSC Frame Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_SSC0_F 0x00020000
-+/** SSC Error Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_SSC0_E 0x00010000
-+/** SSC Receive Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_SSC0_R 0x00008000
-+/** SSC Transmit Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_SSC0_T 0x00004000
-+/** I2C Peripheral Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_I2C_P_INT 0x00002000
-+/** I2C Error Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_I2C_ERR_INT 0x00001000
-+/** I2C Burst Data Transfer Request
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_BREQ_INT 0x00000800
-+/** I2C Last Burst Data Transfer Request
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_LBREQ_INT 0x00000400
-+/** I2C Single Data Transfer Request
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_SREQ_INT 0x00000200
-+/** I2C Last Single Data Transfer Request
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_I2C_LSREQ_INT 0x00000100
-+/** HOST IF Mailbox1 Transmit Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_HOST_MB1_TIR 0x00000010
-+/** HOST IF Mailbox1 Receive Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_HOST_MB1_RIR 0x00000008
-+/** HOST IF Mailbox0 Transmit Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_HOST_MB0_TIR 0x00000004
-+/** HOST IF Mailbox0 Receive Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_HOST_MB0_RIR 0x00000002
-+/** HOST IF Event Interrupt
-+    Software control for the corresponding bit in the IM0_ISR register. */
-+#define ICU0_IM0_IRSR_HOST_EIR 0x00000001
-+
-+/* Fields of "IM0 Interrupt Mode Register" */
-+/** PCM Transmit Crash Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_PCM_HW2_CRASH 0x80000000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_PCM_HW2_CRASH_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_PCM_HW2_CRASH_DIR 0x80000000
-+/** PCM Transmit Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_PCM_TX 0x40000000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_PCM_TX_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_PCM_TX_DIR 0x40000000
-+/** PCM Receive Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_PCM_RX 0x20000000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_PCM_RX_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_PCM_RX_DIR 0x20000000
-+/** Secure Hash Algorithm Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_SHA1_HASH 0x10000000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_SHA1_HASH_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_SHA1_HASH_DIR 0x10000000
-+/** Advanced Encryption Standard Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_AES_AES 0x08000000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_AES_AES_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_AES_AES_DIR 0x08000000
-+/** SSC Frame Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_SSC0_F 0x00020000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_SSC0_F_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_SSC0_F_DIR 0x00020000
-+/** SSC Error Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_SSC0_E 0x00010000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_SSC0_E_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_SSC0_E_DIR 0x00010000
-+/** SSC Receive Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_SSC0_R 0x00008000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_SSC0_R_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_SSC0_R_DIR 0x00008000
-+/** SSC Transmit Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_SSC0_T 0x00004000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_SSC0_T_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_SSC0_T_DIR 0x00004000
-+/** I2C Peripheral Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_I2C_P_INT 0x00002000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_I2C_P_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_I2C_P_INT_DIR 0x00002000
-+/** I2C Error Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_I2C_ERR_INT 0x00001000
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_I2C_ERR_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_I2C_ERR_INT_DIR 0x00001000
-+/** I2C Burst Data Transfer Request
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_BREQ_INT 0x00000800
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_BREQ_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_BREQ_INT_DIR 0x00000800
-+/** I2C Last Burst Data Transfer Request
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_LBREQ_INT 0x00000400
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_LBREQ_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_LBREQ_INT_DIR 0x00000400
-+/** I2C Single Data Transfer Request
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_SREQ_INT 0x00000200
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_SREQ_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_SREQ_INT_DIR 0x00000200
-+/** I2C Last Single Data Transfer Request
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_I2C_LSREQ_INT 0x00000100
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_I2C_LSREQ_INT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_I2C_LSREQ_INT_DIR 0x00000100
-+/** HOST IF Mailbox1 Transmit Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB1_TIR 0x00000010
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_HOST_MB1_TIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB1_TIR_DIR 0x00000010
-+/** HOST IF Mailbox1 Receive Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB1_RIR 0x00000008
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_HOST_MB1_RIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB1_RIR_DIR 0x00000008
-+/** HOST IF Mailbox0 Transmit Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB0_TIR 0x00000004
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_HOST_MB0_TIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB0_TIR_DIR 0x00000004
-+/** HOST IF Mailbox0 Receive Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB0_RIR 0x00000002
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_HOST_MB0_RIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_HOST_MB0_RIR_DIR 0x00000002
-+/** HOST IF Event Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM0_IMR_HOST_EIR 0x00000001
-+/* Indirect Interrupt.
-+#define ICU0_IM0_IMR_HOST_EIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM0_IMR_HOST_EIR_DIR 0x00000001
-+
-+/* Fields of "IM1 Interrupt Status Register" */
-+/** Crossbar Error Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_XBAR_ERROR 0x80000000
-+/* Nothing
-+#define ICU0_IM1_ISR_XBAR_ERROR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_XBAR_ERROR_INTACK 0x80000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_XBAR_ERROR_INTOCC 0x80000000
-+/** DDR Controller Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_DDR 0x40000000
-+/* Nothing
-+#define ICU0_IM1_ISR_DDR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_DDR_INTACK 0x40000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_DDR_INTOCC 0x40000000
-+/** FPI Bus Control Unit Interrupt
-+    This bit is a direct interrupt. */
-+#define ICU0_IM1_ISR_BCU0 0x20000000
-+/* Nothing
-+#define ICU0_IM1_ISR_BCU0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_BCU0_INTACK 0x20000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_BCU0_INTOCC 0x20000000
-+/** SBIU interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_SBIU0 0x08000000
-+/* Nothing
-+#define ICU0_IM1_ISR_SBIU0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_SBIU0_INTACK 0x08000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_SBIU0_INTOCC 0x08000000
-+/** Watchdog Prewarning Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_WDT_PIR 0x02000000
-+/* Nothing
-+#define ICU0_IM1_ISR_WDT_PIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_WDT_PIR_INTACK 0x02000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_WDT_PIR_INTOCC 0x02000000
-+/** Watchdog Access Error Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_WDT_AEIR 0x01000000
-+/* Nothing
-+#define ICU0_IM1_ISR_WDT_AEIR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_WDT_AEIR_INTACK 0x01000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_WDT_AEIR_INTOCC 0x01000000
-+/** SYS GPE Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_SYS_GPE 0x00200000
-+/* Nothing
-+#define ICU0_IM1_ISR_SYS_GPE_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_SYS_GPE_INTACK 0x00200000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_SYS_GPE_INTOCC 0x00200000
-+/** SYS1 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_SYS1 0x00100000
-+/* Nothing
-+#define ICU0_IM1_ISR_SYS1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_SYS1_INTACK 0x00100000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_SYS1_INTOCC 0x00100000
-+/** PMA Interrupt from IntNode of the RX Clk Domain
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_PMA_RX 0x00020000
-+/* Nothing
-+#define ICU0_IM1_ISR_PMA_RX_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_PMA_RX_INTACK 0x00020000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_PMA_RX_INTOCC 0x00020000
-+/** PMA Interrupt from IntNode of the TX Clk Domain
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_PMA_TX 0x00010000
-+/* Nothing
-+#define ICU0_IM1_ISR_PMA_TX_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_PMA_TX_INTACK 0x00010000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_PMA_TX_INTOCC 0x00010000
-+/** PMA Interrupt from IntNode of the 200MHz Domain
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_PMA_200M 0x00008000
-+/* Nothing
-+#define ICU0_IM1_ISR_PMA_200M_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_PMA_200M_INTACK 0x00008000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_PMA_200M_INTOCC 0x00008000
-+/** Time of Day
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_TOD 0x00004000
-+/* Nothing
-+#define ICU0_IM1_ISR_TOD_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_TOD_INTACK 0x00004000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_TOD_INTOCC 0x00004000
-+/** 8kHz root interrupt derived from GPON interface
-+    This bit is a direct interrupt. */
-+#define ICU0_IM1_ISR_FSC_ROOT 0x00002000
-+/* Nothing
-+#define ICU0_IM1_ISR_FSC_ROOT_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_FSC_ROOT_INTACK 0x00002000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_FSC_ROOT_INTOCC 0x00002000
-+/** FSC Timer Interrupt 1
-+    Delayed version of FSCROOT. This bit is a direct interrupt. */
-+#define ICU0_IM1_ISR_FSCT_CMP1 0x00001000
-+/* Nothing
-+#define ICU0_IM1_ISR_FSCT_CMP1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_FSCT_CMP1_INTACK 0x00001000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_FSCT_CMP1_INTOCC 0x00001000
-+/** FSC Timer Interrupt 0
-+    Delayed version of FSCROOT. This bit is a direct interrupt. */
-+#define ICU0_IM1_ISR_FSCT_CMP0 0x00000800
-+/* Nothing
-+#define ICU0_IM1_ISR_FSCT_CMP0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_FSCT_CMP0_INTACK 0x00000800
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_FSCT_CMP0_INTOCC 0x00000800
-+/** 8kHz backup interrupt derived from core-PLL
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_FSC_BKP 0x00000400
-+/* Nothing
-+#define ICU0_IM1_ISR_FSC_BKP_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_FSC_BKP_INTACK 0x00000400
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_FSC_BKP_INTOCC 0x00000400
-+/** External Interrupt from GPIO P4
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_P4 0x00000100
-+/* Nothing
-+#define ICU0_IM1_ISR_P4_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_P4_INTACK 0x00000100
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_P4_INTOCC 0x00000100
-+/** External Interrupt from GPIO P3
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_P3 0x00000080
-+/* Nothing
-+#define ICU0_IM1_ISR_P3_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_P3_INTACK 0x00000080
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_P3_INTOCC 0x00000080
-+/** External Interrupt from GPIO P2
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_P2 0x00000040
-+/* Nothing
-+#define ICU0_IM1_ISR_P2_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_P2_INTACK 0x00000040
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_P2_INTOCC 0x00000040
-+/** External Interrupt from GPIO P1
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_P1 0x00000020
-+/* Nothing
-+#define ICU0_IM1_ISR_P1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_P1_INTACK 0x00000020
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_P1_INTOCC 0x00000020
-+/** External Interrupt from GPIO P0
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_P0 0x00000010
-+/* Nothing
-+#define ICU0_IM1_ISR_P0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_P0_INTACK 0x00000010
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_P0_INTOCC 0x00000010
-+/** EBU Serial Flash Busy
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_BUSY 0x00000004
-+/* Nothing
-+#define ICU0_IM1_ISR_EBU_SF_BUSY_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_BUSY_INTACK 0x00000004
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_EBU_SF_BUSY_INTOCC 0x00000004
-+/** EBU Serial Flash Command Overwrite Error
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_COVERR 0x00000002
-+/* Nothing
-+#define ICU0_IM1_ISR_EBU_SF_COVERR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_COVERR_INTACK 0x00000002
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_EBU_SF_COVERR_INTOCC 0x00000002
-+/** EBU Serial Flash Command Error
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_CMDERR 0x00000001
-+/* Nothing
-+#define ICU0_IM1_ISR_EBU_SF_CMDERR_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM1_ISR_EBU_SF_CMDERR_INTACK 0x00000001
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_ISR_EBU_SF_CMDERR_INTOCC 0x00000001
-+
-+/* Fields of "IM1 Interrupt Enable Register" */
-+/** Crossbar Error Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_XBAR_ERROR 0x80000000
-+/* Disable
-+#define ICU0_IM1_IER_XBAR_ERROR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_XBAR_ERROR_EN 0x80000000
-+/** DDR Controller Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_DDR 0x40000000
-+/* Disable
-+#define ICU0_IM1_IER_DDR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_DDR_EN 0x40000000
-+/** FPI Bus Control Unit Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_BCU0 0x20000000
-+/* Disable
-+#define ICU0_IM1_IER_BCU0_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_BCU0_EN 0x20000000
-+/** SBIU interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_SBIU0 0x08000000
-+/* Disable
-+#define ICU0_IM1_IER_SBIU0_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_SBIU0_EN 0x08000000
-+/** Watchdog Prewarning Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_WDT_PIR 0x02000000
-+/* Disable
-+#define ICU0_IM1_IER_WDT_PIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_WDT_PIR_EN 0x02000000
-+/** Watchdog Access Error Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_WDT_AEIR 0x01000000
-+/* Disable
-+#define ICU0_IM1_IER_WDT_AEIR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_WDT_AEIR_EN 0x01000000
-+/** SYS GPE Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_SYS_GPE 0x00200000
-+/* Disable
-+#define ICU0_IM1_IER_SYS_GPE_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_SYS_GPE_EN 0x00200000
-+/** SYS1 Interrupt
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_SYS1 0x00100000
-+/* Disable
-+#define ICU0_IM1_IER_SYS1_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_SYS1_EN 0x00100000
-+/** PMA Interrupt from IntNode of the RX Clk Domain
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_PMA_RX 0x00020000
-+/* Disable
-+#define ICU0_IM1_IER_PMA_RX_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_PMA_RX_EN 0x00020000
-+/** PMA Interrupt from IntNode of the TX Clk Domain
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_PMA_TX 0x00010000
-+/* Disable
-+#define ICU0_IM1_IER_PMA_TX_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_PMA_TX_EN 0x00010000
-+/** PMA Interrupt from IntNode of the 200MHz Domain
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_PMA_200M 0x00008000
-+/* Disable
-+#define ICU0_IM1_IER_PMA_200M_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_PMA_200M_EN 0x00008000
-+/** Time of Day
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_TOD 0x00004000
-+/* Disable
-+#define ICU0_IM1_IER_TOD_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_TOD_EN 0x00004000
-+/** 8kHz root interrupt derived from GPON interface
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_FSC_ROOT 0x00002000
-+/* Disable
-+#define ICU0_IM1_IER_FSC_ROOT_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_FSC_ROOT_EN 0x00002000
-+/** FSC Timer Interrupt 1
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_FSCT_CMP1 0x00001000
-+/* Disable
-+#define ICU0_IM1_IER_FSCT_CMP1_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_FSCT_CMP1_EN 0x00001000
-+/** FSC Timer Interrupt 0
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_FSCT_CMP0 0x00000800
-+/* Disable
-+#define ICU0_IM1_IER_FSCT_CMP0_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_FSCT_CMP0_EN 0x00000800
-+/** 8kHz backup interrupt derived from core-PLL
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_FSC_BKP 0x00000400
-+/* Disable
-+#define ICU0_IM1_IER_FSC_BKP_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_FSC_BKP_EN 0x00000400
-+/** External Interrupt from GPIO P4
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_P4 0x00000100
-+/* Disable
-+#define ICU0_IM1_IER_P4_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_P4_EN 0x00000100
-+/** External Interrupt from GPIO P3
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_P3 0x00000080
-+/* Disable
-+#define ICU0_IM1_IER_P3_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_P3_EN 0x00000080
-+/** External Interrupt from GPIO P2
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_P2 0x00000040
-+/* Disable
-+#define ICU0_IM1_IER_P2_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_P2_EN 0x00000040
-+/** External Interrupt from GPIO P1
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_P1 0x00000020
-+/* Disable
-+#define ICU0_IM1_IER_P1_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_P1_EN 0x00000020
-+/** External Interrupt from GPIO P0
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_P0 0x00000010
-+/* Disable
-+#define ICU0_IM1_IER_P0_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_P0_EN 0x00000010
-+/** EBU Serial Flash Busy
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_EBU_SF_BUSY 0x00000004
-+/* Disable
-+#define ICU0_IM1_IER_EBU_SF_BUSY_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_EBU_SF_BUSY_EN 0x00000004
-+/** EBU Serial Flash Command Overwrite Error
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_EBU_SF_COVERR 0x00000002
-+/* Disable
-+#define ICU0_IM1_IER_EBU_SF_COVERR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_EBU_SF_COVERR_EN 0x00000002
-+/** EBU Serial Flash Command Error
-+    Interrupt enable bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IER_EBU_SF_CMDERR 0x00000001
-+/* Disable
-+#define ICU0_IM1_IER_EBU_SF_CMDERR_DIS 0x00000000 */
-+/** Enable */
-+#define ICU0_IM1_IER_EBU_SF_CMDERR_EN 0x00000001
-+
-+/* Fields of "IM1 Interrupt Output Status Register" */
-+/** Crossbar Error Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_XBAR_ERROR 0x80000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_XBAR_ERROR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_XBAR_ERROR_INTOCC 0x80000000
-+/** DDR Controller Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_DDR 0x40000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_DDR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_DDR_INTOCC 0x40000000
-+/** FPI Bus Control Unit Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_BCU0 0x20000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_BCU0_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_BCU0_INTOCC 0x20000000
-+/** SBIU interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_SBIU0 0x08000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_SBIU0_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_SBIU0_INTOCC 0x08000000
-+/** Watchdog Prewarning Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_WDT_PIR 0x02000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_WDT_PIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_WDT_PIR_INTOCC 0x02000000
-+/** Watchdog Access Error Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_WDT_AEIR 0x01000000
-+/* Nothing
-+#define ICU0_IM1_IOSR_WDT_AEIR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_WDT_AEIR_INTOCC 0x01000000
-+/** SYS GPE Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_SYS_GPE 0x00200000
-+/* Nothing
-+#define ICU0_IM1_IOSR_SYS_GPE_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_SYS_GPE_INTOCC 0x00200000
-+/** SYS1 Interrupt
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_SYS1 0x00100000
-+/* Nothing
-+#define ICU0_IM1_IOSR_SYS1_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_SYS1_INTOCC 0x00100000
-+/** PMA Interrupt from IntNode of the RX Clk Domain
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_PMA_RX 0x00020000
-+/* Nothing
-+#define ICU0_IM1_IOSR_PMA_RX_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_PMA_RX_INTOCC 0x00020000
-+/** PMA Interrupt from IntNode of the TX Clk Domain
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_PMA_TX 0x00010000
-+/* Nothing
-+#define ICU0_IM1_IOSR_PMA_TX_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_PMA_TX_INTOCC 0x00010000
-+/** PMA Interrupt from IntNode of the 200MHz Domain
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_PMA_200M 0x00008000
-+/* Nothing
-+#define ICU0_IM1_IOSR_PMA_200M_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_PMA_200M_INTOCC 0x00008000
-+/** Time of Day
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_TOD 0x00004000
-+/* Nothing
-+#define ICU0_IM1_IOSR_TOD_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_TOD_INTOCC 0x00004000
-+/** 8kHz root interrupt derived from GPON interface
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_FSC_ROOT 0x00002000
-+/* Nothing
-+#define ICU0_IM1_IOSR_FSC_ROOT_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_FSC_ROOT_INTOCC 0x00002000
-+/** FSC Timer Interrupt 1
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_FSCT_CMP1 0x00001000
-+/* Nothing
-+#define ICU0_IM1_IOSR_FSCT_CMP1_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_FSCT_CMP1_INTOCC 0x00001000
-+/** FSC Timer Interrupt 0
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_FSCT_CMP0 0x00000800
-+/* Nothing
-+#define ICU0_IM1_IOSR_FSCT_CMP0_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_FSCT_CMP0_INTOCC 0x00000800
-+/** 8kHz backup interrupt derived from core-PLL
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_FSC_BKP 0x00000400
-+/* Nothing
-+#define ICU0_IM1_IOSR_FSC_BKP_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_FSC_BKP_INTOCC 0x00000400
-+/** External Interrupt from GPIO P4
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_P4 0x00000100
-+/* Nothing
-+#define ICU0_IM1_IOSR_P4_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_P4_INTOCC 0x00000100
-+/** External Interrupt from GPIO P3
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_P3 0x00000080
-+/* Nothing
-+#define ICU0_IM1_IOSR_P3_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_P3_INTOCC 0x00000080
-+/** External Interrupt from GPIO P2
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_P2 0x00000040
-+/* Nothing
-+#define ICU0_IM1_IOSR_P2_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_P2_INTOCC 0x00000040
-+/** External Interrupt from GPIO P1
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_P1 0x00000020
-+/* Nothing
-+#define ICU0_IM1_IOSR_P1_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_P1_INTOCC 0x00000020
-+/** External Interrupt from GPIO P0
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_P0 0x00000010
-+/* Nothing
-+#define ICU0_IM1_IOSR_P0_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_P0_INTOCC 0x00000010
-+/** EBU Serial Flash Busy
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_EBU_SF_BUSY 0x00000004
-+/* Nothing
-+#define ICU0_IM1_IOSR_EBU_SF_BUSY_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_EBU_SF_BUSY_INTOCC 0x00000004
-+/** EBU Serial Flash Command Overwrite Error
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_EBU_SF_COVERR 0x00000002
-+/* Nothing
-+#define ICU0_IM1_IOSR_EBU_SF_COVERR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_EBU_SF_COVERR_INTOCC 0x00000002
-+/** EBU Serial Flash Command Error
-+    Masked interrupt bit for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IOSR_EBU_SF_CMDERR 0x00000001
-+/* Nothing
-+#define ICU0_IM1_IOSR_EBU_SF_CMDERR_NULL 0x00000000 */
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM1_IOSR_EBU_SF_CMDERR_INTOCC 0x00000001
-+
-+/* Fields of "IM1 Interrupt Request Set Register" */
-+/** Crossbar Error Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_XBAR_ERROR 0x80000000
-+/** DDR Controller Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_DDR 0x40000000
-+/** FPI Bus Control Unit Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_BCU0 0x20000000
-+/** SBIU interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_SBIU0 0x08000000
-+/** Watchdog Prewarning Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_WDT_PIR 0x02000000
-+/** Watchdog Access Error Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_WDT_AEIR 0x01000000
-+/** SYS GPE Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_SYS_GPE 0x00200000
-+/** SYS1 Interrupt
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_SYS1 0x00100000
-+/** PMA Interrupt from IntNode of the RX Clk Domain
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_PMA_RX 0x00020000
-+/** PMA Interrupt from IntNode of the TX Clk Domain
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_PMA_TX 0x00010000
-+/** PMA Interrupt from IntNode of the 200MHz Domain
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_PMA_200M 0x00008000
-+/** Time of Day
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_TOD 0x00004000
-+/** 8kHz root interrupt derived from GPON interface
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_FSC_ROOT 0x00002000
-+/** FSC Timer Interrupt 1
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_FSCT_CMP1 0x00001000
-+/** FSC Timer Interrupt 0
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_FSCT_CMP0 0x00000800
-+/** 8kHz backup interrupt derived from core-PLL
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_FSC_BKP 0x00000400
-+/** External Interrupt from GPIO P4
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_P4 0x00000100
-+/** External Interrupt from GPIO P3
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_P3 0x00000080
-+/** External Interrupt from GPIO P2
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_P2 0x00000040
-+/** External Interrupt from GPIO P1
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_P1 0x00000020
-+/** External Interrupt from GPIO P0
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_P0 0x00000010
-+/** EBU Serial Flash Busy
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_EBU_SF_BUSY 0x00000004
-+/** EBU Serial Flash Command Overwrite Error
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_EBU_SF_COVERR 0x00000002
-+/** EBU Serial Flash Command Error
-+    Software control for the corresponding bit in the IM1_ISR register. */
-+#define ICU0_IM1_IRSR_EBU_SF_CMDERR 0x00000001
-+
-+/* Fields of "IM1 Interrupt Mode Register" */
-+/** Crossbar Error Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_XBAR_ERROR 0x80000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_XBAR_ERROR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_XBAR_ERROR_DIR 0x80000000
-+/** DDR Controller Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_DDR 0x40000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_DDR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_DDR_DIR 0x40000000
-+/** FPI Bus Control Unit Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_BCU0 0x20000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_BCU0_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_BCU0_DIR 0x20000000
-+/** SBIU interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_SBIU0 0x08000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_SBIU0_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_SBIU0_DIR 0x08000000
-+/** Watchdog Prewarning Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_WDT_PIR 0x02000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_WDT_PIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_WDT_PIR_DIR 0x02000000
-+/** Watchdog Access Error Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_WDT_AEIR 0x01000000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_WDT_AEIR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_WDT_AEIR_DIR 0x01000000
-+/** SYS GPE Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_SYS_GPE 0x00200000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_SYS_GPE_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_SYS_GPE_DIR 0x00200000
-+/** SYS1 Interrupt
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_SYS1 0x00100000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_SYS1_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_SYS1_DIR 0x00100000
-+/** PMA Interrupt from IntNode of the RX Clk Domain
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_PMA_RX 0x00020000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_PMA_RX_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_PMA_RX_DIR 0x00020000
-+/** PMA Interrupt from IntNode of the TX Clk Domain
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_PMA_TX 0x00010000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_PMA_TX_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_PMA_TX_DIR 0x00010000
-+/** PMA Interrupt from IntNode of the 200MHz Domain
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_PMA_200M 0x00008000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_PMA_200M_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_PMA_200M_DIR 0x00008000
-+/** Time of Day
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_TOD 0x00004000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_TOD_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_TOD_DIR 0x00004000
-+/** 8kHz root interrupt derived from GPON interface
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_FSC_ROOT 0x00002000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_FSC_ROOT_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_FSC_ROOT_DIR 0x00002000
-+/** FSC Timer Interrupt 1
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_FSCT_CMP1 0x00001000
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_FSCT_CMP1_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_FSCT_CMP1_DIR 0x00001000
-+/** FSC Timer Interrupt 0
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_FSCT_CMP0 0x00000800
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_FSCT_CMP0_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_FSCT_CMP0_DIR 0x00000800
-+/** 8kHz backup interrupt derived from core-PLL
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_FSC_BKP 0x00000400
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_FSC_BKP_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_FSC_BKP_DIR 0x00000400
-+/** External Interrupt from GPIO P4
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_P4 0x00000100
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_P4_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_P4_DIR 0x00000100
-+/** External Interrupt from GPIO P3
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_P3 0x00000080
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_P3_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_P3_DIR 0x00000080
-+/** External Interrupt from GPIO P2
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_P2 0x00000040
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_P2_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_P2_DIR 0x00000040
-+/** External Interrupt from GPIO P1
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_P1 0x00000020
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_P1_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_P1_DIR 0x00000020
-+/** External Interrupt from GPIO P0
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_P0 0x00000010
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_P0_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_P0_DIR 0x00000010
-+/** EBU Serial Flash Busy
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_BUSY 0x00000004
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_EBU_SF_BUSY_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_BUSY_DIR 0x00000004
-+/** EBU Serial Flash Command Overwrite Error
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_COVERR 0x00000002
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_EBU_SF_COVERR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_COVERR_DIR 0x00000002
-+/** EBU Serial Flash Command Error
-+    Type of interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_CMDERR 0x00000001
-+/* Indirect Interrupt.
-+#define ICU0_IM1_IMR_EBU_SF_CMDERR_IND 0x00000000 */
-+/** Direct Interrupt. */
-+#define ICU0_IM1_IMR_EBU_SF_CMDERR_DIR 0x00000001
-+
-+/* Fields of "IM2 Interrupt Status Register" */
-+/** EIM Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_EIM 0x80000000
-+/* Nothing
-+#define ICU0_IM2_ISR_EIM_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_EIM_INTACK 0x80000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_EIM_INTOCC 0x80000000
-+/** GTC Upstream Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_GTC_US 0x40000000
-+/* Nothing
-+#define ICU0_IM2_ISR_GTC_US_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_GTC_US_INTACK 0x40000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_GTC_US_INTOCC 0x40000000
-+/** GTC Downstream Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_GTC_DS 0x20000000
-+/* Nothing
-+#define ICU0_IM2_ISR_GTC_DS_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_GTC_DS_INTACK 0x20000000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_GTC_DS_INTOCC 0x20000000
-+/** TBM Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_TBM 0x00400000
-+/* Nothing
-+#define ICU0_IM2_ISR_TBM_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_TBM_INTACK 0x00400000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_TBM_INTOCC 0x00400000
-+/** Dispatcher Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_DISP 0x00200000
-+/* Nothing
-+#define ICU0_IM2_ISR_DISP_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_DISP_INTACK 0x00200000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_DISP_INTOCC 0x00200000
-+/** CONFIG Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_CONFIG 0x00100000
-+/* Nothing
-+#define ICU0_IM2_ISR_CONFIG_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_CONFIG_INTACK 0x00100000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_CONFIG_INTOCC 0x00100000
-+/** CONFIG Break Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_CONFIG_BREAK 0x00080000
-+/* Nothing
-+#define ICU0_IM2_ISR_CONFIG_BREAK_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_CONFIG_BREAK_INTACK 0x00080000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_CONFIG_BREAK_INTOCC 0x00080000
-+/** OCTRLC Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLC 0x00040000
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLC_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLC_INTACK 0x00040000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLC_INTOCC 0x00040000
-+/** ICTRLC 1 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_ICTRLC1 0x00020000
-+/* Nothing
-+#define ICU0_IM2_ISR_ICTRLC1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_ICTRLC1_INTACK 0x00020000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_ICTRLC1_INTOCC 0x00020000
-+/** ICTRLC 0 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_ICTRLC0 0x00010000
-+/* Nothing
-+#define ICU0_IM2_ISR_ICTRLC0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_ICTRLC0_INTACK 0x00010000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_ICTRLC0_INTOCC 0x00010000
-+/** LINK 1 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_LINK1 0x00004000
-+/* Nothing
-+#define ICU0_IM2_ISR_LINK1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_LINK1_INTACK 0x00004000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_LINK1_INTOCC 0x00004000
-+/** TMU Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_TMU 0x00001000
-+/* Nothing
-+#define ICU0_IM2_ISR_TMU_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_TMU_INTACK 0x00001000
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_TMU_INTOCC 0x00001000
-+/** FSQM Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_FSQM 0x00000800
-+/* Nothing
-+#define ICU0_IM2_ISR_FSQM_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_FSQM_INTACK 0x00000800
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_FSQM_INTOCC 0x00000800
-+/** IQM Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_IQM 0x00000400
-+/* Nothing
-+#define ICU0_IM2_ISR_IQM_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_IQM_INTACK 0x00000400
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_IQM_INTOCC 0x00000400
-+/** OCTRLG Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLG 0x00000200
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLG_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLG_INTACK 0x00000200
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLG_INTOCC 0x00000200
-+/** OCTRLL 3 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL3 0x00000080
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLL3_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL3_INTACK 0x00000080
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLL3_INTOCC 0x00000080
-+/** OCTRLL 2 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL2 0x00000040
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLL2_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL2_INTACK 0x00000040
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLL2_INTOCC 0x00000040
-+/** OCTRLL 1 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL1 0x00000020
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLL1_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL1_INTACK 0x00000020
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLL1_INTOCC 0x00000020
-+/** OCTRLL 0 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL0 0x00000010
-+/* Nothing
-+#define ICU0_IM2_ISR_OCTRLL0_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_OCTRLL0_INTACK 0x00000010
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_OCTRLL0_INTOCC 0x00000010
-+/** ICTRLL 3 Interrupt
-+    This bit is an indirect interrupt. */
-+#define ICU0_IM2_ISR_ICTRLL3 0x00000008
-+/* Nothing
-+#define ICU0_IM2_ISR_ICTRLL3_NULL 0x00000000 */
-+/** Write: Acknowledge the interrupt. */
-+#define ICU0_IM2_ISR_ICTRLL3_INTACK 0x00000008
-+/** Read: Interrupt occurred. */
-+#define ICU0_IM2_ISR_ICTRLL3_INTOCC 0x00000008
-+/** ICTRLL 2 Interrupt
-+    This bit is an indirect interru