* [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms @ 2012-04-04 1:33 Rob Herring 2012-04-04 1:34 ` [PATCH 2/5] net: remove ixp2000 ethernet driver Rob Herring ` (5 more replies) 0 siblings, 6 replies; 14+ messages in thread From: Rob Herring @ 2012-04-04 1:33 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Randy Dunlap From: Rob Herring <rob.herring@calxeda.com> ixp2xxx platforms have had no real changes since ~2006 and the maintainer has said on irc that they can be removed: 13:05 < nico> do you still care about ixp2000? 13:22 < lennert> not really, no 13:58 < nico> do you think we could remove it from the kernel tree? 14:01 < lennert> go for it, and remove ixp23xx too while you're at it Removing will help simplify ARM consolidation in general and PCI re-work specifically. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Randy Dunlap <rdunlap@xenotime.net> --- Documentation/arm/00-INDEX | 2 - Documentation/arm/IXP2000 | 69 --- MAINTAINERS | 17 - arch/arm/Kconfig | 26 - arch/arm/Makefile | 2 - arch/arm/boot/compressed/head-xscale.S | 7 - arch/arm/common/Makefile | 2 - arch/arm/common/uengine.c | 507 -------------------- arch/arm/configs/ixp2000_defconfig | 99 ---- arch/arm/configs/ixp23xx_defconfig | 105 ----- arch/arm/include/asm/hardware/uengine.h | 62 --- arch/arm/mach-ixp2000/Kconfig | 72 --- arch/arm/mach-ixp2000/Makefile | 14 - arch/arm/mach-ixp2000/Makefile.boot | 3 - arch/arm/mach-ixp2000/core.c | 520 --------------------- arch/arm/mach-ixp2000/enp2611.c | 265 ----------- arch/arm/mach-ixp2000/include/mach/debug-macro.S | 25 - arch/arm/mach-ixp2000/include/mach/enp2611.h | 46 -- arch/arm/mach-ixp2000/include/mach/entry-macro.S | 54 --- arch/arm/mach-ixp2000/include/mach/gpio-ixp2000.h | 48 -- arch/arm/mach-ixp2000/include/mach/hardware.h | 36 -- arch/arm/mach-ixp2000/include/mach/io.h | 133 ------ arch/arm/mach-ixp2000/include/mach/irqs.h | 207 -------- arch/arm/mach-ixp2000/include/mach/ixdp2x00.h | 92 ---- arch/arm/mach-ixp2000/include/mach/ixdp2x01.h | 57 --- arch/arm/mach-ixp2000/include/mach/ixp2000-regs.h | 451 ------------------ arch/arm/mach-ixp2000/include/mach/memory.h | 31 -- arch/arm/mach-ixp2000/include/mach/platform.h | 153 ------ arch/arm/mach-ixp2000/include/mach/timex.h | 13 - arch/arm/mach-ixp2000/include/mach/uncompress.h | 47 -- arch/arm/mach-ixp2000/ixdp2400.c | 180 ------- arch/arm/mach-ixp2000/ixdp2800.c | 295 ------------ arch/arm/mach-ixp2000/ixdp2x00.c | 306 ------------ arch/arm/mach-ixp2000/ixdp2x01.c | 483 ------------------- arch/arm/mach-ixp2000/pci.c | 252 ---------- arch/arm/mach-ixp23xx/Kconfig | 25 - arch/arm/mach-ixp23xx/Makefile | 11 - arch/arm/mach-ixp23xx/Makefile.boot | 2 - arch/arm/mach-ixp23xx/core.c | 455 ------------------ arch/arm/mach-ixp23xx/espresso.c | 93 ---- arch/arm/mach-ixp23xx/include/mach/debug-macro.S | 25 - arch/arm/mach-ixp23xx/include/mach/entry-macro.S | 31 -- arch/arm/mach-ixp23xx/include/mach/hardware.h | 32 -- arch/arm/mach-ixp23xx/include/mach/io.h | 22 - arch/arm/mach-ixp23xx/include/mach/irqs.h | 223 --------- arch/arm/mach-ixp23xx/include/mach/ixdp2351.h | 89 ---- arch/arm/mach-ixp23xx/include/mach/ixp23xx.h | 298 ------------ arch/arm/mach-ixp23xx/include/mach/memory.h | 34 -- arch/arm/mach-ixp23xx/include/mach/platform.h | 58 --- arch/arm/mach-ixp23xx/include/mach/time.h | 3 - arch/arm/mach-ixp23xx/include/mach/timex.h | 7 - arch/arm/mach-ixp23xx/include/mach/uncompress.h | 40 -- arch/arm/mach-ixp23xx/ixdp2351.c | 347 -------------- arch/arm/mach-ixp23xx/pci.c | 294 ------------ arch/arm/mach-ixp23xx/roadrunner.c | 180 ------- 55 files changed, 0 insertions(+), 6950 deletions(-) delete mode 100644 Documentation/arm/IXP2000 delete mode 100644 arch/arm/common/uengine.c delete mode 100644 arch/arm/configs/ixp2000_defconfig delete mode 100644 arch/arm/configs/ixp23xx_defconfig delete mode 100644 arch/arm/include/asm/hardware/uengine.h delete mode 100644 arch/arm/mach-ixp2000/Kconfig delete mode 100644 arch/arm/mach-ixp2000/Makefile delete mode 100644 arch/arm/mach-ixp2000/Makefile.boot delete mode 100644 arch/arm/mach-ixp2000/core.c delete mode 100644 arch/arm/mach-ixp2000/enp2611.c delete mode 100644 arch/arm/mach-ixp2000/include/mach/debug-macro.S delete mode 100644 arch/arm/mach-ixp2000/include/mach/enp2611.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/entry-macro.S delete mode 100644 arch/arm/mach-ixp2000/include/mach/gpio-ixp2000.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/hardware.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/io.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/irqs.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixdp2x00.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixdp2x01.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixp2000-regs.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/memory.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/platform.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/timex.h delete mode 100644 arch/arm/mach-ixp2000/include/mach/uncompress.h delete mode 100644 arch/arm/mach-ixp2000/ixdp2400.c delete mode 100644 arch/arm/mach-ixp2000/ixdp2800.c delete mode 100644 arch/arm/mach-ixp2000/ixdp2x00.c delete mode 100644 arch/arm/mach-ixp2000/ixdp2x01.c delete mode 100644 arch/arm/mach-ixp2000/pci.c delete mode 100644 arch/arm/mach-ixp23xx/Kconfig delete mode 100644 arch/arm/mach-ixp23xx/Makefile delete mode 100644 arch/arm/mach-ixp23xx/Makefile.boot delete mode 100644 arch/arm/mach-ixp23xx/core.c delete mode 100644 arch/arm/mach-ixp23xx/espresso.c delete mode 100644 arch/arm/mach-ixp23xx/include/mach/debug-macro.S delete mode 100644 arch/arm/mach-ixp23xx/include/mach/entry-macro.S delete mode 100644 arch/arm/mach-ixp23xx/include/mach/hardware.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/io.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/irqs.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/ixdp2351.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/ixp23xx.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/memory.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/platform.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/time.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/timex.h delete mode 100644 arch/arm/mach-ixp23xx/include/mach/uncompress.h delete mode 100644 arch/arm/mach-ixp23xx/ixdp2351.c delete mode 100644 arch/arm/mach-ixp23xx/pci.c delete mode 100644 arch/arm/mach-ixp23xx/roadrunner.c diff --git a/Documentation/arm/00-INDEX b/Documentation/arm/00-INDEX index 91c24a1..36420e1 100644 --- a/Documentation/arm/00-INDEX +++ b/Documentation/arm/00-INDEX @@ -4,8 +4,6 @@ Booting - requirements for booting Interrupts - ARM Interrupt subsystem documentation -IXP2000 - - Release Notes for Linux on Intel's IXP2000 Network Processor msm - MSM specific documentation Netwinder diff --git a/Documentation/arm/IXP2000 b/Documentation/arm/IXP2000 deleted file mode 100644 index 68d21d9..0000000 --- a/Documentation/arm/IXP2000 +++ /dev/null @@ -1,69 +0,0 @@ - -------------------------------------------------------------------------- -Release Notes for Linux on Intel's IXP2000 Network Processor - -Maintained by Deepak Saxena <dsaxena@plexity.net> -------------------------------------------------------------------------- - -1. Overview - -Intel's IXP2000 family of NPUs (IXP2400, IXP2800, IXP2850) is designed -for high-performance network applications such high-availability -telecom systems. In addition to an XScale core, it contains up to 8 -"MicroEngines" that run special code, several high-end networking -interfaces (UTOPIA, SPI, etc), a PCI host bridge, one serial port, -flash interface, and some other odds and ends. For more information, see: - -http://developer.intel.com - -2. Linux Support - -Linux currently supports the following features on the IXP2000 NPUs: - -- On-chip serial -- PCI -- Flash (MTD/JFFS2) -- I2C through GPIO -- Timers (watchdog, OS) - -That is about all we can support under Linux ATM b/c the core networking -components of the chip are accessed via Intel's closed source SDK. -Please contact Intel directly on issues with using those. There is -also a mailing list run by some folks at Princeton University that might -be of help: https://lists.cs.princeton.edu/mailman/listinfo/ixp2xxx - -WHATEVER YOU DO, DO NOT POST EMAIL TO THE LINUX-ARM OR LINUX-ARM-KERNEL -MAILING LISTS REGARDING THE INTEL SDK. - -3. Supported Platforms - -- Intel IXDP2400 Reference Platform -- Intel IXDP2800 Reference Platform -- Intel IXDP2401 Reference Platform -- Intel IXDP2801 Reference Platform -- RadiSys ENP-2611 - -4. Usage Notes - -- The IXP2000 platforms usually have rather complex PCI bus topologies - with large memory space requirements. In addition, b/c of the way the - Intel SDK is designed, devices are enumerated in a very specific - way. B/c of this this, we use "pci=firmware" option in the kernel - command line so that we do not re-enumerate the bus. - -- IXDP2x01 systems have variable clock tick rates that we cannot determine - via HW registers. The "ixdp2x01_clk=XXX" cmd line options allow you - to pass the clock rate to the board port. - -5. Thanks - -The IXP2000 work has been funded by Intel Corp. and MontaVista Software, Inc. - -The following people have contributed patches/comments/etc: - -Naeem F. Afzal -Lennert Buytenhek -Jeffrey Daly - -------------------------------------------------------------------------- -Last Update: 8/09/2004 diff --git a/MAINTAINERS b/MAINTAINERS index eecf344..defc06a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -640,13 +640,6 @@ S: Maintained F: drivers/amba/ F: include/linux/amba/bus.h -ARM/ADI ROADRUNNER MACHINE SUPPORT -M: Lennert Buytenhek <kernel@wantstofly.org> -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-ixp23xx/ -F: arch/arm/mach-ixp23xx/include/mach/ - ARM/ADS SPHERE MACHINE SUPPORT M: Lennert Buytenhek <kernel@wantstofly.org> L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) @@ -859,21 +852,11 @@ M: Dan Williams <dan.j.williams@intel.com> L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -ARM/INTEL IXP2000 ARM ARCHITECTURE -M: Lennert Buytenhek <kernel@wantstofly.org> -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/INTEL IXDP2850 MACHINE SUPPORT M: Lennert Buytenhek <kernel@wantstofly.org> L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -ARM/INTEL IXP23XX ARM ARCHITECTURE -M: Lennert Buytenhek <kernel@wantstofly.org> -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - ARM/INTEL IXP4XX ARM ARCHITECTURE M: Imre Kaloz <kaloz@openwrt.org> M: Krzysztof Halasa <khc@pm.waw.pl> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 9318084..6b242f4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -527,28 +527,6 @@ config ARCH_IOP33X help Support for Intel's IOP33X (XScale) family of processors. -config ARCH_IXP23XX - bool "IXP23XX-based" - depends on MMU - select CPU_XSC3 - select PCI - select ARCH_USES_GETTIMEOFFSET - select NEED_MACH_IO_H - select NEED_MACH_MEMORY_H - help - Support for Intel's IXP23xx (XScale) family of processors. - -config ARCH_IXP2000 - bool "IXP2400/2800-based" - depends on MMU - select CPU_XSCALE - select PCI - select ARCH_USES_GETTIMEOFFSET - select NEED_MACH_IO_H - select NEED_MACH_MEMORY_H - help - Support for Intel's IXP2400/2800 (XScale) family of processors. - config ARCH_IXP4XX bool "IXP4xx-based" depends on MMU @@ -1045,10 +1023,6 @@ source "arch/arm/mach-iop13xx/Kconfig" source "arch/arm/mach-ixp4xx/Kconfig" -source "arch/arm/mach-ixp2000/Kconfig" - -source "arch/arm/mach-ixp23xx/Kconfig" - source "arch/arm/mach-kirkwood/Kconfig" source "arch/arm/mach-ks8695/Kconfig" diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 047a207..a0c40a0 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -149,8 +149,6 @@ machine-$(CONFIG_ARCH_INTEGRATOR) := integrator machine-$(CONFIG_ARCH_IOP13XX) := iop13xx machine-$(CONFIG_ARCH_IOP32X) := iop32x machine-$(CONFIG_ARCH_IOP33X) := iop33x -machine-$(CONFIG_ARCH_IXP2000) := ixp2000 -machine-$(CONFIG_ARCH_IXP23XX) := ixp23xx machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood machine-$(CONFIG_ARCH_KS8695) := ks8695 diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S index aa5ee49..6ab0599 100644 --- a/arch/arm/boot/compressed/head-xscale.S +++ b/arch/arm/boot/compressed/head-xscale.S @@ -32,10 +32,3 @@ __XScale_start: bic r0, r0, #0x1000 @ clear Icache mcr p15, 0, r0, c1, c0, 0 -#ifdef CONFIG_ARCH_IXP2000 - mov r1, #-1 - mov r0, #0xd6000000 - str r1, [r0, #0x14] - str r1, [r0, #0x18] -#endif - diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index 215816f..e8a4e58 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile @@ -11,7 +11,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o obj-$(CONFIG_SHARP_LOCOMO) += locomo.o obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o obj-$(CONFIG_SHARP_SCOOP) += scoop.o -obj-$(CONFIG_ARCH_IXP2000) += uengine.o -obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o [snip] The rest of the patch is just deleted files and too big to get thru the lists, so I cut it out. Rob ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] net: remove ixp2000 ethernet driver 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring @ 2012-04-04 1:34 ` Rob Herring 2012-04-04 10:20 ` Jeff Kirsher 2012-04-04 1:34 ` [PATCH 3/5] i2c: remove ixp2000 driver Rob Herring ` (4 subsequent siblings) 5 siblings, 1 reply; 14+ messages in thread From: Rob Herring @ 2012-04-04 1:34 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Jeff Kirsher, Jesse Brandeburg, Bruce Allan, Carolyn Wyborny, Don Skidmore, Greg Rose, Peter P Waskiewicz Jr, Alex Duyck, John Ronciak, netdev From: Rob Herring <rob.herring@calxeda.com> The platform is removed, so there are no users of this driver. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Cc: Jesse Brandeburg <jesse.brandeburg@intel.com> Cc: Bruce Allan <bruce.w.allan@intel.com> Cc: Carolyn Wyborny <carolyn.wyborny@intel.com> Cc: Don Skidmore <donald.c.skidmore@intel.com> Cc: Greg Rose <gregory.v.rose@intel.com> Cc: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Cc: Alex Duyck <alexander.h.duyck@intel.com> Cc: John Ronciak <john.ronciak@intel.com> Cc: netdev@vger.kernel.org --- MAINTAINERS | 6 - drivers/net/ethernet/intel/Kconfig | 2 +- drivers/net/ethernet/xscale/Kconfig | 6 +- drivers/net/ethernet/xscale/Makefile | 1 - drivers/net/ethernet/xscale/ixp2000/Kconfig | 6 - drivers/net/ethernet/xscale/ixp2000/Makefile | 3 - drivers/net/ethernet/xscale/ixp2000/caleb.c | 136 ------ drivers/net/ethernet/xscale/ixp2000/caleb.h | 22 - drivers/net/ethernet/xscale/ixp2000/enp2611.c | 232 ----------- drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c | 212 ---------- drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h | 115 ----- drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc | 408 ------------------ .../net/ethernet/xscale/ixp2000/ixp2400_rx.ucode | 130 ------ drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc | 272 ------------ .../net/ethernet/xscale/ixp2000/ixp2400_tx.ucode | 98 ----- drivers/net/ethernet/xscale/ixp2000/ixpdev.c | 437 -------------------- drivers/net/ethernet/xscale/ixp2000/ixpdev.h | 29 -- drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h | 57 --- drivers/net/ethernet/xscale/ixp2000/pm3386.c | 351 ---------------- drivers/net/ethernet/xscale/ixp2000/pm3386.h | 29 -- 20 files changed, 3 insertions(+), 2549 deletions(-) delete mode 100644 drivers/net/ethernet/xscale/ixp2000/Kconfig delete mode 100644 drivers/net/ethernet/xscale/ixp2000/Makefile delete mode 100644 drivers/net/ethernet/xscale/ixp2000/caleb.c delete mode 100644 drivers/net/ethernet/xscale/ixp2000/caleb.h delete mode 100644 drivers/net/ethernet/xscale/ixp2000/enp2611.c delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev.c delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev.h delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h delete mode 100644 drivers/net/ethernet/xscale/ixp2000/pm3386.c delete mode 100644 drivers/net/ethernet/xscale/ixp2000/pm3386.h diff --git a/MAINTAINERS b/MAINTAINERS index defc06a..3dfc27c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3503,12 +3503,6 @@ M: Deepak Saxena <dsaxena@plexity.net> S: Maintained F: drivers/char/hw_random/ixp4xx-rng.c -INTEL IXP2000 ETHERNET DRIVER -M: Lennert Buytenhek <kernel@wantstofly.org> -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/xscale/ixp2000/ - INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf) M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> M: Jesse Brandeburg <jesse.brandeburg@intel.com> diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig index 7621316..2d33898 100644 --- a/drivers/net/ethernet/intel/Kconfig +++ b/drivers/net/ethernet/intel/Kconfig @@ -7,7 +7,7 @@ config NET_VENDOR_INTEL default y depends on PCI || PCI_MSI || ISA || ISA_DMA_API || ARM || \ ARCH_ACORN || MCA || MCA_LEGACY || SNI_RM || SUN3 || \ - GSC || BVME6000 || MVME16x || ARCH_ENP2611 || \ + GSC || BVME6000 || MVME16x || \ (ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR) || \ EXPERIMENTAL ---help--- diff --git a/drivers/net/ethernet/xscale/Kconfig b/drivers/net/ethernet/xscale/Kconfig index cf67352..3f43101 100644 --- a/drivers/net/ethernet/xscale/Kconfig +++ b/drivers/net/ethernet/xscale/Kconfig @@ -5,8 +5,8 @@ config NET_VENDOR_XSCALE bool "Intel XScale IXP devices" default y - depends on NET_VENDOR_INTEL && ((ARM && ARCH_IXP4XX && \ - IXP4XX_NPE && IXP4XX_QMGR) || ARCH_ENP2611) + depends on NET_VENDOR_INTEL && (ARM && ARCH_IXP4XX && \ + IXP4XX_NPE && IXP4XX_QMGR) ---help--- If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available from @@ -27,6 +27,4 @@ config IXP4XX_ETH Say Y here if you want to use built-in Ethernet ports on IXP4xx processor. -source "drivers/net/ethernet/xscale/ixp2000/Kconfig" - endif # NET_VENDOR_XSCALE diff --git a/drivers/net/ethernet/xscale/Makefile b/drivers/net/ethernet/xscale/Makefile index b195b9d..abc3b03 100644 --- a/drivers/net/ethernet/xscale/Makefile +++ b/drivers/net/ethernet/xscale/Makefile @@ -2,5 +2,4 @@ # Makefile for the Intel XScale IXP device drivers. # -obj-$(CONFIG_ENP2611_MSF_NET) += ixp2000/ obj-$(CONFIG_IXP4XX_ETH) += ixp4xx_eth.o diff --git a/drivers/net/ethernet/xscale/ixp2000/Kconfig b/drivers/net/ethernet/xscale/ixp2000/Kconfig deleted file mode 100644 index 58dbc5b..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ -config ENP2611_MSF_NET - tristate "Radisys ENP2611 MSF network interface support" - depends on ARCH_ENP2611 - ---help--- - This is a driver for the MSF network interface unit in - the IXP2400 on the Radisys ENP2611 platform. diff --git a/drivers/net/ethernet/xscale/ixp2000/Makefile b/drivers/net/ethernet/xscale/ixp2000/Makefile deleted file mode 100644 index fd38351..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -obj-$(CONFIG_ENP2611_MSF_NET) += enp2611_mod.o - -enp2611_mod-objs := caleb.o enp2611.o ixp2400-msf.o ixpdev.o pm3386.o diff --git a/drivers/net/ethernet/xscale/ixp2000/caleb.c b/drivers/net/ethernet/xscale/ixp2000/caleb.c deleted file mode 100644 index 7dea5b9..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/caleb.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Helper functions for the SPI-3 bridge FPGA on the Radisys ENP2611 - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#include <linux/module.h> -#include <linux/delay.h> -#include <asm/io.h> -#include "caleb.h" - -#define CALEB_IDLO 0x00 -#define CALEB_IDHI 0x01 -#define CALEB_RID 0x02 -#define CALEB_RESET 0x03 -#define CALEB_INTREN0 0x04 -#define CALEB_INTREN1 0x05 -#define CALEB_INTRSTAT0 0x06 -#define CALEB_INTRSTAT1 0x07 -#define CALEB_PORTEN 0x08 -#define CALEB_BURST 0x09 -#define CALEB_PORTPAUS 0x0A -#define CALEB_PORTPAUSD 0x0B -#define CALEB_PHY0RX 0x10 -#define CALEB_PHY1RX 0x11 -#define CALEB_PHY0TX 0x12 -#define CALEB_PHY1TX 0x13 -#define CALEB_IXPRX_HI_CNTR 0x15 -#define CALEB_PHY0RX_HI_CNTR 0x16 -#define CALEB_PHY1RX_HI_CNTR 0x17 -#define CALEB_IXPRX_CNTR 0x18 -#define CALEB_PHY0RX_CNTR 0x19 -#define CALEB_PHY1RX_CNTR 0x1A -#define CALEB_IXPTX_CNTR 0x1B -#define CALEB_PHY0TX_CNTR 0x1C -#define CALEB_PHY1TX_CNTR 0x1D -#define CALEB_DEBUG0 0x1E -#define CALEB_DEBUG1 0x1F - - -static u8 caleb_reg_read(int reg) -{ - u8 value; - - value = *((volatile u8 *)(ENP2611_CALEB_VIRT_BASE + reg)); - -// printk(KERN_INFO "caleb_reg_read(%d) = %.2x\n", reg, value); - - return value; -} - -static void caleb_reg_write(int reg, u8 value) -{ - u8 dummy; - -// printk(KERN_INFO "caleb_reg_write(%d, %.2x)\n", reg, value); - - *((volatile u8 *)(ENP2611_CALEB_VIRT_BASE + reg)) = value; - - dummy = *((volatile u8 *)ENP2611_CALEB_VIRT_BASE); - __asm__ __volatile__("mov %0, %0" : "+r" (dummy)); -} - - -void caleb_reset(void) -{ - /* - * Perform a chip reset. - */ - caleb_reg_write(CALEB_RESET, 0x02); - udelay(1); - - /* - * Enable all interrupt sources. This is needed to get - * meaningful results out of the status bits (register 6 - * and 7.) - */ - caleb_reg_write(CALEB_INTREN0, 0xff); - caleb_reg_write(CALEB_INTREN1, 0x07); - - /* - * Set RX and TX FIFO thresholds to 1.5kb. - */ - caleb_reg_write(CALEB_PHY0RX, 0x11); - caleb_reg_write(CALEB_PHY1RX, 0x11); - caleb_reg_write(CALEB_PHY0TX, 0x11); - caleb_reg_write(CALEB_PHY1TX, 0x11); - - /* - * Program SPI-3 burst size. - */ - caleb_reg_write(CALEB_BURST, 0); // 64-byte RBUF mpackets -// caleb_reg_write(CALEB_BURST, 1); // 128-byte RBUF mpackets -// caleb_reg_write(CALEB_BURST, 2); // 256-byte RBUF mpackets -} - -void caleb_enable_rx(int port) -{ - u8 temp; - - temp = caleb_reg_read(CALEB_PORTEN); - temp |= 1 << port; - caleb_reg_write(CALEB_PORTEN, temp); -} - -void caleb_disable_rx(int port) -{ - u8 temp; - - temp = caleb_reg_read(CALEB_PORTEN); - temp &= ~(1 << port); - caleb_reg_write(CALEB_PORTEN, temp); -} - -void caleb_enable_tx(int port) -{ - u8 temp; - - temp = caleb_reg_read(CALEB_PORTEN); - temp |= 1 << (port + 4); - caleb_reg_write(CALEB_PORTEN, temp); -} - -void caleb_disable_tx(int port) -{ - u8 temp; - - temp = caleb_reg_read(CALEB_PORTEN); - temp &= ~(1 << (port + 4)); - caleb_reg_write(CALEB_PORTEN, temp); -} diff --git a/drivers/net/ethernet/xscale/ixp2000/caleb.h b/drivers/net/ethernet/xscale/ixp2000/caleb.h deleted file mode 100644 index e93a1ef..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/caleb.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Helper functions for the SPI-3 bridge FPGA on the Radisys ENP2611 - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#ifndef __CALEB_H -#define __CALEB_H - -void caleb_reset(void); -void caleb_enable_rx(int port); -void caleb_disable_rx(int port); -void caleb_enable_tx(int port); -void caleb_disable_tx(int port); - - -#endif diff --git a/drivers/net/ethernet/xscale/ixp2000/enp2611.c b/drivers/net/ethernet/xscale/ixp2000/enp2611.c deleted file mode 100644 index 34a6cfd..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/enp2611.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * IXP2400 MSF network device driver for the Radisys ENP2611 - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/init.h> -#include <linux/moduleparam.h> -#include <asm/hardware/uengine.h> -#include <asm/mach-types.h> -#include <asm/io.h> -#include "ixpdev.h" -#include "caleb.h" -#include "ixp2400-msf.h" -#include "pm3386.h" - -/*********************************************************************** - * The Radisys ENP2611 is a PCI form factor board with three SFP GBIC - * slots, connected via two PMC/Sierra 3386s and an SPI-3 bridge FPGA - * to the IXP2400. - * - * +-------------+ - * SFP GBIC #0 ---+ | +---------+ - * | PM3386 #0 +-------+ | - * SFP GBIC #1 ---+ | | "Caleb" | +---------+ - * +-------------+ | | | | - * | SPI-3 +---------+ IXP2400 | - * +-------------+ | bridge | | | - * SFP GBIC #2 ---+ | | FPGA | +---------+ - * | PM3386 #1 +-------+ | - * | | +---------+ - * +-------------+ - * ^ ^ ^ - * | 1.25Gbaud | 104MHz | 104MHz - * | SERDES ea. | SPI-3 ea. | SPI-3 - * - ***********************************************************************/ -static struct ixp2400_msf_parameters enp2611_msf_parameters = -{ - .rx_mode = IXP2400_RX_MODE_UTOPIA_POS | - IXP2400_RX_MODE_1x32 | - IXP2400_RX_MODE_MPHY | - IXP2400_RX_MODE_MPHY_32 | - IXP2400_RX_MODE_MPHY_POLLED_STATUS | - IXP2400_RX_MODE_MPHY_LEVEL3 | - IXP2400_RX_MODE_RBUF_SIZE_64, - - .rxclk01_multiplier = IXP2400_PLL_MULTIPLIER_16, - - .rx_poll_ports = 3, - - .rx_channel_mode = { - IXP2400_PORT_RX_MODE_MASTER | - IXP2400_PORT_RX_MODE_POS_PHY | - IXP2400_PORT_RX_MODE_POS_PHY_L3 | - IXP2400_PORT_RX_MODE_ODD_PARITY | - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_RX_MODE_MASTER | - IXP2400_PORT_RX_MODE_POS_PHY | - IXP2400_PORT_RX_MODE_POS_PHY_L3 | - IXP2400_PORT_RX_MODE_ODD_PARITY | - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_RX_MODE_MASTER | - IXP2400_PORT_RX_MODE_POS_PHY | - IXP2400_PORT_RX_MODE_POS_PHY_L3 | - IXP2400_PORT_RX_MODE_ODD_PARITY | - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_RX_MODE_MASTER | - IXP2400_PORT_RX_MODE_POS_PHY | - IXP2400_PORT_RX_MODE_POS_PHY_L3 | - IXP2400_PORT_RX_MODE_ODD_PARITY | - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE - }, - - .tx_mode = IXP2400_TX_MODE_UTOPIA_POS | - IXP2400_TX_MODE_1x32 | - IXP2400_TX_MODE_MPHY | - IXP2400_TX_MODE_MPHY_32 | - IXP2400_TX_MODE_MPHY_POLLED_STATUS | - IXP2400_TX_MODE_MPHY_LEVEL3 | - IXP2400_TX_MODE_TBUF_SIZE_64, - - .txclk01_multiplier = IXP2400_PLL_MULTIPLIER_16, - - .tx_poll_ports = 3, - - .tx_channel_mode = { - IXP2400_PORT_TX_MODE_MASTER | - IXP2400_PORT_TX_MODE_POS_PHY | - IXP2400_PORT_TX_MODE_ODD_PARITY | - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_TX_MODE_MASTER | - IXP2400_PORT_TX_MODE_POS_PHY | - IXP2400_PORT_TX_MODE_ODD_PARITY | - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_TX_MODE_MASTER | - IXP2400_PORT_TX_MODE_POS_PHY | - IXP2400_PORT_TX_MODE_ODD_PARITY | - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, - - IXP2400_PORT_TX_MODE_MASTER | - IXP2400_PORT_TX_MODE_POS_PHY | - IXP2400_PORT_TX_MODE_ODD_PARITY | - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE - } -}; - -static struct net_device *nds[3]; -static struct timer_list link_check_timer; - -/* @@@ Poll the SFP moddef0 line too. */ -/* @@@ Try to use the pm3386 DOOL interrupt as well. */ -static void enp2611_check_link_status(unsigned long __dummy) -{ - int i; - - for (i = 0; i < 3; i++) { - struct net_device *dev; - int status; - - dev = nds[i]; - if (dev == NULL) - continue; - - status = pm3386_is_link_up(i); - if (status && !netif_carrier_ok(dev)) { - /* @@@ Should report autonegotiation status. */ - printk(KERN_INFO "%s: NIC Link is Up\n", dev->name); - - pm3386_enable_tx(i); - caleb_enable_tx(i); - netif_carrier_on(dev); - } else if (!status && netif_carrier_ok(dev)) { - printk(KERN_INFO "%s: NIC Link is Down\n", dev->name); - - netif_carrier_off(dev); - caleb_disable_tx(i); - pm3386_disable_tx(i); - } - } - - link_check_timer.expires = jiffies + HZ / 10; - add_timer(&link_check_timer); -} - -static void enp2611_set_port_admin_status(int port, int up) -{ - if (up) { - caleb_enable_rx(port); - - pm3386_set_carrier(port, 1); - pm3386_enable_rx(port); - } else { - caleb_disable_tx(port); - pm3386_disable_tx(port); - /* @@@ Flush out pending packets. */ - pm3386_set_carrier(port, 0); - - pm3386_disable_rx(port); - caleb_disable_rx(port); - } -} - -static int __init enp2611_init_module(void) -{ - int ports; - int i; - - if (!machine_is_enp2611()) - return -ENODEV; - - caleb_reset(); - pm3386_reset(); - - ports = pm3386_port_count(); - for (i = 0; i < ports; i++) { - nds[i] = ixpdev_alloc(i, sizeof(struct ixpdev_priv)); - if (nds[i] == NULL) { - while (--i >= 0) - free_netdev(nds[i]); - return -ENOMEM; - } - - pm3386_init_port(i); - pm3386_get_mac(i, nds[i]->dev_addr); - } - - ixp2400_msf_init(&enp2611_msf_parameters); - - if (ixpdev_init(ports, nds, enp2611_set_port_admin_status)) { - for (i = 0; i < ports; i++) - if (nds[i]) - free_netdev(nds[i]); - return -EINVAL; - } - - init_timer(&link_check_timer); - link_check_timer.function = enp2611_check_link_status; - link_check_timer.expires = jiffies; - add_timer(&link_check_timer); - - return 0; -} - -static void __exit enp2611_cleanup_module(void) -{ - int i; - - del_timer_sync(&link_check_timer); - - ixpdev_deinit(); - for (i = 0; i < 3; i++) - free_netdev(nds[i]); -} - -module_init(enp2611_init_module); -module_exit(enp2611_cleanup_module); -MODULE_LICENSE("GPL"); diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c b/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c deleted file mode 100644 index f5ffd7e..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Generic library functions for the MSF (Media and Switch Fabric) unit - * found on the Intel IXP2400 network processor. - * - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - */ - -#include <linux/kernel.h> -#include <linux/init.h> -#include <mach/hardware.h> -#include <mach/ixp2000-regs.h> -#include <asm/delay.h> -#include <asm/io.h> -#include "ixp2400-msf.h" - -/* - * This is the Intel recommended PLL init procedure as described on - * page 340 of the IXP2400/IXP2800 Programmer's Reference Manual. - */ -static void ixp2400_pll_init(struct ixp2400_msf_parameters *mp) -{ - int rx_dual_clock; - int tx_dual_clock; - u32 value; - - /* - * If the RX mode is not 1x32, we have to enable both RX PLLs - * (#0 and #1.) The same thing for the TX direction. - */ - rx_dual_clock = !!(mp->rx_mode & IXP2400_RX_MODE_WIDTH_MASK); - tx_dual_clock = !!(mp->tx_mode & IXP2400_TX_MODE_WIDTH_MASK); - - /* - * Read initial value. - */ - value = ixp2000_reg_read(IXP2000_MSF_CLK_CNTRL); - - /* - * Put PLLs in powerdown and bypass mode. - */ - value |= 0x0000f0f0; - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); - - /* - * Set single or dual clock mode bits. - */ - value &= ~0x03000000; - value |= (rx_dual_clock << 24) | (tx_dual_clock << 25); - - /* - * Set multipliers. - */ - value &= ~0x00ff0000; - value |= mp->rxclk01_multiplier << 16; - value |= mp->rxclk23_multiplier << 18; - value |= mp->txclk01_multiplier << 20; - value |= mp->txclk23_multiplier << 22; - - /* - * And write value. - */ - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); - - /* - * Disable PLL bypass mode. - */ - value &= ~(0x00005000 | rx_dual_clock << 13 | tx_dual_clock << 15); - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); - - /* - * Turn on PLLs. - */ - value &= ~(0x00000050 | rx_dual_clock << 5 | tx_dual_clock << 7); - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); - - /* - * Wait for PLLs to lock. There are lock status bits, but IXP2400 - * erratum #65 says that these lock bits should not be relied upon - * as they might not accurately reflect the true state of the PLLs. - */ - udelay(100); -} - -/* - * Needed according to p480 of Programmer's Reference Manual. - */ -static void ixp2400_msf_free_rbuf_entries(struct ixp2400_msf_parameters *mp) -{ - int size_bits; - int i; - - /* - * Work around IXP2400 erratum #69 (silent RBUF-to-DRAM transfer - * corruption) in the Intel-recommended way: do not add the RBUF - * elements susceptible to corruption to the freelist. - */ - size_bits = mp->rx_mode & IXP2400_RX_MODE_RBUF_SIZE_MASK; - if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_64) { - for (i = 1; i < 128; i++) { - if (i == 9 || i == 18 || i == 27) - continue; - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); - } - } else if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_128) { - for (i = 1; i < 64; i++) { - if (i == 4 || i == 9 || i == 13) - continue; - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); - } - } else if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_256) { - for (i = 1; i < 32; i++) { - if (i == 2 || i == 4 || i == 6) - continue; - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); - } - } -} - -static u32 ixp2400_msf_valid_channels(u32 reg) -{ - u32 channels; - - channels = 0; - switch (reg & IXP2400_RX_MODE_WIDTH_MASK) { - case IXP2400_RX_MODE_1x32: - channels = 0x1; - if (reg & IXP2400_RX_MODE_MPHY && - !(reg & IXP2400_RX_MODE_MPHY_32)) - channels = 0xf; - break; - - case IXP2400_RX_MODE_2x16: - channels = 0x5; - break; - - case IXP2400_RX_MODE_4x8: - channels = 0xf; - break; - - case IXP2400_RX_MODE_1x16_2x8: - channels = 0xd; - break; - } - - return channels; -} - -static void ixp2400_msf_enable_rx(struct ixp2400_msf_parameters *mp) -{ - u32 value; - - value = ixp2000_reg_read(IXP2000_MSF_RX_CONTROL) & 0x0fffffff; - value |= ixp2400_msf_valid_channels(mp->rx_mode) << 28; - ixp2000_reg_write(IXP2000_MSF_RX_CONTROL, value); -} - -static void ixp2400_msf_enable_tx(struct ixp2400_msf_parameters *mp) -{ - u32 value; - - value = ixp2000_reg_read(IXP2000_MSF_TX_CONTROL) & 0x0fffffff; - value |= ixp2400_msf_valid_channels(mp->tx_mode) << 28; - ixp2000_reg_write(IXP2000_MSF_TX_CONTROL, value); -} - - -void ixp2400_msf_init(struct ixp2400_msf_parameters *mp) -{ - u32 value; - int i; - - /* - * Init the RX/TX PLLs based on the passed parameter block. - */ - ixp2400_pll_init(mp); - - /* - * Reset MSF. Bit 7 in IXP_RESET_0 resets the MSF. - */ - value = ixp2000_reg_read(IXP2000_RESET0); - ixp2000_reg_write(IXP2000_RESET0, value | 0x80); - ixp2000_reg_write(IXP2000_RESET0, value & ~0x80); - - /* - * Initialise the RX section. - */ - ixp2000_reg_write(IXP2000_MSF_RX_MPHY_POLL_LIMIT, mp->rx_poll_ports - 1); - ixp2000_reg_write(IXP2000_MSF_RX_CONTROL, mp->rx_mode); - for (i = 0; i < 4; i++) { - ixp2000_reg_write(IXP2000_MSF_RX_UP_CONTROL_0 + i, - mp->rx_channel_mode[i]); - } - ixp2400_msf_free_rbuf_entries(mp); - ixp2400_msf_enable_rx(mp); - - /* - * Initialise the TX section. - */ - ixp2000_reg_write(IXP2000_MSF_TX_MPHY_POLL_LIMIT, mp->tx_poll_ports - 1); - ixp2000_reg_write(IXP2000_MSF_TX_CONTROL, mp->tx_mode); - for (i = 0; i < 4; i++) { - ixp2000_reg_write(IXP2000_MSF_TX_UP_CONTROL_0 + i, - mp->tx_channel_mode[i]); - } - ixp2400_msf_enable_tx(mp); -} diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h b/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h deleted file mode 100644 index 3ac1af2..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Generic library functions for the MSF (Media and Switch Fabric) unit - * found on the Intel IXP2400 network processor. - * - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - */ - -#ifndef __IXP2400_MSF_H -#define __IXP2400_MSF_H - -struct ixp2400_msf_parameters -{ - u32 rx_mode; - unsigned rxclk01_multiplier:2; - unsigned rxclk23_multiplier:2; - unsigned rx_poll_ports:6; - u32 rx_channel_mode[4]; - - u32 tx_mode; - unsigned txclk01_multiplier:2; - unsigned txclk23_multiplier:2; - unsigned tx_poll_ports:6; - u32 tx_channel_mode[4]; -}; - -void ixp2400_msf_init(struct ixp2400_msf_parameters *mp); - -#define IXP2400_PLL_MULTIPLIER_48 0x00 -#define IXP2400_PLL_MULTIPLIER_24 0x01 -#define IXP2400_PLL_MULTIPLIER_16 0x02 -#define IXP2400_PLL_MULTIPLIER_12 0x03 - -#define IXP2400_RX_MODE_CSIX 0x00400000 -#define IXP2400_RX_MODE_UTOPIA_POS 0x00000000 -#define IXP2400_RX_MODE_WIDTH_MASK 0x00300000 -#define IXP2400_RX_MODE_1x16_2x8 0x00300000 -#define IXP2400_RX_MODE_4x8 0x00200000 -#define IXP2400_RX_MODE_2x16 0x00100000 -#define IXP2400_RX_MODE_1x32 0x00000000 -#define IXP2400_RX_MODE_MPHY 0x00080000 -#define IXP2400_RX_MODE_SPHY 0x00000000 -#define IXP2400_RX_MODE_MPHY_32 0x00040000 -#define IXP2400_RX_MODE_MPHY_4 0x00000000 -#define IXP2400_RX_MODE_MPHY_POLLED_STATUS 0x00020000 -#define IXP2400_RX_MODE_MPHY_DIRECT_STATUS 0x00000000 -#define IXP2400_RX_MODE_CBUS_FULL_DUPLEX 0x00010000 -#define IXP2400_RX_MODE_CBUS_SIMPLEX 0x00000000 -#define IXP2400_RX_MODE_MPHY_LEVEL2 0x00004000 -#define IXP2400_RX_MODE_MPHY_LEVEL3 0x00000000 -#define IXP2400_RX_MODE_CBUS_8BIT 0x00002000 -#define IXP2400_RX_MODE_CBUS_4BIT 0x00000000 -#define IXP2400_RX_MODE_CSIX_SINGLE_FREELIST 0x00000200 -#define IXP2400_RX_MODE_CSIX_SPLIT_FREELISTS 0x00000000 -#define IXP2400_RX_MODE_RBUF_SIZE_MASK 0x0000000c -#define IXP2400_RX_MODE_RBUF_SIZE_256 0x00000008 -#define IXP2400_RX_MODE_RBUF_SIZE_128 0x00000004 -#define IXP2400_RX_MODE_RBUF_SIZE_64 0x00000000 - -#define IXP2400_PORT_RX_MODE_SLAVE 0x00000040 -#define IXP2400_PORT_RX_MODE_MASTER 0x00000000 -#define IXP2400_PORT_RX_MODE_POS_PHY_L3 0x00000020 -#define IXP2400_PORT_RX_MODE_POS_PHY_L2 0x00000000 -#define IXP2400_PORT_RX_MODE_POS_PHY 0x00000010 -#define IXP2400_PORT_RX_MODE_UTOPIA 0x00000000 -#define IXP2400_PORT_RX_MODE_EVEN_PARITY 0x0000000c -#define IXP2400_PORT_RX_MODE_ODD_PARITY 0x00000008 -#define IXP2400_PORT_RX_MODE_NO_PARITY 0x00000000 -#define IXP2400_PORT_RX_MODE_UTOPIA_BIG_CELLS 0x00000002 -#define IXP2400_PORT_RX_MODE_UTOPIA_NORMAL_CELLS 0x00000000 -#define IXP2400_PORT_RX_MODE_2_CYCLE_DECODE 0x00000001 -#define IXP2400_PORT_RX_MODE_1_CYCLE_DECODE 0x00000000 - -#define IXP2400_TX_MODE_CSIX 0x00400000 -#define IXP2400_TX_MODE_UTOPIA_POS 0x00000000 -#define IXP2400_TX_MODE_WIDTH_MASK 0x00300000 -#define IXP2400_TX_MODE_1x16_2x8 0x00300000 -#define IXP2400_TX_MODE_4x8 0x00200000 -#define IXP2400_TX_MODE_2x16 0x00100000 -#define IXP2400_TX_MODE_1x32 0x00000000 -#define IXP2400_TX_MODE_MPHY 0x00080000 -#define IXP2400_TX_MODE_SPHY 0x00000000 -#define IXP2400_TX_MODE_MPHY_32 0x00040000 -#define IXP2400_TX_MODE_MPHY_4 0x00000000 -#define IXP2400_TX_MODE_MPHY_POLLED_STATUS 0x00020000 -#define IXP2400_TX_MODE_MPHY_DIRECT_STATUS 0x00000000 -#define IXP2400_TX_MODE_CBUS_FULL_DUPLEX 0x00010000 -#define IXP2400_TX_MODE_CBUS_SIMPLEX 0x00000000 -#define IXP2400_TX_MODE_MPHY_LEVEL2 0x00004000 -#define IXP2400_TX_MODE_MPHY_LEVEL3 0x00000000 -#define IXP2400_TX_MODE_CBUS_8BIT 0x00002000 -#define IXP2400_TX_MODE_CBUS_4BIT 0x00000000 -#define IXP2400_TX_MODE_TBUF_SIZE_MASK 0x0000000c -#define IXP2400_TX_MODE_TBUF_SIZE_256 0x00000008 -#define IXP2400_TX_MODE_TBUF_SIZE_128 0x00000004 -#define IXP2400_TX_MODE_TBUF_SIZE_64 0x00000000 - -#define IXP2400_PORT_TX_MODE_SLAVE 0x00000040 -#define IXP2400_PORT_TX_MODE_MASTER 0x00000000 -#define IXP2400_PORT_TX_MODE_POS_PHY 0x00000010 -#define IXP2400_PORT_TX_MODE_UTOPIA 0x00000000 -#define IXP2400_PORT_TX_MODE_EVEN_PARITY 0x0000000c -#define IXP2400_PORT_TX_MODE_ODD_PARITY 0x00000008 -#define IXP2400_PORT_TX_MODE_NO_PARITY 0x00000000 -#define IXP2400_PORT_TX_MODE_UTOPIA_BIG_CELLS 0x00000002 -#define IXP2400_PORT_TX_MODE_2_CYCLE_DECODE 0x00000001 -#define IXP2400_PORT_TX_MODE_1_CYCLE_DECODE 0x00000000 - - -#endif diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc b/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc deleted file mode 100644 index 42a73e3..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc +++ /dev/null @@ -1,408 +0,0 @@ -/* - * RX ucode for the Intel IXP2400 in POS-PHY mode. - * Copyright (C) 2004, 2005 Lennert Buytenhek - * Dedicated to Marija Kulikova. - * - * 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. - * - * Assumptions made in this code: - * - The IXP2400 MSF is configured for POS-PHY mode, in a mode where - * only one full element list is used. This includes, for example, - * 1x32 SPHY and 1x32 MPHY32, but not 4x8 SPHY or 1x32 MPHY4. (This - * is not an exhaustive list.) - * - The RBUF uses 64-byte mpackets. - * - RX descriptors reside in SRAM, and have the following format: - * struct rx_desc - * { - * // to uengine - * u32 buf_phys_addr; - * u32 buf_length; - * - * // from uengine - * u32 channel; - * u32 pkt_length; - * }; - * - Packet data resides in DRAM. - * - Packet buffer addresses are 8-byte aligned. - * - Scratch ring 0 is rx_pending. - * - Scratch ring 1 is rx_done, and has status condition 'full'. - * - The host triggers rx_done flush and rx_pending refill on seeing INTA. - * - This code is run on all eight threads of the microengine it runs on. - * - * Local memory is used for per-channel RX state. - */ - -#define RX_THREAD_FREELIST_0 0x0030 -#define RBUF_ELEMENT_DONE 0x0044 - -#define CHANNEL_FLAGS *l$index0[0] -#define CHANNEL_FLAG_RECEIVING 1 -#define PACKET_LENGTH *l$index0[1] -#define PACKET_CHECKSUM *l$index0[2] -#define BUFFER_HANDLE *l$index0[3] -#define BUFFER_START *l$index0[4] -#define BUFFER_LENGTH *l$index0[5] - -#define CHANNEL_STATE_SIZE 24 // in bytes -#define CHANNEL_STATE_SHIFT 5 // ceil(log2(state size)) - - - .sig volatile sig1 - .sig volatile sig2 - .sig volatile sig3 - - .sig mpacket_arrived - .reg add_to_rx_freelist - .reg read $rsw0, $rsw1 - .xfer_order $rsw0 $rsw1 - - .reg zero - - /* - * Initialise add_to_rx_freelist. - */ - .begin - .reg temp - .reg temp2 - - immed[add_to_rx_freelist, RX_THREAD_FREELIST_0] - immed_w1[add_to_rx_freelist, (&$rsw0 | (&mpacket_arrived << 12))] - - local_csr_rd[ACTIVE_CTX_STS] - immed[temp, 0] - alu[temp2, temp, and, 0x1f] - alu_shf[add_to_rx_freelist, add_to_rx_freelist, or, temp2, <<20] - alu[temp2, temp, and, 0x80] - alu_shf[add_to_rx_freelist, add_to_rx_freelist, or, temp2, <<18] - .end - - immed[zero, 0] - - /* - * Skip context 0 initialisation? - */ - .begin - br!=ctx[0, mpacket_receive_loop#] - .end - - /* - * Initialise local memory. - */ - .begin - .reg addr - .reg temp - - immed[temp, 0] - init_local_mem_loop#: - alu_shf[addr, --, b, temp, <<CHANNEL_STATE_SHIFT] - local_csr_wr[ACTIVE_LM_ADDR_0, addr] - nop - nop - nop - - immed[CHANNEL_FLAGS, 0] - - alu[temp, temp, +, 1] - alu[--, temp, and, 0x20] - beq[init_local_mem_loop#] - .end - - /* - * Initialise signal pipeline. - */ - .begin - local_csr_wr[SAME_ME_SIGNAL, (&sig1 << 3)] - .set_sig sig1 - - local_csr_wr[SAME_ME_SIGNAL, (&sig2 << 3)] - .set_sig sig2 - - local_csr_wr[SAME_ME_SIGNAL, (&sig3 << 3)] - .set_sig sig3 - .end - -mpacket_receive_loop#: - /* - * Synchronise and wait for mpacket. - */ - .begin - ctx_arb[sig1] - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig1 << 3))] - - msf[fast_wr, --, add_to_rx_freelist, 0] - .set_sig mpacket_arrived - ctx_arb[mpacket_arrived] - .set $rsw0 $rsw1 - .end - - /* - * We halt if we see {inbparerr,parerr,null,soperror}. - */ - .begin - alu_shf[--, 0x1b, and, $rsw0, >>8] - bne[abort_rswerr#] - .end - - /* - * Point local memory pointer to this channel's state area. - */ - .begin - .reg chanaddr - - alu[chanaddr, $rsw0, and, 0x1f] - alu_shf[chanaddr, --, b, chanaddr, <<CHANNEL_STATE_SHIFT] - local_csr_wr[ACTIVE_LM_ADDR_0, chanaddr] - nop - nop - nop - .end - - /* - * Check whether we received a SOP mpacket while we were already - * working on a packet, or a non-SOP mpacket while there was no - * packet pending. (SOP == RECEIVING -> abort) If everything's - * okay, update the RECEIVING flag to reflect our new state. - */ - .begin - .reg temp - .reg eop - - #if CHANNEL_FLAG_RECEIVING != 1 - #error CHANNEL_FLAG_RECEIVING is not 1 - #endif - - alu_shf[temp, 1, and, $rsw0, >>15] - alu[temp, temp, xor, CHANNEL_FLAGS] - alu[--, temp, and, CHANNEL_FLAG_RECEIVING] - beq[abort_proterr#] - - alu_shf[eop, 1, and, $rsw0, >>14] - alu[CHANNEL_FLAGS, temp, xor, eop] - .end - - /* - * Copy the mpacket into the right spot, and in case of EOP, - * write back the descriptor and pass the packet on. - */ - .begin - .reg buffer_offset - .reg _packet_length - .reg _packet_checksum - .reg _buffer_handle - .reg _buffer_start - .reg _buffer_length - - /* - * Determine buffer_offset, _packet_length and - * _packet_checksum. - */ - .begin - .reg temp - - alu[--, 1, and, $rsw0, >>15] - beq[not_sop#] - - immed[PACKET_LENGTH, 0] - immed[PACKET_CHECKSUM, 0] - - not_sop#: - alu[buffer_offset, --, b, PACKET_LENGTH] - alu_shf[temp, 0xff, and, $rsw0, >>16] - alu[_packet_length, buffer_offset, +, temp] - alu[PACKET_LENGTH, --, b, _packet_length] - - immed[temp, 0xffff] - alu[temp, $rsw1, and, temp] - alu[_packet_checksum, PACKET_CHECKSUM, +, temp] - alu[PACKET_CHECKSUM, --, b, _packet_checksum] - .end - - /* - * Allocate buffer in case of SOP. - */ - .begin - .reg temp - - alu[temp, 1, and, $rsw0, >>15] - beq[skip_buffer_alloc#] - - .begin - .sig zzz - .reg read $stemp $stemp2 - .xfer_order $stemp $stemp2 - - rx_nobufs#: - scratch[get, $stemp, zero, 0, 1], ctx_swap[zzz] - alu[_buffer_handle, --, b, $stemp] - beq[rx_nobufs#] - - sram[read, $stemp, _buffer_handle, 0, 2], - ctx_swap[zzz] - alu[_buffer_start, --, b, $stemp] - alu[_buffer_length, --, b, $stemp2] - .end - - skip_buffer_alloc#: - .end - - /* - * Resynchronise. - */ - .begin - ctx_arb[sig2] - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig2 << 3))] - .end - - /* - * Synchronise buffer state. - */ - .begin - .reg temp - - alu[temp, 1, and, $rsw0, >>15] - beq[copy_from_local_mem#] - - alu[BUFFER_HANDLE, --, b, _buffer_handle] - alu[BUFFER_START, --, b, _buffer_start] - alu[BUFFER_LENGTH, --, b, _buffer_length] - br[sync_state_done#] - - copy_from_local_mem#: - alu[_buffer_handle, --, b, BUFFER_HANDLE] - alu[_buffer_start, --, b, BUFFER_START] - alu[_buffer_length, --, b, BUFFER_LENGTH] - - sync_state_done#: - .end - -#if 0 - /* - * Debug buffer state management. - */ - .begin - .reg temp - - alu[temp, 1, and, $rsw0, >>14] - beq[no_poison#] - immed[BUFFER_HANDLE, 0xdead] - immed[BUFFER_START, 0xdead] - immed[BUFFER_LENGTH, 0xdead] - no_poison#: - - immed[temp, 0xdead] - alu[--, _buffer_handle, -, temp] - beq[state_corrupted#] - alu[--, _buffer_start, -, temp] - beq[state_corrupted#] - alu[--, _buffer_length, -, temp] - beq[state_corrupted#] - .end -#endif - - /* - * Check buffer length. - */ - .begin - alu[--, _buffer_length, -, _packet_length] - blo[buffer_overflow#] - .end - - /* - * Copy the mpacket and give back the RBUF element. - */ - .begin - .reg element - .reg xfer_size - .reg temp - .sig copy_sig - - alu_shf[element, 0x7f, and, $rsw0, >>24] - alu_shf[xfer_size, 0xff, and, $rsw0, >>16] - - alu[xfer_size, xfer_size, -, 1] - alu_shf[xfer_size, 0x10, or, xfer_size, >>3] - alu_shf[temp, 0x10, or, xfer_size, <<21] - alu_shf[temp, temp, or, element, <<11] - alu_shf[--, temp, or, 1, <<18] - - dram[rbuf_rd, --, _buffer_start, buffer_offset, max_8], - indirect_ref, sig_done[copy_sig] - ctx_arb[copy_sig] - - alu[temp, RBUF_ELEMENT_DONE, or, element, <<16] - msf[fast_wr, --, temp, 0] - .end - - /* - * If EOP, write back the packet descriptor. - */ - .begin - .reg write $stemp $stemp2 - .xfer_order $stemp $stemp2 - .sig zzz - - alu_shf[--, 1, and, $rsw0, >>14] - beq[no_writeback#] - - alu[$stemp, $rsw0, and, 0x1f] - alu[$stemp2, --, b, _packet_length] - sram[write, $stemp, _buffer_handle, 8, 2], ctx_swap[zzz] - - no_writeback#: - .end - - /* - * Resynchronise. - */ - .begin - ctx_arb[sig3] - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig3 << 3))] - .end - - /* - * If EOP, put the buffer back onto the scratch ring. - */ - .begin - .reg write $stemp - .sig zzz - - br_inp_state[SCR_Ring1_Status, rx_done_ring_overflow#] - - alu_shf[--, 1, and, $rsw0, >>14] - beq[mpacket_receive_loop#] - - alu[--, 1, and, $rsw0, >>10] - bne[rxerr#] - - alu[$stemp, --, b, _buffer_handle] - scratch[put, $stemp, zero, 4, 1], ctx_swap[zzz] - cap[fast_wr, 0, XSCALE_INT_A] - br[mpacket_receive_loop#] - - rxerr#: - alu[$stemp, --, b, _buffer_handle] - scratch[put, $stemp, zero, 0, 1], ctx_swap[zzz] - br[mpacket_receive_loop#] - .end - .end - - -abort_rswerr#: - halt - -abort_proterr#: - halt - -state_corrupted#: - halt - -buffer_overflow#: - halt - -rx_done_ring_overflow#: - halt - - diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode b/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode deleted file mode 100644 index e8aee2f..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode +++ /dev/null @@ -1,130 +0,0 @@ -static struct ixp2000_uengine_code ixp2400_rx = -{ - .cpu_model_bitmask = 0x000003fe, - .cpu_min_revision = 0, - .cpu_max_revision = 255, - - .uengine_parameters = IXP2000_UENGINE_8_CONTEXTS | - IXP2000_UENGINE_PRN_UPDATE_EVERY | - IXP2000_UENGINE_NN_FROM_PREVIOUS | - IXP2000_UENGINE_ASSERT_EMPTY_AT_0 | - IXP2000_UENGINE_LM_ADDR1_PER_CONTEXT | - IXP2000_UENGINE_LM_ADDR0_PER_CONTEXT, - - .initial_reg_values = (struct ixp2000_reg_value []) { - { -1, -1 } - }, - - .num_insns = 109, - .insns = (u8 []) { - 0xf0, 0x00, 0x0c, 0xc0, 0x05, - 0xf4, 0x44, 0x0c, 0x00, 0x05, - 0xfc, 0x04, 0x4c, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x3b, 0x00, - 0xb4, 0x40, 0xf0, 0x3b, 0x1f, - 0x8a, 0xc0, 0x50, 0x3e, 0x05, - 0xb4, 0x40, 0xf0, 0x3b, 0x80, - 0x9a, 0xe0, 0x00, 0x3e, 0x05, - 0xf0, 0x00, 0x00, 0x07, 0x00, - 0xd8, 0x05, 0xc0, 0x00, 0x11, - 0xf0, 0x00, 0x00, 0x0f, 0x00, - 0x91, 0xb0, 0x20, 0x0e, 0x00, - 0xfc, 0x06, 0x60, 0x0b, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0xf0, 0x00, 0x0c, 0x02, 0x00, - 0xb0, 0xc0, 0x30, 0x0f, 0x01, - 0xa4, 0x70, 0x00, 0x0f, 0x20, - 0xd8, 0x02, 0xc0, 0x01, 0x00, - 0xfc, 0x10, 0xac, 0x23, 0x08, - 0xfc, 0x10, 0xac, 0x43, 0x10, - 0xfc, 0x10, 0xac, 0x63, 0x18, - 0xe0, 0x00, 0x00, 0x00, 0x02, - 0xfc, 0x10, 0xae, 0x23, 0x88, - 0x3d, 0x00, 0x04, 0x03, 0x20, - 0xe0, 0x00, 0x00, 0x00, 0x10, - 0x84, 0x82, 0x02, 0x01, 0x3b, - 0xd8, 0x1a, 0x00, 0x01, 0x01, - 0xb4, 0x00, 0x8c, 0x7d, 0x80, - 0x91, 0xb0, 0x80, 0x22, 0x00, - 0xfc, 0x06, 0x60, 0x23, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0xf0, 0x00, 0x0c, 0x03, 0x00, - 0x94, 0xf0, 0x92, 0x01, 0x21, - 0xac, 0x40, 0x60, 0x26, 0x00, - 0xa4, 0x30, 0x0c, 0x04, 0x06, - 0xd8, 0x1a, 0x40, 0x01, 0x00, - 0x94, 0xe0, 0xa2, 0x01, 0x21, - 0xac, 0x20, 0x00, 0x28, 0x06, - 0x84, 0xf2, 0x02, 0x01, 0x21, - 0xd8, 0x0b, 0x40, 0x01, 0x00, - 0xf0, 0x00, 0x0c, 0x02, 0x01, - 0xf0, 0x00, 0x0c, 0x02, 0x02, - 0xa0, 0x00, 0x08, 0x04, 0x00, - 0x95, 0x00, 0xc6, 0x01, 0xff, - 0xa0, 0x80, 0x10, 0x30, 0x00, - 0xa0, 0x60, 0x1c, 0x00, 0x01, - 0xf0, 0x0f, 0xf0, 0x33, 0xff, - 0xb4, 0x00, 0xc0, 0x31, 0x81, - 0xb0, 0x80, 0xb0, 0x32, 0x02, - 0xa0, 0x20, 0x20, 0x2c, 0x00, - 0x94, 0xf0, 0xd2, 0x01, 0x21, - 0xd8, 0x0f, 0x40, 0x01, 0x00, - 0x19, 0x40, 0x10, 0x04, 0x20, - 0xa0, 0x00, 0x26, 0x04, 0x00, - 0xd8, 0x0d, 0xc0, 0x01, 0x00, - 0x00, 0x42, 0x10, 0x80, 0x02, - 0xb0, 0x00, 0x46, 0x04, 0x00, - 0xb0, 0x00, 0x56, 0x08, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x04, - 0xfc, 0x10, 0xae, 0x43, 0x90, - 0x84, 0xf0, 0x32, 0x01, 0x21, - 0xd8, 0x11, 0x40, 0x01, 0x00, - 0xa0, 0x60, 0x3c, 0x00, 0x02, - 0xa0, 0x20, 0x40, 0x10, 0x00, - 0xa0, 0x20, 0x50, 0x14, 0x00, - 0xd8, 0x12, 0x00, 0x00, 0x18, - 0xa0, 0x00, 0x28, 0x0c, 0x00, - 0xb0, 0x00, 0x48, 0x10, 0x00, - 0xb0, 0x00, 0x58, 0x14, 0x00, - 0xaa, 0xf0, 0x00, 0x14, 0x01, - 0xd8, 0x1a, 0xc0, 0x01, 0x05, - 0x85, 0x80, 0x42, 0x01, 0xff, - 0x95, 0x00, 0x66, 0x01, 0xff, - 0xba, 0xc0, 0x60, 0x1b, 0x01, - 0x9a, 0x30, 0x60, 0x19, 0x30, - 0x9a, 0xb0, 0x70, 0x1a, 0x30, - 0x9b, 0x50, 0x78, 0x1e, 0x04, - 0x8a, 0xe2, 0x08, 0x1e, 0x21, - 0x6a, 0x4e, 0x00, 0x13, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x30, - 0x9b, 0x00, 0x7a, 0x92, 0x04, - 0x3d, 0x00, 0x04, 0x1f, 0x20, - 0x84, 0xe2, 0x02, 0x01, 0x21, - 0xd8, 0x16, 0x80, 0x01, 0x00, - 0xa4, 0x18, 0x0c, 0x7d, 0x80, - 0xa0, 0x58, 0x1c, 0x00, 0x01, - 0x01, 0x42, 0x00, 0xa0, 0x02, - 0xe0, 0x00, 0x00, 0x00, 0x08, - 0xfc, 0x10, 0xae, 0x63, 0x98, - 0xd8, 0x1b, 0x00, 0xc2, 0x14, - 0x84, 0xe2, 0x02, 0x01, 0x21, - 0xd8, 0x05, 0xc0, 0x01, 0x00, - 0x84, 0xa2, 0x02, 0x01, 0x21, - 0xd8, 0x19, 0x40, 0x01, 0x01, - 0xa0, 0x58, 0x0c, 0x00, 0x02, - 0x1a, 0x40, 0x00, 0x04, 0x24, - 0x33, 0x00, 0x01, 0x2f, 0x20, - 0xd8, 0x05, 0xc0, 0x00, 0x18, - 0xa0, 0x58, 0x0c, 0x00, 0x02, - 0x1a, 0x40, 0x00, 0x04, 0x20, - 0xd8, 0x05, 0xc0, 0x00, 0x18, - 0xe0, 0x00, 0x02, 0x00, 0x00, - 0xe0, 0x00, 0x02, 0x00, 0x00, - 0xe0, 0x00, 0x02, 0x00, 0x00, - 0xe0, 0x00, 0x02, 0x00, 0x00, - 0xe0, 0x00, 0x02, 0x00, 0x00, - } -}; diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc b/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc deleted file mode 100644 index d090d18..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc +++ /dev/null @@ -1,272 +0,0 @@ -/* - * TX ucode for the Intel IXP2400 in POS-PHY mode. - * Copyright (C) 2004, 2005 Lennert Buytenhek - * Dedicated to Marija Kulikova. - * - * 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. - * - * Assumptions made in this code: - * - The IXP2400 MSF is configured for POS-PHY mode, in a mode where - * only one TBUF partition is used. This includes, for example, - * 1x32 SPHY and 1x32 MPHY32, but not 4x8 SPHY or 1x32 MPHY4. (This - * is not an exhaustive list.) - * - The TBUF uses 64-byte mpackets. - * - TX descriptors reside in SRAM, and have the following format: - * struct tx_desc - * { - * // to uengine - * u32 buf_phys_addr; - * u32 pkt_length; - * u32 channel; - * }; - * - Packet data resides in DRAM. - * - Packet buffer addresses are 8-byte aligned. - * - Scratch ring 2 is tx_pending. - * - Scratch ring 3 is tx_done, and has status condition 'full'. - * - This code is run on all eight threads of the microengine it runs on. - */ - -#define TX_SEQUENCE_0 0x0060 -#define TBUF_CTRL 0x1800 - -#define PARTITION_SIZE 128 -#define PARTITION_THRESH 96 - - - .sig volatile sig1 - .sig volatile sig2 - .sig volatile sig3 - - .reg @old_tx_seq_0 - .reg @mpkts_in_flight - .reg @next_tbuf_mpacket - - .reg @buffer_handle - .reg @buffer_start - .reg @packet_length - .reg @channel - .reg @packet_offset - - .reg zero - - immed[zero, 0] - - /* - * Skip context 0 initialisation? - */ - .begin - br!=ctx[0, mpacket_tx_loop#] - .end - - /* - * Wait until all pending TBUF elements have been transmitted. - */ - .begin - .reg read $tx - .sig zzz - - loop_empty#: - msf[read, $tx, zero, TX_SEQUENCE_0, 1], ctx_swap[zzz] - alu_shf[--, --, b, $tx, >>31] - beq[loop_empty#] - - alu[@old_tx_seq_0, --, b, $tx] - .end - - immed[@mpkts_in_flight, 0] - alu[@next_tbuf_mpacket, @old_tx_seq_0, and, (PARTITION_SIZE - 1)] - - immed[@buffer_handle, 0] - - /* - * Initialise signal pipeline. - */ - .begin - local_csr_wr[SAME_ME_SIGNAL, (&sig1 << 3)] - .set_sig sig1 - - local_csr_wr[SAME_ME_SIGNAL, (&sig2 << 3)] - .set_sig sig2 - - local_csr_wr[SAME_ME_SIGNAL, (&sig3 << 3)] - .set_sig sig3 - .end - -mpacket_tx_loop#: - .begin - .reg tbuf_element_index - .reg buffer_handle - .reg sop_eop - .reg packet_data - .reg channel - .reg mpacket_size - - /* - * If there is no packet currently being transmitted, - * dequeue the next TX descriptor, and fetch the buffer - * address, packet length and destination channel number. - */ - .begin - .reg read $stemp $stemp2 $stemp3 - .xfer_order $stemp $stemp2 $stemp3 - .sig zzz - - ctx_arb[sig1] - - alu[--, --, b, @buffer_handle] - bne[already_got_packet#] - - tx_nobufs#: - scratch[get, $stemp, zero, 8, 1], ctx_swap[zzz] - alu[@buffer_handle, --, b, $stemp] - beq[tx_nobufs#] - - sram[read, $stemp, $stemp, 0, 3], ctx_swap[zzz] - alu[@buffer_start, --, b, $stemp] - alu[@packet_length, --, b, $stemp2] - beq[zero_byte_packet#] - alu[@channel, --, b, $stemp3] - immed[@packet_offset, 0] - - already_got_packet#: - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig1 << 3))] - .end - - /* - * Determine tbuf element index, SOP/EOP flags, mpacket - * offset and mpacket size and cache buffer_handle and - * channel number. - */ - .begin - alu[tbuf_element_index, --, b, @next_tbuf_mpacket] - alu[@next_tbuf_mpacket, @next_tbuf_mpacket, +, 1] - alu[@next_tbuf_mpacket, @next_tbuf_mpacket, and, - (PARTITION_SIZE - 1)] - - alu[buffer_handle, --, b, @buffer_handle] - immed[@buffer_handle, 0] - - immed[sop_eop, 1] - - alu[packet_data, --, b, @packet_offset] - bne[no_sop#] - alu[sop_eop, sop_eop, or, 2] - no_sop#: - alu[packet_data, packet_data, +, @buffer_start] - - alu[channel, --, b, @channel] - - alu[mpacket_size, @packet_length, -, @packet_offset] - alu[--, 64, -, mpacket_size] - bhs[eop#] - alu[@buffer_handle, --, b, buffer_handle] - immed[mpacket_size, 64] - alu[sop_eop, sop_eop, and, 2] - eop#: - - alu[@packet_offset, @packet_offset, +, mpacket_size] - .end - - /* - * Wait until there's enough space in the TBUF. - */ - .begin - .reg read $tx - .reg temp - .sig zzz - - ctx_arb[sig2] - - br[test_space#] - - loop_space#: - msf[read, $tx, zero, TX_SEQUENCE_0, 1], ctx_swap[zzz] - - alu[temp, $tx, -, @old_tx_seq_0] - alu[temp, temp, and, 0xff] - alu[@mpkts_in_flight, @mpkts_in_flight, -, temp] - - alu[@old_tx_seq_0, --, b, $tx] - - test_space#: - alu[--, PARTITION_THRESH, -, @mpkts_in_flight] - blo[loop_space#] - - alu[@mpkts_in_flight, @mpkts_in_flight, +, 1] - - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig2 << 3))] - .end - - /* - * Copy the packet data to the TBUF. - */ - .begin - .reg temp - .sig copy_sig - - alu[temp, mpacket_size, -, 1] - alu_shf[temp, 0x10, or, temp, >>3] - alu_shf[temp, 0x10, or, temp, <<21] - alu_shf[temp, temp, or, tbuf_element_index, <<11] - alu_shf[--, temp, or, 1, <<18] - - dram[tbuf_wr, --, packet_data, 0, max_8], - indirect_ref, sig_done[copy_sig] - ctx_arb[copy_sig] - .end - - /* - * Mark TBUF element as ready-to-be-transmitted. - */ - .begin - .reg write $tsw $tsw2 - .xfer_order $tsw $tsw2 - .reg temp - .sig zzz - - alu_shf[temp, channel, or, mpacket_size, <<24] - alu_shf[$tsw, temp, or, sop_eop, <<8] - immed[$tsw2, 0] - - immed[temp, TBUF_CTRL] - alu_shf[temp, temp, or, tbuf_element_index, <<3] - msf[write, $tsw, temp, 0, 2], ctx_swap[zzz] - .end - - /* - * Resynchronise. - */ - .begin - ctx_arb[sig3] - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig3 << 3))] - .end - - /* - * If this was an EOP mpacket, recycle the TX buffer - * and signal the host. - */ - .begin - .reg write $stemp - .sig zzz - - alu[--, sop_eop, and, 1] - beq[mpacket_tx_loop#] - - tx_done_ring_full#: - br_inp_state[SCR_Ring3_Status, tx_done_ring_full#] - - alu[$stemp, --, b, buffer_handle] - scratch[put, $stemp, zero, 12, 1], ctx_swap[zzz] - cap[fast_wr, 0, XSCALE_INT_A] - br[mpacket_tx_loop#] - .end - .end - - -zero_byte_packet#: - halt - - diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode b/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode deleted file mode 100644 index a433e24..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode +++ /dev/null @@ -1,98 +0,0 @@ -static struct ixp2000_uengine_code ixp2400_tx = -{ - .cpu_model_bitmask = 0x000003fe, - .cpu_min_revision = 0, - .cpu_max_revision = 255, - - .uengine_parameters = IXP2000_UENGINE_8_CONTEXTS | - IXP2000_UENGINE_PRN_UPDATE_EVERY | - IXP2000_UENGINE_NN_FROM_PREVIOUS | - IXP2000_UENGINE_ASSERT_EMPTY_AT_0 | - IXP2000_UENGINE_LM_ADDR1_PER_CONTEXT | - IXP2000_UENGINE_LM_ADDR0_PER_CONTEXT, - - .initial_reg_values = (struct ixp2000_reg_value []) { - { -1, -1 } - }, - - .num_insns = 77, - .insns = (u8 []) { - 0xf0, 0x00, 0x00, 0x07, 0x00, - 0xd8, 0x03, 0x00, 0x00, 0x11, - 0x3c, 0x40, 0x00, 0x04, 0xe0, - 0x81, 0xf2, 0x02, 0x01, 0x00, - 0xd8, 0x00, 0x80, 0x01, 0x00, - 0xb0, 0x08, 0x06, 0x00, 0x00, - 0xf0, 0x00, 0x0c, 0x00, 0x80, - 0xb4, 0x49, 0x02, 0x03, 0x7f, - 0xf0, 0x00, 0x02, 0x83, 0x00, - 0xfc, 0x10, 0xac, 0x23, 0x08, - 0xfc, 0x10, 0xac, 0x43, 0x10, - 0xfc, 0x10, 0xac, 0x63, 0x18, - 0xe0, 0x00, 0x00, 0x00, 0x02, - 0xa0, 0x30, 0x02, 0x80, 0x00, - 0xd8, 0x06, 0x00, 0x01, 0x01, - 0x19, 0x40, 0x00, 0x04, 0x28, - 0xb0, 0x0a, 0x06, 0x00, 0x00, - 0xd8, 0x03, 0xc0, 0x01, 0x00, - 0x00, 0x44, 0x00, 0x80, 0x80, - 0xa0, 0x09, 0x06, 0x00, 0x00, - 0xb0, 0x0b, 0x06, 0x04, 0x00, - 0xd8, 0x13, 0x00, 0x01, 0x00, - 0xb0, 0x0c, 0x06, 0x08, 0x00, - 0xf0, 0x00, 0x0c, 0x00, 0xa0, - 0xfc, 0x10, 0xae, 0x23, 0x88, - 0xa0, 0x00, 0x12, 0x40, 0x00, - 0xb0, 0xc9, 0x02, 0x43, 0x01, - 0xb4, 0x49, 0x02, 0x43, 0x7f, - 0xb0, 0x00, 0x22, 0x80, 0x00, - 0xf0, 0x00, 0x02, 0x83, 0x00, - 0xf0, 0x00, 0x0c, 0x04, 0x02, - 0xb0, 0x40, 0x6c, 0x00, 0xa0, - 0xd8, 0x08, 0x80, 0x01, 0x01, - 0xaa, 0x00, 0x2c, 0x08, 0x02, - 0xa0, 0xc0, 0x30, 0x18, 0x90, - 0xa0, 0x00, 0x43, 0x00, 0x00, - 0xba, 0xc0, 0x32, 0xc0, 0xa0, - 0xaa, 0xb0, 0x00, 0x0f, 0x40, - 0xd8, 0x0a, 0x80, 0x01, 0x04, - 0xb0, 0x0a, 0x00, 0x08, 0x00, - 0xf0, 0x00, 0x00, 0x0f, 0x40, - 0xa4, 0x00, 0x2c, 0x08, 0x02, - 0xa0, 0x8a, 0x00, 0x0c, 0xa0, - 0xe0, 0x00, 0x00, 0x00, 0x04, - 0xd8, 0x0c, 0x80, 0x00, 0x18, - 0x3c, 0x40, 0x00, 0x04, 0xe0, - 0xba, 0x80, 0x42, 0x01, 0x80, - 0xb4, 0x40, 0x40, 0x13, 0xff, - 0xaa, 0x88, 0x00, 0x10, 0x80, - 0xb0, 0x08, 0x06, 0x00, 0x00, - 0xaa, 0xf0, 0x0d, 0x80, 0x80, - 0xd8, 0x0b, 0x40, 0x01, 0x05, - 0xa0, 0x88, 0x0c, 0x04, 0x80, - 0xfc, 0x10, 0xae, 0x43, 0x90, - 0xba, 0xc0, 0x50, 0x0f, 0x01, - 0x9a, 0x30, 0x50, 0x15, 0x30, - 0x9a, 0xb0, 0x50, 0x16, 0x30, - 0x9b, 0x50, 0x58, 0x16, 0x01, - 0x8a, 0xe2, 0x08, 0x16, 0x21, - 0x6b, 0x4e, 0x00, 0x83, 0x03, - 0xe0, 0x00, 0x00, 0x00, 0x30, - 0x9a, 0x80, 0x70, 0x0e, 0x04, - 0x8b, 0x88, 0x08, 0x1e, 0x02, - 0xf0, 0x00, 0x0c, 0x01, 0x81, - 0xf0, 0x01, 0x80, 0x1f, 0x00, - 0x9b, 0xd0, 0x78, 0x1e, 0x01, - 0x3d, 0x42, 0x00, 0x1c, 0x20, - 0xe0, 0x00, 0x00, 0x00, 0x08, - 0xfc, 0x10, 0xae, 0x63, 0x98, - 0xa4, 0x30, 0x0c, 0x04, 0x02, - 0xd8, 0x03, 0x00, 0x01, 0x00, - 0xd8, 0x11, 0xc1, 0x42, 0x14, - 0xa0, 0x18, 0x00, 0x08, 0x00, - 0x1a, 0x40, 0x00, 0x04, 0x2c, - 0x33, 0x00, 0x01, 0x2f, 0x20, - 0xd8, 0x03, 0x00, 0x00, 0x18, - 0xe0, 0x00, 0x02, 0x00, 0x00, - } -}; diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev.c b/drivers/net/ethernet/xscale/ixp2000/ixpdev.c deleted file mode 100644 index 4500837..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev.c +++ /dev/null @@ -1,437 +0,0 @@ -/* - * IXP2000 MSF network device driver - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/moduleparam.h> -#include <linux/gfp.h> -#include <asm/hardware/uengine.h> -#include <asm/io.h> -#include "ixp2400_rx.ucode" -#include "ixp2400_tx.ucode" -#include "ixpdev_priv.h" -#include "ixpdev.h" -#include "pm3386.h" - -#define DRV_MODULE_VERSION "0.2" - -static int nds_count; -static struct net_device **nds; -static int nds_open; -static void (*set_port_admin_status)(int port, int up); - -static struct ixpdev_rx_desc * const rx_desc = - (struct ixpdev_rx_desc *)(IXP2000_SRAM0_VIRT_BASE + RX_BUF_DESC_BASE); -static struct ixpdev_tx_desc * const tx_desc = - (struct ixpdev_tx_desc *)(IXP2000_SRAM0_VIRT_BASE + TX_BUF_DESC_BASE); -static int tx_pointer; - - -static int ixpdev_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct ixpdev_priv *ip = netdev_priv(dev); - struct ixpdev_tx_desc *desc; - int entry; - unsigned long flags; - - if (unlikely(skb->len > PAGE_SIZE)) { - /* @@@ Count drops. */ - dev_kfree_skb(skb); - return NETDEV_TX_OK; - } - - entry = tx_pointer; - tx_pointer = (tx_pointer + 1) % TX_BUF_COUNT; - - desc = tx_desc + entry; - desc->pkt_length = skb->len; - desc->channel = ip->channel; - - skb_copy_and_csum_dev(skb, phys_to_virt(desc->buf_addr)); - dev_kfree_skb(skb); - - ixp2000_reg_write(RING_TX_PENDING, - TX_BUF_DESC_BASE + (entry * sizeof(struct ixpdev_tx_desc))); - - local_irq_save(flags); - ip->tx_queue_entries++; - if (ip->tx_queue_entries == TX_BUF_COUNT_PER_CHAN) - netif_stop_queue(dev); - local_irq_restore(flags); - - return NETDEV_TX_OK; -} - - -static int ixpdev_rx(struct net_device *dev, int processed, int budget) -{ - while (processed < budget) { - struct ixpdev_rx_desc *desc; - struct sk_buff *skb; - void *buf; - u32 _desc; - - _desc = ixp2000_reg_read(RING_RX_DONE); - if (_desc == 0) - return 0; - - desc = rx_desc + - ((_desc - RX_BUF_DESC_BASE) / sizeof(struct ixpdev_rx_desc)); - buf = phys_to_virt(desc->buf_addr); - - if (desc->pkt_length < 4 || desc->pkt_length > PAGE_SIZE) { - printk(KERN_ERR "ixp2000: rx err, length %d\n", - desc->pkt_length); - goto err; - } - - if (desc->channel < 0 || desc->channel >= nds_count) { - printk(KERN_ERR "ixp2000: rx err, channel %d\n", - desc->channel); - goto err; - } - - /* @@@ Make FCS stripping configurable. */ - desc->pkt_length -= 4; - - if (unlikely(!netif_running(nds[desc->channel]))) - goto err; - - skb = netdev_alloc_skb_ip_align(dev, desc->pkt_length); - if (likely(skb != NULL)) { - skb_copy_to_linear_data(skb, buf, desc->pkt_length); - skb_put(skb, desc->pkt_length); - skb->protocol = eth_type_trans(skb, nds[desc->channel]); - - netif_receive_skb(skb); - } - -err: - ixp2000_reg_write(RING_RX_PENDING, _desc); - processed++; - } - - return processed; -} - -/* dev always points to nds[0]. */ -static int ixpdev_poll(struct napi_struct *napi, int budget) -{ - struct ixpdev_priv *ip = container_of(napi, struct ixpdev_priv, napi); - struct net_device *dev = ip->dev; - int rx; - - rx = 0; - do { - ixp2000_reg_write(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0x00ff); - - rx = ixpdev_rx(dev, rx, budget); - if (rx >= budget) - break; - } while (ixp2000_reg_read(IXP2000_IRQ_THD_RAW_STATUS_A_0) & 0x00ff); - - napi_complete(napi); - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_SET_A_0, 0x00ff); - - return rx; -} - -static void ixpdev_tx_complete(void) -{ - int channel; - u32 wake; - - wake = 0; - while (1) { - struct ixpdev_priv *ip; - u32 desc; - int entry; - - desc = ixp2000_reg_read(RING_TX_DONE); - if (desc == 0) - break; - - /* @@@ Check whether entries come back in order. */ - entry = (desc - TX_BUF_DESC_BASE) / sizeof(struct ixpdev_tx_desc); - channel = tx_desc[entry].channel; - - if (channel < 0 || channel >= nds_count) { - printk(KERN_ERR "ixp2000: txcomp channel index " - "out of bounds (%d, %.8i, %d)\n", - channel, (unsigned int)desc, entry); - continue; - } - - ip = netdev_priv(nds[channel]); - if (ip->tx_queue_entries == TX_BUF_COUNT_PER_CHAN) - wake |= 1 << channel; - ip->tx_queue_entries--; - } - - for (channel = 0; wake != 0; channel++) { - if (wake & (1 << channel)) { - netif_wake_queue(nds[channel]); - wake &= ~(1 << channel); - } - } -} - -static irqreturn_t ixpdev_interrupt(int irq, void *dev_id) -{ - u32 status; - - status = ixp2000_reg_read(IXP2000_IRQ_THD_STATUS_A_0); - if (status == 0) - return IRQ_NONE; - - /* - * Any of the eight receive units signaled RX? - */ - if (status & 0x00ff) { - struct net_device *dev = nds[0]; - struct ixpdev_priv *ip = netdev_priv(dev); - - ixp2000_reg_wrb(IXP2000_IRQ_THD_ENABLE_CLEAR_A_0, 0x00ff); - if (likely(napi_schedule_prep(&ip->napi))) { - __napi_schedule(&ip->napi); - } else { - printk(KERN_CRIT "ixp2000: irq while polling!!\n"); - } - } - - /* - * Any of the eight transmit units signaled TXdone? - */ - if (status & 0xff00) { - ixp2000_reg_wrb(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0xff00); - ixpdev_tx_complete(); - } - - return IRQ_HANDLED; -} - -#ifdef CONFIG_NET_POLL_CONTROLLER -static void ixpdev_poll_controller(struct net_device *dev) -{ - disable_irq(IRQ_IXP2000_THDA0); - ixpdev_interrupt(IRQ_IXP2000_THDA0, dev); - enable_irq(IRQ_IXP2000_THDA0); -} -#endif - -static int ixpdev_open(struct net_device *dev) -{ - struct ixpdev_priv *ip = netdev_priv(dev); - int err; - - napi_enable(&ip->napi); - if (!nds_open++) { - err = request_irq(IRQ_IXP2000_THDA0, ixpdev_interrupt, - IRQF_SHARED, "ixp2000_eth", nds); - if (err) { - nds_open--; - napi_disable(&ip->napi); - return err; - } - - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_SET_A_0, 0xffff); - } - - set_port_admin_status(ip->channel, 1); - netif_start_queue(dev); - - return 0; -} - -static int ixpdev_close(struct net_device *dev) -{ - struct ixpdev_priv *ip = netdev_priv(dev); - - netif_stop_queue(dev); - napi_disable(&ip->napi); - set_port_admin_status(ip->channel, 0); - - if (!--nds_open) { - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_CLEAR_A_0, 0xffff); - free_irq(IRQ_IXP2000_THDA0, nds); - } - - return 0; -} - -static struct net_device_stats *ixpdev_get_stats(struct net_device *dev) -{ - struct ixpdev_priv *ip = netdev_priv(dev); - - pm3386_get_stats(ip->channel, &(dev->stats)); - - return &(dev->stats); -} - -static const struct net_device_ops ixpdev_netdev_ops = { - .ndo_open = ixpdev_open, - .ndo_stop = ixpdev_close, - .ndo_start_xmit = ixpdev_xmit, - .ndo_change_mtu = eth_change_mtu, - .ndo_validate_addr = eth_validate_addr, - .ndo_set_mac_address = eth_mac_addr, - .ndo_get_stats = ixpdev_get_stats, -#ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = ixpdev_poll_controller, -#endif -}; - -struct net_device *ixpdev_alloc(int channel, int sizeof_priv) -{ - struct net_device *dev; - struct ixpdev_priv *ip; - - dev = alloc_etherdev(sizeof_priv); - if (dev == NULL) - return NULL; - - dev->netdev_ops = &ixpdev_netdev_ops; - - dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM; - - ip = netdev_priv(dev); - ip->dev = dev; - netif_napi_add(dev, &ip->napi, ixpdev_poll, 64); - ip->channel = channel; - ip->tx_queue_entries = 0; - - return dev; -} - -int ixpdev_init(int __nds_count, struct net_device **__nds, - void (*__set_port_admin_status)(int port, int up)) -{ - int i; - int err; - - BUILD_BUG_ON(RX_BUF_COUNT > 192 || TX_BUF_COUNT > 192); - - printk(KERN_INFO "IXP2000 MSF ethernet driver %s\n", DRV_MODULE_VERSION); - - nds_count = __nds_count; - nds = __nds; - set_port_admin_status = __set_port_admin_status; - - for (i = 0; i < RX_BUF_COUNT; i++) { - void *buf; - - buf = (void *)get_zeroed_page(GFP_KERNEL); - if (buf == NULL) { - err = -ENOMEM; - while (--i >= 0) - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); - goto err_out; - } - rx_desc[i].buf_addr = virt_to_phys(buf); - rx_desc[i].buf_length = PAGE_SIZE; - } - - /* @@@ Maybe we shouldn't be preallocating TX buffers. */ - for (i = 0; i < TX_BUF_COUNT; i++) { - void *buf; - - buf = (void *)get_zeroed_page(GFP_KERNEL); - if (buf == NULL) { - err = -ENOMEM; - while (--i >= 0) - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); - goto err_free_rx; - } - tx_desc[i].buf_addr = virt_to_phys(buf); - } - - /* 256 entries, ring status set means 'empty', base address 0x0000. */ - ixp2000_reg_write(RING_RX_PENDING_BASE, 0x44000000); - ixp2000_reg_write(RING_RX_PENDING_HEAD, 0x00000000); - ixp2000_reg_write(RING_RX_PENDING_TAIL, 0x00000000); - - /* 256 entries, ring status set means 'full', base address 0x0400. */ - ixp2000_reg_write(RING_RX_DONE_BASE, 0x40000400); - ixp2000_reg_write(RING_RX_DONE_HEAD, 0x00000000); - ixp2000_reg_write(RING_RX_DONE_TAIL, 0x00000000); - - for (i = 0; i < RX_BUF_COUNT; i++) { - ixp2000_reg_write(RING_RX_PENDING, - RX_BUF_DESC_BASE + (i * sizeof(struct ixpdev_rx_desc))); - } - - ixp2000_uengine_load(0, &ixp2400_rx); - ixp2000_uengine_start_contexts(0, 0xff); - - /* 256 entries, ring status set means 'empty', base address 0x0800. */ - ixp2000_reg_write(RING_TX_PENDING_BASE, 0x44000800); - ixp2000_reg_write(RING_TX_PENDING_HEAD, 0x00000000); - ixp2000_reg_write(RING_TX_PENDING_TAIL, 0x00000000); - - /* 256 entries, ring status set means 'full', base address 0x0c00. */ - ixp2000_reg_write(RING_TX_DONE_BASE, 0x40000c00); - ixp2000_reg_write(RING_TX_DONE_HEAD, 0x00000000); - ixp2000_reg_write(RING_TX_DONE_TAIL, 0x00000000); - - ixp2000_uengine_load(1, &ixp2400_tx); - ixp2000_uengine_start_contexts(1, 0xff); - - for (i = 0; i < nds_count; i++) { - err = register_netdev(nds[i]); - if (err) { - while (--i >= 0) - unregister_netdev(nds[i]); - goto err_free_tx; - } - } - - for (i = 0; i < nds_count; i++) { - printk(KERN_INFO "%s: IXP2000 MSF ethernet (port %d), %pM.\n", - nds[i]->name, i, nds[i]->dev_addr); - } - - return 0; - -err_free_tx: - for (i = 0; i < TX_BUF_COUNT; i++) - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); - -err_free_rx: - for (i = 0; i < RX_BUF_COUNT; i++) - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); - -err_out: - return err; -} - -void ixpdev_deinit(void) -{ - int i; - - /* @@@ Flush out pending packets. */ - - for (i = 0; i < nds_count; i++) - unregister_netdev(nds[i]); - - ixp2000_uengine_stop_contexts(1, 0xff); - ixp2000_uengine_stop_contexts(0, 0xff); - ixp2000_uengine_reset(0x3); - - for (i = 0; i < TX_BUF_COUNT; i++) - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); - - for (i = 0; i < RX_BUF_COUNT; i++) - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); -} diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev.h b/drivers/net/ethernet/xscale/ixp2000/ixpdev.h deleted file mode 100644 index 391ece6..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * IXP2000 MSF network device driver - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#ifndef __IXPDEV_H -#define __IXPDEV_H - -struct ixpdev_priv -{ - struct net_device *dev; - struct napi_struct napi; - int channel; - int tx_queue_entries; -}; - -struct net_device *ixpdev_alloc(int channel, int sizeof_priv); -int ixpdev_init(int num_ports, struct net_device **nds, - void (*set_port_admin_status)(int port, int up)); -void ixpdev_deinit(void); - - -#endif diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h b/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h deleted file mode 100644 index 86aa08e..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * IXP2000 MSF network device driver - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#ifndef __IXPDEV_PRIV_H -#define __IXPDEV_PRIV_H - -#define RX_BUF_DESC_BASE 0x00001000 -#define RX_BUF_COUNT ((3 * PAGE_SIZE) / (4 * sizeof(struct ixpdev_rx_desc))) -#define TX_BUF_DESC_BASE 0x00002000 -#define TX_BUF_COUNT ((3 * PAGE_SIZE) / (4 * sizeof(struct ixpdev_tx_desc))) -#define TX_BUF_COUNT_PER_CHAN (TX_BUF_COUNT / 4) - -#define RING_RX_PENDING ((u32 *)IXP2000_SCRATCH_RING_VIRT_BASE) -#define RING_RX_DONE ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 4)) -#define RING_TX_PENDING ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 8)) -#define RING_TX_DONE ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 12)) - -#define SCRATCH_REG(x) ((u32 *)(IXP2000_GLOBAL_REG_VIRT_BASE | 0x0800 | (x))) -#define RING_RX_PENDING_BASE SCRATCH_REG(0x00) -#define RING_RX_PENDING_HEAD SCRATCH_REG(0x04) -#define RING_RX_PENDING_TAIL SCRATCH_REG(0x08) -#define RING_RX_DONE_BASE SCRATCH_REG(0x10) -#define RING_RX_DONE_HEAD SCRATCH_REG(0x14) -#define RING_RX_DONE_TAIL SCRATCH_REG(0x18) -#define RING_TX_PENDING_BASE SCRATCH_REG(0x20) -#define RING_TX_PENDING_HEAD SCRATCH_REG(0x24) -#define RING_TX_PENDING_TAIL SCRATCH_REG(0x28) -#define RING_TX_DONE_BASE SCRATCH_REG(0x30) -#define RING_TX_DONE_HEAD SCRATCH_REG(0x34) -#define RING_TX_DONE_TAIL SCRATCH_REG(0x38) - -struct ixpdev_rx_desc -{ - u32 buf_addr; - u32 buf_length; - u32 channel; - u32 pkt_length; -}; - -struct ixpdev_tx_desc -{ - u32 buf_addr; - u32 pkt_length; - u32 channel; - u32 unused; -}; - - -#endif diff --git a/drivers/net/ethernet/xscale/ixp2000/pm3386.c b/drivers/net/ethernet/xscale/ixp2000/pm3386.c deleted file mode 100644 index e08d3f9..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/pm3386.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Helper functions for the PM3386s on the Radisys ENP2611 - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#include <linux/module.h> -#include <linux/delay.h> -#include <linux/netdevice.h> -#include <asm/io.h> -#include "pm3386.h" - -/* - * Read from register 'reg' of PM3386 device 'pm'. - */ -static u16 pm3386_reg_read(int pm, int reg) -{ - void *_reg; - u16 value; - - _reg = (void *)ENP2611_PM3386_0_VIRT_BASE; - if (pm == 1) - _reg = (void *)ENP2611_PM3386_1_VIRT_BASE; - - value = *((volatile u16 *)(_reg + (reg << 1))); - -// printk(KERN_INFO "pm3386_reg_read(%d, %.3x) = %.8x\n", pm, reg, value); - - return value; -} - -/* - * Write to register 'reg' of PM3386 device 'pm', and perform - * a readback from the identification register. - */ -static void pm3386_reg_write(int pm, int reg, u16 value) -{ - void *_reg; - u16 dummy; - -// printk(KERN_INFO "pm3386_reg_write(%d, %.3x, %.8x)\n", pm, reg, value); - - _reg = (void *)ENP2611_PM3386_0_VIRT_BASE; - if (pm == 1) - _reg = (void *)ENP2611_PM3386_1_VIRT_BASE; - - *((volatile u16 *)(_reg + (reg << 1))) = value; - - dummy = *((volatile u16 *)_reg); - __asm__ __volatile__("mov %0, %0" : "+r" (dummy)); -} - -/* - * Read from port 'port' register 'reg', where the registers - * for the different ports are 'spacing' registers apart. - */ -static u16 pm3386_port_reg_read(int port, int _reg, int spacing) -{ - int reg; - - reg = _reg; - if (port & 1) - reg += spacing; - - return pm3386_reg_read(port >> 1, reg); -} - -/* - * Write to port 'port' register 'reg', where the registers - * for the different ports are 'spacing' registers apart. - */ -static void pm3386_port_reg_write(int port, int _reg, int spacing, u16 value) -{ - int reg; - - reg = _reg; - if (port & 1) - reg += spacing; - - pm3386_reg_write(port >> 1, reg, value); -} - -int pm3386_secondary_present(void) -{ - return pm3386_reg_read(1, 0) == 0x3386; -} - -void pm3386_reset(void) -{ - u8 mac[3][6]; - int secondary; - - secondary = pm3386_secondary_present(); - - /* Save programmed MAC addresses. */ - pm3386_get_mac(0, mac[0]); - pm3386_get_mac(1, mac[1]); - if (secondary) - pm3386_get_mac(2, mac[2]); - - /* Assert analog and digital reset. */ - pm3386_reg_write(0, 0x002, 0x0060); - if (secondary) - pm3386_reg_write(1, 0x002, 0x0060); - mdelay(1); - - /* Deassert analog reset. */ - pm3386_reg_write(0, 0x002, 0x0062); - if (secondary) - pm3386_reg_write(1, 0x002, 0x0062); - mdelay(10); - - /* Deassert digital reset. */ - pm3386_reg_write(0, 0x002, 0x0063); - if (secondary) - pm3386_reg_write(1, 0x002, 0x0063); - mdelay(10); - - /* Restore programmed MAC addresses. */ - pm3386_set_mac(0, mac[0]); - pm3386_set_mac(1, mac[1]); - if (secondary) - pm3386_set_mac(2, mac[2]); - - /* Disable carrier on all ports. */ - pm3386_set_carrier(0, 0); - pm3386_set_carrier(1, 0); - if (secondary) - pm3386_set_carrier(2, 0); -} - -static u16 swaph(u16 x) -{ - return ((x << 8) | (x >> 8)) & 0xffff; -} - -int pm3386_port_count(void) -{ - return 2 + pm3386_secondary_present(); -} - -void pm3386_init_port(int port) -{ - int pm = port >> 1; - - /* - * Work around ENP2611 bootloader programming MAC address - * in reverse. - */ - if (pm3386_port_reg_read(port, 0x30a, 0x100) == 0x0000 && - (pm3386_port_reg_read(port, 0x309, 0x100) & 0xff00) == 0x5000) { - u16 temp[3]; - - temp[0] = pm3386_port_reg_read(port, 0x308, 0x100); - temp[1] = pm3386_port_reg_read(port, 0x309, 0x100); - temp[2] = pm3386_port_reg_read(port, 0x30a, 0x100); - pm3386_port_reg_write(port, 0x308, 0x100, swaph(temp[2])); - pm3386_port_reg_write(port, 0x309, 0x100, swaph(temp[1])); - pm3386_port_reg_write(port, 0x30a, 0x100, swaph(temp[0])); - } - - /* - * Initialise narrowbanding mode. See application note 2010486 - * for more information. (@@@ We also need to issue a reset - * when ROOL or DOOL are detected.) - */ - pm3386_port_reg_write(port, 0x708, 0x10, 0xd055); - udelay(500); - pm3386_port_reg_write(port, 0x708, 0x10, 0x5055); - - /* - * SPI-3 ingress block. Set 64 bytes SPI-3 burst size - * towards SPI-3 bridge. - */ - pm3386_port_reg_write(port, 0x122, 0x20, 0x0002); - - /* - * Enable ingress protocol checking, and soft reset the - * SPI-3 ingress block. - */ - pm3386_reg_write(pm, 0x103, 0x0003); - while (!(pm3386_reg_read(pm, 0x103) & 0x80)) - ; - - /* - * SPI-3 egress block. Gather 12288 bytes of the current - * packet in the TX fifo before initiating transmit on the - * SERDES interface. (Prevents TX underflows.) - */ - pm3386_port_reg_write(port, 0x221, 0x20, 0x0007); - - /* - * Enforce odd parity from the SPI-3 bridge, and soft reset - * the SPI-3 egress block. - */ - pm3386_reg_write(pm, 0x203, 0x000d & ~(4 << (port & 1))); - while ((pm3386_reg_read(pm, 0x203) & 0x000c) != 0x000c) - ; - - /* - * EGMAC block. Set this channels to reject long preambles, - * not send or transmit PAUSE frames, enable preamble checking, - * disable frame length checking, enable FCS appending, enable - * TX frame padding. - */ - pm3386_port_reg_write(port, 0x302, 0x100, 0x0113); - - /* - * Soft reset the EGMAC block. - */ - pm3386_port_reg_write(port, 0x301, 0x100, 0x8000); - pm3386_port_reg_write(port, 0x301, 0x100, 0x0000); - - /* - * Auto-sense autonegotiation status. - */ - pm3386_port_reg_write(port, 0x306, 0x100, 0x0100); - - /* - * Allow reception of jumbo frames. - */ - pm3386_port_reg_write(port, 0x310, 0x100, 9018); - - /* - * Allow transmission of jumbo frames. - */ - pm3386_port_reg_write(port, 0x336, 0x100, 9018); - - /* @@@ Should set 0x337/0x437 (RX forwarding threshold.) */ - - /* - * Set autonegotiation parameters to 'no PAUSE, full duplex.' - */ - pm3386_port_reg_write(port, 0x31c, 0x100, 0x0020); - - /* - * Enable and restart autonegotiation. - */ - pm3386_port_reg_write(port, 0x318, 0x100, 0x0003); - pm3386_port_reg_write(port, 0x318, 0x100, 0x0002); -} - -void pm3386_get_mac(int port, u8 *mac) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x308, 0x100); - mac[0] = temp & 0xff; - mac[1] = (temp >> 8) & 0xff; - - temp = pm3386_port_reg_read(port, 0x309, 0x100); - mac[2] = temp & 0xff; - mac[3] = (temp >> 8) & 0xff; - - temp = pm3386_port_reg_read(port, 0x30a, 0x100); - mac[4] = temp & 0xff; - mac[5] = (temp >> 8) & 0xff; -} - -void pm3386_set_mac(int port, u8 *mac) -{ - pm3386_port_reg_write(port, 0x308, 0x100, (mac[1] << 8) | mac[0]); - pm3386_port_reg_write(port, 0x309, 0x100, (mac[3] << 8) | mac[2]); - pm3386_port_reg_write(port, 0x30a, 0x100, (mac[5] << 8) | mac[4]); -} - -static u32 pm3386_get_stat(int port, u16 base) -{ - u32 value; - - value = pm3386_port_reg_read(port, base, 0x100); - value |= pm3386_port_reg_read(port, base + 1, 0x100) << 16; - - return value; -} - -void pm3386_get_stats(int port, struct net_device_stats *stats) -{ - /* - * Snapshot statistics counters. - */ - pm3386_port_reg_write(port, 0x500, 0x100, 0x0001); - while (pm3386_port_reg_read(port, 0x500, 0x100) & 0x0001) - ; - - memset(stats, 0, sizeof(*stats)); - - stats->rx_packets = pm3386_get_stat(port, 0x510); - stats->tx_packets = pm3386_get_stat(port, 0x590); - stats->rx_bytes = pm3386_get_stat(port, 0x514); - stats->tx_bytes = pm3386_get_stat(port, 0x594); - /* @@@ Add other stats. */ -} - -void pm3386_set_carrier(int port, int state) -{ - pm3386_port_reg_write(port, 0x703, 0x10, state ? 0x1001 : 0x0000); -} - -int pm3386_is_link_up(int port) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x31a, 0x100); - temp = pm3386_port_reg_read(port, 0x31a, 0x100); - - return !!(temp & 0x0002); -} - -void pm3386_enable_rx(int port) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x303, 0x100); - temp |= 0x1000; - pm3386_port_reg_write(port, 0x303, 0x100, temp); -} - -void pm3386_disable_rx(int port) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x303, 0x100); - temp &= 0xefff; - pm3386_port_reg_write(port, 0x303, 0x100, temp); -} - -void pm3386_enable_tx(int port) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x303, 0x100); - temp |= 0x4000; - pm3386_port_reg_write(port, 0x303, 0x100, temp); -} - -void pm3386_disable_tx(int port) -{ - u16 temp; - - temp = pm3386_port_reg_read(port, 0x303, 0x100); - temp &= 0xbfff; - pm3386_port_reg_write(port, 0x303, 0x100, temp); -} - -MODULE_LICENSE("GPL"); diff --git a/drivers/net/ethernet/xscale/ixp2000/pm3386.h b/drivers/net/ethernet/xscale/ixp2000/pm3386.h deleted file mode 100644 index cc4183d..0000000 --- a/drivers/net/ethernet/xscale/ixp2000/pm3386.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Helper functions for the PM3386s on the Radisys ENP2611 - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> - * Dedicated to Marija Kulikova. - * - * 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. - */ - -#ifndef __PM3386_H -#define __PM3386_H - -void pm3386_reset(void); -int pm3386_port_count(void); -void pm3386_init_port(int port); -void pm3386_get_mac(int port, u8 *mac); -void pm3386_set_mac(int port, u8 *mac); -void pm3386_get_stats(int port, struct net_device_stats *stats); -void pm3386_set_carrier(int port, int state); -int pm3386_is_link_up(int port); -void pm3386_enable_rx(int port); -void pm3386_disable_rx(int port); -void pm3386_enable_tx(int port); -void pm3386_disable_tx(int port); - - -#endif -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] net: remove ixp2000 ethernet driver 2012-04-04 1:34 ` [PATCH 2/5] net: remove ixp2000 ethernet driver Rob Herring @ 2012-04-04 10:20 ` Jeff Kirsher 2012-04-04 12:25 ` Lennert Buytenhek 0 siblings, 1 reply; 14+ messages in thread From: Jeff Kirsher @ 2012-04-04 10:20 UTC (permalink / raw) To: Rob Herring, Lennert Buytenhek Cc: linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring [-- Attachment #1: Type: text/plain, Size: 84559 bytes --] On Tue, 2012-04-03 at 20:34 -0500, Rob Herring wrote: > From: Rob Herring <rob.herring@calxeda.com> > > The platform is removed, so there are no users of this driver. > > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > Cc: Jesse Brandeburg <jesse.brandeburg@intel.com> > Cc: Bruce Allan <bruce.w.allan@intel.com> > Cc: Carolyn Wyborny <carolyn.wyborny@intel.com> > Cc: Don Skidmore <donald.c.skidmore@intel.com> > Cc: Greg Rose <gregory.v.rose@intel.com> > Cc: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> > Cc: Alex Duyck <alexander.h.duyck@intel.com> > Cc: John Ronciak <john.ronciak@intel.com> > Cc: netdev@vger.kernel.org > --- > MAINTAINERS | 6 - > drivers/net/ethernet/intel/Kconfig | 2 +- > drivers/net/ethernet/xscale/Kconfig | 6 +- > drivers/net/ethernet/xscale/Makefile | 1 - > drivers/net/ethernet/xscale/ixp2000/Kconfig | 6 - > drivers/net/ethernet/xscale/ixp2000/Makefile | 3 - > drivers/net/ethernet/xscale/ixp2000/caleb.c | 136 ------ > drivers/net/ethernet/xscale/ixp2000/caleb.h | 22 - > drivers/net/ethernet/xscale/ixp2000/enp2611.c | 232 ----------- > drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c | 212 ---------- > drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h | 115 ----- > drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc | 408 ------------------ > .../net/ethernet/xscale/ixp2000/ixp2400_rx.ucode | 130 ------ > drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc | 272 ------------ > .../net/ethernet/xscale/ixp2000/ixp2400_tx.ucode | 98 ----- > drivers/net/ethernet/xscale/ixp2000/ixpdev.c | 437 -------------------- > drivers/net/ethernet/xscale/ixp2000/ixpdev.h | 29 -- > drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h | 57 --- > drivers/net/ethernet/xscale/ixp2000/pm3386.c | 351 ---------------- > drivers/net/ethernet/xscale/ixp2000/pm3386.h | 29 -- > 20 files changed, 3 insertions(+), 2549 deletions(-) > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/Kconfig > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/Makefile > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/caleb.c > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/caleb.h > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/enp2611.c > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev.c > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev.h > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/pm3386.c > delete mode 100644 drivers/net/ethernet/xscale/ixp2000/pm3386.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index defc06a..3dfc27c 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -3503,12 +3503,6 @@ M: Deepak Saxena <dsaxena@plexity.net> > S: Maintained > F: drivers/char/hw_random/ixp4xx-rng.c > > -INTEL IXP2000 ETHERNET DRIVER > -M: Lennert Buytenhek <kernel@wantstofly.org> > -L: netdev@vger.kernel.org > -S: Maintained > -F: drivers/net/ethernet/xscale/ixp2000/ > - > INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf) > M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > M: Jesse Brandeburg <jesse.brandeburg@intel.com> > diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig > index 7621316..2d33898 100644 > --- a/drivers/net/ethernet/intel/Kconfig > +++ b/drivers/net/ethernet/intel/Kconfig > @@ -7,7 +7,7 @@ config NET_VENDOR_INTEL > default y > depends on PCI || PCI_MSI || ISA || ISA_DMA_API || ARM || \ > ARCH_ACORN || MCA || MCA_LEGACY || SNI_RM || SUN3 || \ > - GSC || BVME6000 || MVME16x || ARCH_ENP2611 || \ > + GSC || BVME6000 || MVME16x || \ > (ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR) || \ > EXPERIMENTAL > ---help--- > diff --git a/drivers/net/ethernet/xscale/Kconfig b/drivers/net/ethernet/xscale/Kconfig > index cf67352..3f43101 100644 > --- a/drivers/net/ethernet/xscale/Kconfig > +++ b/drivers/net/ethernet/xscale/Kconfig > @@ -5,8 +5,8 @@ > config NET_VENDOR_XSCALE > bool "Intel XScale IXP devices" > default y > - depends on NET_VENDOR_INTEL && ((ARM && ARCH_IXP4XX && \ > - IXP4XX_NPE && IXP4XX_QMGR) || ARCH_ENP2611) > + depends on NET_VENDOR_INTEL && (ARM && ARCH_IXP4XX && \ > + IXP4XX_NPE && IXP4XX_QMGR) > ---help--- > If you have a network (Ethernet) card belonging to this class, say Y > and read the Ethernet-HOWTO, available from > @@ -27,6 +27,4 @@ config IXP4XX_ETH > Say Y here if you want to use built-in Ethernet ports > on IXP4xx processor. > > -source "drivers/net/ethernet/xscale/ixp2000/Kconfig" > - > endif # NET_VENDOR_XSCALE > diff --git a/drivers/net/ethernet/xscale/Makefile b/drivers/net/ethernet/xscale/Makefile > index b195b9d..abc3b03 100644 > --- a/drivers/net/ethernet/xscale/Makefile > +++ b/drivers/net/ethernet/xscale/Makefile > @@ -2,5 +2,4 @@ > # Makefile for the Intel XScale IXP device drivers. > # > > -obj-$(CONFIG_ENP2611_MSF_NET) += ixp2000/ > obj-$(CONFIG_IXP4XX_ETH) += ixp4xx_eth.o > diff --git a/drivers/net/ethernet/xscale/ixp2000/Kconfig b/drivers/net/ethernet/xscale/ixp2000/Kconfig > deleted file mode 100644 > index 58dbc5b..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/Kconfig > +++ /dev/null > @@ -1,6 +0,0 @@ > -config ENP2611_MSF_NET > - tristate "Radisys ENP2611 MSF network interface support" > - depends on ARCH_ENP2611 > - ---help--- > - This is a driver for the MSF network interface unit in > - the IXP2400 on the Radisys ENP2611 platform. > diff --git a/drivers/net/ethernet/xscale/ixp2000/Makefile b/drivers/net/ethernet/xscale/ixp2000/Makefile > deleted file mode 100644 > index fd38351..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/Makefile > +++ /dev/null > @@ -1,3 +0,0 @@ > -obj-$(CONFIG_ENP2611_MSF_NET) += enp2611_mod.o > - > -enp2611_mod-objs := caleb.o enp2611.o ixp2400-msf.o ixpdev.o pm3386.o > diff --git a/drivers/net/ethernet/xscale/ixp2000/caleb.c b/drivers/net/ethernet/xscale/ixp2000/caleb.c > deleted file mode 100644 > index 7dea5b9..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/caleb.c > +++ /dev/null > @@ -1,136 +0,0 @@ > -/* > - * Helper functions for the SPI-3 bridge FPGA on the Radisys ENP2611 > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#include <linux/module.h> > -#include <linux/delay.h> > -#include <asm/io.h> > -#include "caleb.h" > - > -#define CALEB_IDLO 0x00 > -#define CALEB_IDHI 0x01 > -#define CALEB_RID 0x02 > -#define CALEB_RESET 0x03 > -#define CALEB_INTREN0 0x04 > -#define CALEB_INTREN1 0x05 > -#define CALEB_INTRSTAT0 0x06 > -#define CALEB_INTRSTAT1 0x07 > -#define CALEB_PORTEN 0x08 > -#define CALEB_BURST 0x09 > -#define CALEB_PORTPAUS 0x0A > -#define CALEB_PORTPAUSD 0x0B > -#define CALEB_PHY0RX 0x10 > -#define CALEB_PHY1RX 0x11 > -#define CALEB_PHY0TX 0x12 > -#define CALEB_PHY1TX 0x13 > -#define CALEB_IXPRX_HI_CNTR 0x15 > -#define CALEB_PHY0RX_HI_CNTR 0x16 > -#define CALEB_PHY1RX_HI_CNTR 0x17 > -#define CALEB_IXPRX_CNTR 0x18 > -#define CALEB_PHY0RX_CNTR 0x19 > -#define CALEB_PHY1RX_CNTR 0x1A > -#define CALEB_IXPTX_CNTR 0x1B > -#define CALEB_PHY0TX_CNTR 0x1C > -#define CALEB_PHY1TX_CNTR 0x1D > -#define CALEB_DEBUG0 0x1E > -#define CALEB_DEBUG1 0x1F > - > - > -static u8 caleb_reg_read(int reg) > -{ > - u8 value; > - > - value = *((volatile u8 *)(ENP2611_CALEB_VIRT_BASE + reg)); > - > -// printk(KERN_INFO "caleb_reg_read(%d) = %.2x\n", reg, value); > - > - return value; > -} > - > -static void caleb_reg_write(int reg, u8 value) > -{ > - u8 dummy; > - > -// printk(KERN_INFO "caleb_reg_write(%d, %.2x)\n", reg, value); > - > - *((volatile u8 *)(ENP2611_CALEB_VIRT_BASE + reg)) = value; > - > - dummy = *((volatile u8 *)ENP2611_CALEB_VIRT_BASE); > - __asm__ __volatile__("mov %0, %0" : "+r" (dummy)); > -} > - > - > -void caleb_reset(void) > -{ > - /* > - * Perform a chip reset. > - */ > - caleb_reg_write(CALEB_RESET, 0x02); > - udelay(1); > - > - /* > - * Enable all interrupt sources. This is needed to get > - * meaningful results out of the status bits (register 6 > - * and 7.) > - */ > - caleb_reg_write(CALEB_INTREN0, 0xff); > - caleb_reg_write(CALEB_INTREN1, 0x07); > - > - /* > - * Set RX and TX FIFO thresholds to 1.5kb. > - */ > - caleb_reg_write(CALEB_PHY0RX, 0x11); > - caleb_reg_write(CALEB_PHY1RX, 0x11); > - caleb_reg_write(CALEB_PHY0TX, 0x11); > - caleb_reg_write(CALEB_PHY1TX, 0x11); > - > - /* > - * Program SPI-3 burst size. > - */ > - caleb_reg_write(CALEB_BURST, 0); // 64-byte RBUF mpackets > -// caleb_reg_write(CALEB_BURST, 1); // 128-byte RBUF mpackets > -// caleb_reg_write(CALEB_BURST, 2); // 256-byte RBUF mpackets > -} > - > -void caleb_enable_rx(int port) > -{ > - u8 temp; > - > - temp = caleb_reg_read(CALEB_PORTEN); > - temp |= 1 << port; > - caleb_reg_write(CALEB_PORTEN, temp); > -} > - > -void caleb_disable_rx(int port) > -{ > - u8 temp; > - > - temp = caleb_reg_read(CALEB_PORTEN); > - temp &= ~(1 << port); > - caleb_reg_write(CALEB_PORTEN, temp); > -} > - > -void caleb_enable_tx(int port) > -{ > - u8 temp; > - > - temp = caleb_reg_read(CALEB_PORTEN); > - temp |= 1 << (port + 4); > - caleb_reg_write(CALEB_PORTEN, temp); > -} > - > -void caleb_disable_tx(int port) > -{ > - u8 temp; > - > - temp = caleb_reg_read(CALEB_PORTEN); > - temp &= ~(1 << (port + 4)); > - caleb_reg_write(CALEB_PORTEN, temp); > -} > diff --git a/drivers/net/ethernet/xscale/ixp2000/caleb.h b/drivers/net/ethernet/xscale/ixp2000/caleb.h > deleted file mode 100644 > index e93a1ef..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/caleb.h > +++ /dev/null > @@ -1,22 +0,0 @@ > -/* > - * Helper functions for the SPI-3 bridge FPGA on the Radisys ENP2611 > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#ifndef __CALEB_H > -#define __CALEB_H > - > -void caleb_reset(void); > -void caleb_enable_rx(int port); > -void caleb_disable_rx(int port); > -void caleb_enable_tx(int port); > -void caleb_disable_tx(int port); > - > - > -#endif > diff --git a/drivers/net/ethernet/xscale/ixp2000/enp2611.c b/drivers/net/ethernet/xscale/ixp2000/enp2611.c > deleted file mode 100644 > index 34a6cfd..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/enp2611.c > +++ /dev/null > @@ -1,232 +0,0 @@ > -/* > - * IXP2400 MSF network device driver for the Radisys ENP2611 > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#include <linux/module.h> > -#include <linux/kernel.h> > -#include <linux/netdevice.h> > -#include <linux/etherdevice.h> > -#include <linux/init.h> > -#include <linux/moduleparam.h> > -#include <asm/hardware/uengine.h> > -#include <asm/mach-types.h> > -#include <asm/io.h> > -#include "ixpdev.h" > -#include "caleb.h" > -#include "ixp2400-msf.h" > -#include "pm3386.h" > - > -/*********************************************************************** > - * The Radisys ENP2611 is a PCI form factor board with three SFP GBIC > - * slots, connected via two PMC/Sierra 3386s and an SPI-3 bridge FPGA > - * to the IXP2400. > - * > - * +-------------+ > - * SFP GBIC #0 ---+ | +---------+ > - * | PM3386 #0 +-------+ | > - * SFP GBIC #1 ---+ | | "Caleb" | +---------+ > - * +-------------+ | | | | > - * | SPI-3 +---------+ IXP2400 | > - * +-------------+ | bridge | | | > - * SFP GBIC #2 ---+ | | FPGA | +---------+ > - * | PM3386 #1 +-------+ | > - * | | +---------+ > - * +-------------+ > - * ^ ^ ^ > - * | 1.25Gbaud | 104MHz | 104MHz > - * | SERDES ea. | SPI-3 ea. | SPI-3 > - * > - ***********************************************************************/ > -static struct ixp2400_msf_parameters enp2611_msf_parameters = > -{ > - .rx_mode = IXP2400_RX_MODE_UTOPIA_POS | > - IXP2400_RX_MODE_1x32 | > - IXP2400_RX_MODE_MPHY | > - IXP2400_RX_MODE_MPHY_32 | > - IXP2400_RX_MODE_MPHY_POLLED_STATUS | > - IXP2400_RX_MODE_MPHY_LEVEL3 | > - IXP2400_RX_MODE_RBUF_SIZE_64, > - > - .rxclk01_multiplier = IXP2400_PLL_MULTIPLIER_16, > - > - .rx_poll_ports = 3, > - > - .rx_channel_mode = { > - IXP2400_PORT_RX_MODE_MASTER | > - IXP2400_PORT_RX_MODE_POS_PHY | > - IXP2400_PORT_RX_MODE_POS_PHY_L3 | > - IXP2400_PORT_RX_MODE_ODD_PARITY | > - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_RX_MODE_MASTER | > - IXP2400_PORT_RX_MODE_POS_PHY | > - IXP2400_PORT_RX_MODE_POS_PHY_L3 | > - IXP2400_PORT_RX_MODE_ODD_PARITY | > - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_RX_MODE_MASTER | > - IXP2400_PORT_RX_MODE_POS_PHY | > - IXP2400_PORT_RX_MODE_POS_PHY_L3 | > - IXP2400_PORT_RX_MODE_ODD_PARITY | > - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_RX_MODE_MASTER | > - IXP2400_PORT_RX_MODE_POS_PHY | > - IXP2400_PORT_RX_MODE_POS_PHY_L3 | > - IXP2400_PORT_RX_MODE_ODD_PARITY | > - IXP2400_PORT_RX_MODE_2_CYCLE_DECODE > - }, > - > - .tx_mode = IXP2400_TX_MODE_UTOPIA_POS | > - IXP2400_TX_MODE_1x32 | > - IXP2400_TX_MODE_MPHY | > - IXP2400_TX_MODE_MPHY_32 | > - IXP2400_TX_MODE_MPHY_POLLED_STATUS | > - IXP2400_TX_MODE_MPHY_LEVEL3 | > - IXP2400_TX_MODE_TBUF_SIZE_64, > - > - .txclk01_multiplier = IXP2400_PLL_MULTIPLIER_16, > - > - .tx_poll_ports = 3, > - > - .tx_channel_mode = { > - IXP2400_PORT_TX_MODE_MASTER | > - IXP2400_PORT_TX_MODE_POS_PHY | > - IXP2400_PORT_TX_MODE_ODD_PARITY | > - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_TX_MODE_MASTER | > - IXP2400_PORT_TX_MODE_POS_PHY | > - IXP2400_PORT_TX_MODE_ODD_PARITY | > - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_TX_MODE_MASTER | > - IXP2400_PORT_TX_MODE_POS_PHY | > - IXP2400_PORT_TX_MODE_ODD_PARITY | > - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE, > - > - IXP2400_PORT_TX_MODE_MASTER | > - IXP2400_PORT_TX_MODE_POS_PHY | > - IXP2400_PORT_TX_MODE_ODD_PARITY | > - IXP2400_PORT_TX_MODE_2_CYCLE_DECODE > - } > -}; > - > -static struct net_device *nds[3]; > -static struct timer_list link_check_timer; > - > -/* @@@ Poll the SFP moddef0 line too. */ > -/* @@@ Try to use the pm3386 DOOL interrupt as well. */ > -static void enp2611_check_link_status(unsigned long __dummy) > -{ > - int i; > - > - for (i = 0; i < 3; i++) { > - struct net_device *dev; > - int status; > - > - dev = nds[i]; > - if (dev == NULL) > - continue; > - > - status = pm3386_is_link_up(i); > - if (status && !netif_carrier_ok(dev)) { > - /* @@@ Should report autonegotiation status. */ > - printk(KERN_INFO "%s: NIC Link is Up\n", dev->name); > - > - pm3386_enable_tx(i); > - caleb_enable_tx(i); > - netif_carrier_on(dev); > - } else if (!status && netif_carrier_ok(dev)) { > - printk(KERN_INFO "%s: NIC Link is Down\n", dev->name); > - > - netif_carrier_off(dev); > - caleb_disable_tx(i); > - pm3386_disable_tx(i); > - } > - } > - > - link_check_timer.expires = jiffies + HZ / 10; > - add_timer(&link_check_timer); > -} > - > -static void enp2611_set_port_admin_status(int port, int up) > -{ > - if (up) { > - caleb_enable_rx(port); > - > - pm3386_set_carrier(port, 1); > - pm3386_enable_rx(port); > - } else { > - caleb_disable_tx(port); > - pm3386_disable_tx(port); > - /* @@@ Flush out pending packets. */ > - pm3386_set_carrier(port, 0); > - > - pm3386_disable_rx(port); > - caleb_disable_rx(port); > - } > -} > - > -static int __init enp2611_init_module(void) > -{ > - int ports; > - int i; > - > - if (!machine_is_enp2611()) > - return -ENODEV; > - > - caleb_reset(); > - pm3386_reset(); > - > - ports = pm3386_port_count(); > - for (i = 0; i < ports; i++) { > - nds[i] = ixpdev_alloc(i, sizeof(struct ixpdev_priv)); > - if (nds[i] == NULL) { > - while (--i >= 0) > - free_netdev(nds[i]); > - return -ENOMEM; > - } > - > - pm3386_init_port(i); > - pm3386_get_mac(i, nds[i]->dev_addr); > - } > - > - ixp2400_msf_init(&enp2611_msf_parameters); > - > - if (ixpdev_init(ports, nds, enp2611_set_port_admin_status)) { > - for (i = 0; i < ports; i++) > - if (nds[i]) > - free_netdev(nds[i]); > - return -EINVAL; > - } > - > - init_timer(&link_check_timer); > - link_check_timer.function = enp2611_check_link_status; > - link_check_timer.expires = jiffies; > - add_timer(&link_check_timer); > - > - return 0; > -} > - > -static void __exit enp2611_cleanup_module(void) > -{ > - int i; > - > - del_timer_sync(&link_check_timer); > - > - ixpdev_deinit(); > - for (i = 0; i < 3; i++) > - free_netdev(nds[i]); > -} > - > -module_init(enp2611_init_module); > -module_exit(enp2611_cleanup_module); > -MODULE_LICENSE("GPL"); > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c b/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c > deleted file mode 100644 > index f5ffd7e..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.c > +++ /dev/null > @@ -1,212 +0,0 @@ > -/* > - * Generic library functions for the MSF (Media and Switch Fabric) unit > - * found on the Intel IXP2400 network processor. > - * > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU Lesser General Public License as > - * published by the Free Software Foundation; either version 2.1 of the > - * License, or (at your option) any later version. > - */ > - > -#include <linux/kernel.h> > -#include <linux/init.h> > -#include <mach/hardware.h> > -#include <mach/ixp2000-regs.h> > -#include <asm/delay.h> > -#include <asm/io.h> > -#include "ixp2400-msf.h" > - > -/* > - * This is the Intel recommended PLL init procedure as described on > - * page 340 of the IXP2400/IXP2800 Programmer's Reference Manual. > - */ > -static void ixp2400_pll_init(struct ixp2400_msf_parameters *mp) > -{ > - int rx_dual_clock; > - int tx_dual_clock; > - u32 value; > - > - /* > - * If the RX mode is not 1x32, we have to enable both RX PLLs > - * (#0 and #1.) The same thing for the TX direction. > - */ > - rx_dual_clock = !!(mp->rx_mode & IXP2400_RX_MODE_WIDTH_MASK); > - tx_dual_clock = !!(mp->tx_mode & IXP2400_TX_MODE_WIDTH_MASK); > - > - /* > - * Read initial value. > - */ > - value = ixp2000_reg_read(IXP2000_MSF_CLK_CNTRL); > - > - /* > - * Put PLLs in powerdown and bypass mode. > - */ > - value |= 0x0000f0f0; > - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); > - > - /* > - * Set single or dual clock mode bits. > - */ > - value &= ~0x03000000; > - value |= (rx_dual_clock << 24) | (tx_dual_clock << 25); > - > - /* > - * Set multipliers. > - */ > - value &= ~0x00ff0000; > - value |= mp->rxclk01_multiplier << 16; > - value |= mp->rxclk23_multiplier << 18; > - value |= mp->txclk01_multiplier << 20; > - value |= mp->txclk23_multiplier << 22; > - > - /* > - * And write value. > - */ > - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); > - > - /* > - * Disable PLL bypass mode. > - */ > - value &= ~(0x00005000 | rx_dual_clock << 13 | tx_dual_clock << 15); > - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); > - > - /* > - * Turn on PLLs. > - */ > - value &= ~(0x00000050 | rx_dual_clock << 5 | tx_dual_clock << 7); > - ixp2000_reg_write(IXP2000_MSF_CLK_CNTRL, value); > - > - /* > - * Wait for PLLs to lock. There are lock status bits, but IXP2400 > - * erratum #65 says that these lock bits should not be relied upon > - * as they might not accurately reflect the true state of the PLLs. > - */ > - udelay(100); > -} > - > -/* > - * Needed according to p480 of Programmer's Reference Manual. > - */ > -static void ixp2400_msf_free_rbuf_entries(struct ixp2400_msf_parameters *mp) > -{ > - int size_bits; > - int i; > - > - /* > - * Work around IXP2400 erratum #69 (silent RBUF-to-DRAM transfer > - * corruption) in the Intel-recommended way: do not add the RBUF > - * elements susceptible to corruption to the freelist. > - */ > - size_bits = mp->rx_mode & IXP2400_RX_MODE_RBUF_SIZE_MASK; > - if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_64) { > - for (i = 1; i < 128; i++) { > - if (i == 9 || i == 18 || i == 27) > - continue; > - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); > - } > - } else if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_128) { > - for (i = 1; i < 64; i++) { > - if (i == 4 || i == 9 || i == 13) > - continue; > - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); > - } > - } else if (size_bits == IXP2400_RX_MODE_RBUF_SIZE_256) { > - for (i = 1; i < 32; i++) { > - if (i == 2 || i == 4 || i == 6) > - continue; > - ixp2000_reg_write(IXP2000_MSF_RBUF_ELEMENT_DONE, i); > - } > - } > -} > - > -static u32 ixp2400_msf_valid_channels(u32 reg) > -{ > - u32 channels; > - > - channels = 0; > - switch (reg & IXP2400_RX_MODE_WIDTH_MASK) { > - case IXP2400_RX_MODE_1x32: > - channels = 0x1; > - if (reg & IXP2400_RX_MODE_MPHY && > - !(reg & IXP2400_RX_MODE_MPHY_32)) > - channels = 0xf; > - break; > - > - case IXP2400_RX_MODE_2x16: > - channels = 0x5; > - break; > - > - case IXP2400_RX_MODE_4x8: > - channels = 0xf; > - break; > - > - case IXP2400_RX_MODE_1x16_2x8: > - channels = 0xd; > - break; > - } > - > - return channels; > -} > - > -static void ixp2400_msf_enable_rx(struct ixp2400_msf_parameters *mp) > -{ > - u32 value; > - > - value = ixp2000_reg_read(IXP2000_MSF_RX_CONTROL) & 0x0fffffff; > - value |= ixp2400_msf_valid_channels(mp->rx_mode) << 28; > - ixp2000_reg_write(IXP2000_MSF_RX_CONTROL, value); > -} > - > -static void ixp2400_msf_enable_tx(struct ixp2400_msf_parameters *mp) > -{ > - u32 value; > - > - value = ixp2000_reg_read(IXP2000_MSF_TX_CONTROL) & 0x0fffffff; > - value |= ixp2400_msf_valid_channels(mp->tx_mode) << 28; > - ixp2000_reg_write(IXP2000_MSF_TX_CONTROL, value); > -} > - > - > -void ixp2400_msf_init(struct ixp2400_msf_parameters *mp) > -{ > - u32 value; > - int i; > - > - /* > - * Init the RX/TX PLLs based on the passed parameter block. > - */ > - ixp2400_pll_init(mp); > - > - /* > - * Reset MSF. Bit 7 in IXP_RESET_0 resets the MSF. > - */ > - value = ixp2000_reg_read(IXP2000_RESET0); > - ixp2000_reg_write(IXP2000_RESET0, value | 0x80); > - ixp2000_reg_write(IXP2000_RESET0, value & ~0x80); > - > - /* > - * Initialise the RX section. > - */ > - ixp2000_reg_write(IXP2000_MSF_RX_MPHY_POLL_LIMIT, mp->rx_poll_ports - 1); > - ixp2000_reg_write(IXP2000_MSF_RX_CONTROL, mp->rx_mode); > - for (i = 0; i < 4; i++) { > - ixp2000_reg_write(IXP2000_MSF_RX_UP_CONTROL_0 + i, > - mp->rx_channel_mode[i]); > - } > - ixp2400_msf_free_rbuf_entries(mp); > - ixp2400_msf_enable_rx(mp); > - > - /* > - * Initialise the TX section. > - */ > - ixp2000_reg_write(IXP2000_MSF_TX_MPHY_POLL_LIMIT, mp->tx_poll_ports - 1); > - ixp2000_reg_write(IXP2000_MSF_TX_CONTROL, mp->tx_mode); > - for (i = 0; i < 4; i++) { > - ixp2000_reg_write(IXP2000_MSF_TX_UP_CONTROL_0 + i, > - mp->tx_channel_mode[i]); > - } > - ixp2400_msf_enable_tx(mp); > -} > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h b/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h > deleted file mode 100644 > index 3ac1af2..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400-msf.h > +++ /dev/null > @@ -1,115 +0,0 @@ > -/* > - * Generic library functions for the MSF (Media and Switch Fabric) unit > - * found on the Intel IXP2400 network processor. > - * > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU Lesser General Public License as > - * published by the Free Software Foundation; either version 2.1 of the > - * License, or (at your option) any later version. > - */ > - > -#ifndef __IXP2400_MSF_H > -#define __IXP2400_MSF_H > - > -struct ixp2400_msf_parameters > -{ > - u32 rx_mode; > - unsigned rxclk01_multiplier:2; > - unsigned rxclk23_multiplier:2; > - unsigned rx_poll_ports:6; > - u32 rx_channel_mode[4]; > - > - u32 tx_mode; > - unsigned txclk01_multiplier:2; > - unsigned txclk23_multiplier:2; > - unsigned tx_poll_ports:6; > - u32 tx_channel_mode[4]; > -}; > - > -void ixp2400_msf_init(struct ixp2400_msf_parameters *mp); > - > -#define IXP2400_PLL_MULTIPLIER_48 0x00 > -#define IXP2400_PLL_MULTIPLIER_24 0x01 > -#define IXP2400_PLL_MULTIPLIER_16 0x02 > -#define IXP2400_PLL_MULTIPLIER_12 0x03 > - > -#define IXP2400_RX_MODE_CSIX 0x00400000 > -#define IXP2400_RX_MODE_UTOPIA_POS 0x00000000 > -#define IXP2400_RX_MODE_WIDTH_MASK 0x00300000 > -#define IXP2400_RX_MODE_1x16_2x8 0x00300000 > -#define IXP2400_RX_MODE_4x8 0x00200000 > -#define IXP2400_RX_MODE_2x16 0x00100000 > -#define IXP2400_RX_MODE_1x32 0x00000000 > -#define IXP2400_RX_MODE_MPHY 0x00080000 > -#define IXP2400_RX_MODE_SPHY 0x00000000 > -#define IXP2400_RX_MODE_MPHY_32 0x00040000 > -#define IXP2400_RX_MODE_MPHY_4 0x00000000 > -#define IXP2400_RX_MODE_MPHY_POLLED_STATUS 0x00020000 > -#define IXP2400_RX_MODE_MPHY_DIRECT_STATUS 0x00000000 > -#define IXP2400_RX_MODE_CBUS_FULL_DUPLEX 0x00010000 > -#define IXP2400_RX_MODE_CBUS_SIMPLEX 0x00000000 > -#define IXP2400_RX_MODE_MPHY_LEVEL2 0x00004000 > -#define IXP2400_RX_MODE_MPHY_LEVEL3 0x00000000 > -#define IXP2400_RX_MODE_CBUS_8BIT 0x00002000 > -#define IXP2400_RX_MODE_CBUS_4BIT 0x00000000 > -#define IXP2400_RX_MODE_CSIX_SINGLE_FREELIST 0x00000200 > -#define IXP2400_RX_MODE_CSIX_SPLIT_FREELISTS 0x00000000 > -#define IXP2400_RX_MODE_RBUF_SIZE_MASK 0x0000000c > -#define IXP2400_RX_MODE_RBUF_SIZE_256 0x00000008 > -#define IXP2400_RX_MODE_RBUF_SIZE_128 0x00000004 > -#define IXP2400_RX_MODE_RBUF_SIZE_64 0x00000000 > - > -#define IXP2400_PORT_RX_MODE_SLAVE 0x00000040 > -#define IXP2400_PORT_RX_MODE_MASTER 0x00000000 > -#define IXP2400_PORT_RX_MODE_POS_PHY_L3 0x00000020 > -#define IXP2400_PORT_RX_MODE_POS_PHY_L2 0x00000000 > -#define IXP2400_PORT_RX_MODE_POS_PHY 0x00000010 > -#define IXP2400_PORT_RX_MODE_UTOPIA 0x00000000 > -#define IXP2400_PORT_RX_MODE_EVEN_PARITY 0x0000000c > -#define IXP2400_PORT_RX_MODE_ODD_PARITY 0x00000008 > -#define IXP2400_PORT_RX_MODE_NO_PARITY 0x00000000 > -#define IXP2400_PORT_RX_MODE_UTOPIA_BIG_CELLS 0x00000002 > -#define IXP2400_PORT_RX_MODE_UTOPIA_NORMAL_CELLS 0x00000000 > -#define IXP2400_PORT_RX_MODE_2_CYCLE_DECODE 0x00000001 > -#define IXP2400_PORT_RX_MODE_1_CYCLE_DECODE 0x00000000 > - > -#define IXP2400_TX_MODE_CSIX 0x00400000 > -#define IXP2400_TX_MODE_UTOPIA_POS 0x00000000 > -#define IXP2400_TX_MODE_WIDTH_MASK 0x00300000 > -#define IXP2400_TX_MODE_1x16_2x8 0x00300000 > -#define IXP2400_TX_MODE_4x8 0x00200000 > -#define IXP2400_TX_MODE_2x16 0x00100000 > -#define IXP2400_TX_MODE_1x32 0x00000000 > -#define IXP2400_TX_MODE_MPHY 0x00080000 > -#define IXP2400_TX_MODE_SPHY 0x00000000 > -#define IXP2400_TX_MODE_MPHY_32 0x00040000 > -#define IXP2400_TX_MODE_MPHY_4 0x00000000 > -#define IXP2400_TX_MODE_MPHY_POLLED_STATUS 0x00020000 > -#define IXP2400_TX_MODE_MPHY_DIRECT_STATUS 0x00000000 > -#define IXP2400_TX_MODE_CBUS_FULL_DUPLEX 0x00010000 > -#define IXP2400_TX_MODE_CBUS_SIMPLEX 0x00000000 > -#define IXP2400_TX_MODE_MPHY_LEVEL2 0x00004000 > -#define IXP2400_TX_MODE_MPHY_LEVEL3 0x00000000 > -#define IXP2400_TX_MODE_CBUS_8BIT 0x00002000 > -#define IXP2400_TX_MODE_CBUS_4BIT 0x00000000 > -#define IXP2400_TX_MODE_TBUF_SIZE_MASK 0x0000000c > -#define IXP2400_TX_MODE_TBUF_SIZE_256 0x00000008 > -#define IXP2400_TX_MODE_TBUF_SIZE_128 0x00000004 > -#define IXP2400_TX_MODE_TBUF_SIZE_64 0x00000000 > - > -#define IXP2400_PORT_TX_MODE_SLAVE 0x00000040 > -#define IXP2400_PORT_TX_MODE_MASTER 0x00000000 > -#define IXP2400_PORT_TX_MODE_POS_PHY 0x00000010 > -#define IXP2400_PORT_TX_MODE_UTOPIA 0x00000000 > -#define IXP2400_PORT_TX_MODE_EVEN_PARITY 0x0000000c > -#define IXP2400_PORT_TX_MODE_ODD_PARITY 0x00000008 > -#define IXP2400_PORT_TX_MODE_NO_PARITY 0x00000000 > -#define IXP2400_PORT_TX_MODE_UTOPIA_BIG_CELLS 0x00000002 > -#define IXP2400_PORT_TX_MODE_2_CYCLE_DECODE 0x00000001 > -#define IXP2400_PORT_TX_MODE_1_CYCLE_DECODE 0x00000000 > - > - > -#endif > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc b/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc > deleted file mode 100644 > index 42a73e3..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.uc > +++ /dev/null > @@ -1,408 +0,0 @@ > -/* > - * RX ucode for the Intel IXP2400 in POS-PHY mode. > - * Copyright (C) 2004, 2005 Lennert Buytenhek > - * Dedicated to Marija Kulikova. > - * > - * 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. > - * > - * Assumptions made in this code: > - * - The IXP2400 MSF is configured for POS-PHY mode, in a mode where > - * only one full element list is used. This includes, for example, > - * 1x32 SPHY and 1x32 MPHY32, but not 4x8 SPHY or 1x32 MPHY4. (This > - * is not an exhaustive list.) > - * - The RBUF uses 64-byte mpackets. > - * - RX descriptors reside in SRAM, and have the following format: > - * struct rx_desc > - * { > - * // to uengine > - * u32 buf_phys_addr; > - * u32 buf_length; > - * > - * // from uengine > - * u32 channel; > - * u32 pkt_length; > - * }; > - * - Packet data resides in DRAM. > - * - Packet buffer addresses are 8-byte aligned. > - * - Scratch ring 0 is rx_pending. > - * - Scratch ring 1 is rx_done, and has status condition 'full'. > - * - The host triggers rx_done flush and rx_pending refill on seeing INTA. > - * - This code is run on all eight threads of the microengine it runs on. > - * > - * Local memory is used for per-channel RX state. > - */ > - > -#define RX_THREAD_FREELIST_0 0x0030 > -#define RBUF_ELEMENT_DONE 0x0044 > - > -#define CHANNEL_FLAGS *l$index0[0] > -#define CHANNEL_FLAG_RECEIVING 1 > -#define PACKET_LENGTH *l$index0[1] > -#define PACKET_CHECKSUM *l$index0[2] > -#define BUFFER_HANDLE *l$index0[3] > -#define BUFFER_START *l$index0[4] > -#define BUFFER_LENGTH *l$index0[5] > - > -#define CHANNEL_STATE_SIZE 24 // in bytes > -#define CHANNEL_STATE_SHIFT 5 // ceil(log2(state size)) > - > - > - .sig volatile sig1 > - .sig volatile sig2 > - .sig volatile sig3 > - > - .sig mpacket_arrived > - .reg add_to_rx_freelist > - .reg read $rsw0, $rsw1 > - .xfer_order $rsw0 $rsw1 > - > - .reg zero > - > - /* > - * Initialise add_to_rx_freelist. > - */ > - .begin > - .reg temp > - .reg temp2 > - > - immed[add_to_rx_freelist, RX_THREAD_FREELIST_0] > - immed_w1[add_to_rx_freelist, (&$rsw0 | (&mpacket_arrived << 12))] > - > - local_csr_rd[ACTIVE_CTX_STS] > - immed[temp, 0] > - alu[temp2, temp, and, 0x1f] > - alu_shf[add_to_rx_freelist, add_to_rx_freelist, or, temp2, <<20] > - alu[temp2, temp, and, 0x80] > - alu_shf[add_to_rx_freelist, add_to_rx_freelist, or, temp2, <<18] > - .end > - > - immed[zero, 0] > - > - /* > - * Skip context 0 initialisation? > - */ > - .begin > - br!=ctx[0, mpacket_receive_loop#] > - .end > - > - /* > - * Initialise local memory. > - */ > - .begin > - .reg addr > - .reg temp > - > - immed[temp, 0] > - init_local_mem_loop#: > - alu_shf[addr, --, b, temp, <<CHANNEL_STATE_SHIFT] > - local_csr_wr[ACTIVE_LM_ADDR_0, addr] > - nop > - nop > - nop > - > - immed[CHANNEL_FLAGS, 0] > - > - alu[temp, temp, +, 1] > - alu[--, temp, and, 0x20] > - beq[init_local_mem_loop#] > - .end > - > - /* > - * Initialise signal pipeline. > - */ > - .begin > - local_csr_wr[SAME_ME_SIGNAL, (&sig1 << 3)] > - .set_sig sig1 > - > - local_csr_wr[SAME_ME_SIGNAL, (&sig2 << 3)] > - .set_sig sig2 > - > - local_csr_wr[SAME_ME_SIGNAL, (&sig3 << 3)] > - .set_sig sig3 > - .end > - > -mpacket_receive_loop#: > - /* > - * Synchronise and wait for mpacket. > - */ > - .begin > - ctx_arb[sig1] > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig1 << 3))] > - > - msf[fast_wr, --, add_to_rx_freelist, 0] > - .set_sig mpacket_arrived > - ctx_arb[mpacket_arrived] > - .set $rsw0 $rsw1 > - .end > - > - /* > - * We halt if we see {inbparerr,parerr,null,soperror}. > - */ > - .begin > - alu_shf[--, 0x1b, and, $rsw0, >>8] > - bne[abort_rswerr#] > - .end > - > - /* > - * Point local memory pointer to this channel's state area. > - */ > - .begin > - .reg chanaddr > - > - alu[chanaddr, $rsw0, and, 0x1f] > - alu_shf[chanaddr, --, b, chanaddr, <<CHANNEL_STATE_SHIFT] > - local_csr_wr[ACTIVE_LM_ADDR_0, chanaddr] > - nop > - nop > - nop > - .end > - > - /* > - * Check whether we received a SOP mpacket while we were already > - * working on a packet, or a non-SOP mpacket while there was no > - * packet pending. (SOP == RECEIVING -> abort) If everything's > - * okay, update the RECEIVING flag to reflect our new state. > - */ > - .begin > - .reg temp > - .reg eop > - > - #if CHANNEL_FLAG_RECEIVING != 1 > - #error CHANNEL_FLAG_RECEIVING is not 1 > - #endif > - > - alu_shf[temp, 1, and, $rsw0, >>15] > - alu[temp, temp, xor, CHANNEL_FLAGS] > - alu[--, temp, and, CHANNEL_FLAG_RECEIVING] > - beq[abort_proterr#] > - > - alu_shf[eop, 1, and, $rsw0, >>14] > - alu[CHANNEL_FLAGS, temp, xor, eop] > - .end > - > - /* > - * Copy the mpacket into the right spot, and in case of EOP, > - * write back the descriptor and pass the packet on. > - */ > - .begin > - .reg buffer_offset > - .reg _packet_length > - .reg _packet_checksum > - .reg _buffer_handle > - .reg _buffer_start > - .reg _buffer_length > - > - /* > - * Determine buffer_offset, _packet_length and > - * _packet_checksum. > - */ > - .begin > - .reg temp > - > - alu[--, 1, and, $rsw0, >>15] > - beq[not_sop#] > - > - immed[PACKET_LENGTH, 0] > - immed[PACKET_CHECKSUM, 0] > - > - not_sop#: > - alu[buffer_offset, --, b, PACKET_LENGTH] > - alu_shf[temp, 0xff, and, $rsw0, >>16] > - alu[_packet_length, buffer_offset, +, temp] > - alu[PACKET_LENGTH, --, b, _packet_length] > - > - immed[temp, 0xffff] > - alu[temp, $rsw1, and, temp] > - alu[_packet_checksum, PACKET_CHECKSUM, +, temp] > - alu[PACKET_CHECKSUM, --, b, _packet_checksum] > - .end > - > - /* > - * Allocate buffer in case of SOP. > - */ > - .begin > - .reg temp > - > - alu[temp, 1, and, $rsw0, >>15] > - beq[skip_buffer_alloc#] > - > - .begin > - .sig zzz > - .reg read $stemp $stemp2 > - .xfer_order $stemp $stemp2 > - > - rx_nobufs#: > - scratch[get, $stemp, zero, 0, 1], ctx_swap[zzz] > - alu[_buffer_handle, --, b, $stemp] > - beq[rx_nobufs#] > - > - sram[read, $stemp, _buffer_handle, 0, 2], > - ctx_swap[zzz] > - alu[_buffer_start, --, b, $stemp] > - alu[_buffer_length, --, b, $stemp2] > - .end > - > - skip_buffer_alloc#: > - .end > - > - /* > - * Resynchronise. > - */ > - .begin > - ctx_arb[sig2] > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig2 << 3))] > - .end > - > - /* > - * Synchronise buffer state. > - */ > - .begin > - .reg temp > - > - alu[temp, 1, and, $rsw0, >>15] > - beq[copy_from_local_mem#] > - > - alu[BUFFER_HANDLE, --, b, _buffer_handle] > - alu[BUFFER_START, --, b, _buffer_start] > - alu[BUFFER_LENGTH, --, b, _buffer_length] > - br[sync_state_done#] > - > - copy_from_local_mem#: > - alu[_buffer_handle, --, b, BUFFER_HANDLE] > - alu[_buffer_start, --, b, BUFFER_START] > - alu[_buffer_length, --, b, BUFFER_LENGTH] > - > - sync_state_done#: > - .end > - > -#if 0 > - /* > - * Debug buffer state management. > - */ > - .begin > - .reg temp > - > - alu[temp, 1, and, $rsw0, >>14] > - beq[no_poison#] > - immed[BUFFER_HANDLE, 0xdead] > - immed[BUFFER_START, 0xdead] > - immed[BUFFER_LENGTH, 0xdead] > - no_poison#: > - > - immed[temp, 0xdead] > - alu[--, _buffer_handle, -, temp] > - beq[state_corrupted#] > - alu[--, _buffer_start, -, temp] > - beq[state_corrupted#] > - alu[--, _buffer_length, -, temp] > - beq[state_corrupted#] > - .end > -#endif > - > - /* > - * Check buffer length. > - */ > - .begin > - alu[--, _buffer_length, -, _packet_length] > - blo[buffer_overflow#] > - .end > - > - /* > - * Copy the mpacket and give back the RBUF element. > - */ > - .begin > - .reg element > - .reg xfer_size > - .reg temp > - .sig copy_sig > - > - alu_shf[element, 0x7f, and, $rsw0, >>24] > - alu_shf[xfer_size, 0xff, and, $rsw0, >>16] > - > - alu[xfer_size, xfer_size, -, 1] > - alu_shf[xfer_size, 0x10, or, xfer_size, >>3] > - alu_shf[temp, 0x10, or, xfer_size, <<21] > - alu_shf[temp, temp, or, element, <<11] > - alu_shf[--, temp, or, 1, <<18] > - > - dram[rbuf_rd, --, _buffer_start, buffer_offset, max_8], > - indirect_ref, sig_done[copy_sig] > - ctx_arb[copy_sig] > - > - alu[temp, RBUF_ELEMENT_DONE, or, element, <<16] > - msf[fast_wr, --, temp, 0] > - .end > - > - /* > - * If EOP, write back the packet descriptor. > - */ > - .begin > - .reg write $stemp $stemp2 > - .xfer_order $stemp $stemp2 > - .sig zzz > - > - alu_shf[--, 1, and, $rsw0, >>14] > - beq[no_writeback#] > - > - alu[$stemp, $rsw0, and, 0x1f] > - alu[$stemp2, --, b, _packet_length] > - sram[write, $stemp, _buffer_handle, 8, 2], ctx_swap[zzz] > - > - no_writeback#: > - .end > - > - /* > - * Resynchronise. > - */ > - .begin > - ctx_arb[sig3] > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig3 << 3))] > - .end > - > - /* > - * If EOP, put the buffer back onto the scratch ring. > - */ > - .begin > - .reg write $stemp > - .sig zzz > - > - br_inp_state[SCR_Ring1_Status, rx_done_ring_overflow#] > - > - alu_shf[--, 1, and, $rsw0, >>14] > - beq[mpacket_receive_loop#] > - > - alu[--, 1, and, $rsw0, >>10] > - bne[rxerr#] > - > - alu[$stemp, --, b, _buffer_handle] > - scratch[put, $stemp, zero, 4, 1], ctx_swap[zzz] > - cap[fast_wr, 0, XSCALE_INT_A] > - br[mpacket_receive_loop#] > - > - rxerr#: > - alu[$stemp, --, b, _buffer_handle] > - scratch[put, $stemp, zero, 0, 1], ctx_swap[zzz] > - br[mpacket_receive_loop#] > - .end > - .end > - > - > -abort_rswerr#: > - halt > - > -abort_proterr#: > - halt > - > -state_corrupted#: > - halt > - > -buffer_overflow#: > - halt > - > -rx_done_ring_overflow#: > - halt > - > - > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode b/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode > deleted file mode 100644 > index e8aee2f..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_rx.ucode > +++ /dev/null > @@ -1,130 +0,0 @@ > -static struct ixp2000_uengine_code ixp2400_rx = > -{ > - .cpu_model_bitmask = 0x000003fe, > - .cpu_min_revision = 0, > - .cpu_max_revision = 255, > - > - .uengine_parameters = IXP2000_UENGINE_8_CONTEXTS | > - IXP2000_UENGINE_PRN_UPDATE_EVERY | > - IXP2000_UENGINE_NN_FROM_PREVIOUS | > - IXP2000_UENGINE_ASSERT_EMPTY_AT_0 | > - IXP2000_UENGINE_LM_ADDR1_PER_CONTEXT | > - IXP2000_UENGINE_LM_ADDR0_PER_CONTEXT, > - > - .initial_reg_values = (struct ixp2000_reg_value []) { > - { -1, -1 } > - }, > - > - .num_insns = 109, > - .insns = (u8 []) { > - 0xf0, 0x00, 0x0c, 0xc0, 0x05, > - 0xf4, 0x44, 0x0c, 0x00, 0x05, > - 0xfc, 0x04, 0x4c, 0x00, 0x00, > - 0xf0, 0x00, 0x00, 0x3b, 0x00, > - 0xb4, 0x40, 0xf0, 0x3b, 0x1f, > - 0x8a, 0xc0, 0x50, 0x3e, 0x05, > - 0xb4, 0x40, 0xf0, 0x3b, 0x80, > - 0x9a, 0xe0, 0x00, 0x3e, 0x05, > - 0xf0, 0x00, 0x00, 0x07, 0x00, > - 0xd8, 0x05, 0xc0, 0x00, 0x11, > - 0xf0, 0x00, 0x00, 0x0f, 0x00, > - 0x91, 0xb0, 0x20, 0x0e, 0x00, > - 0xfc, 0x06, 0x60, 0x0b, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0xf0, 0x00, 0x0c, 0x02, 0x00, > - 0xb0, 0xc0, 0x30, 0x0f, 0x01, > - 0xa4, 0x70, 0x00, 0x0f, 0x20, > - 0xd8, 0x02, 0xc0, 0x01, 0x00, > - 0xfc, 0x10, 0xac, 0x23, 0x08, > - 0xfc, 0x10, 0xac, 0x43, 0x10, > - 0xfc, 0x10, 0xac, 0x63, 0x18, > - 0xe0, 0x00, 0x00, 0x00, 0x02, > - 0xfc, 0x10, 0xae, 0x23, 0x88, > - 0x3d, 0x00, 0x04, 0x03, 0x20, > - 0xe0, 0x00, 0x00, 0x00, 0x10, > - 0x84, 0x82, 0x02, 0x01, 0x3b, > - 0xd8, 0x1a, 0x00, 0x01, 0x01, > - 0xb4, 0x00, 0x8c, 0x7d, 0x80, > - 0x91, 0xb0, 0x80, 0x22, 0x00, > - 0xfc, 0x06, 0x60, 0x23, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0xf0, 0x00, 0x0c, 0x03, 0x00, > - 0x94, 0xf0, 0x92, 0x01, 0x21, > - 0xac, 0x40, 0x60, 0x26, 0x00, > - 0xa4, 0x30, 0x0c, 0x04, 0x06, > - 0xd8, 0x1a, 0x40, 0x01, 0x00, > - 0x94, 0xe0, 0xa2, 0x01, 0x21, > - 0xac, 0x20, 0x00, 0x28, 0x06, > - 0x84, 0xf2, 0x02, 0x01, 0x21, > - 0xd8, 0x0b, 0x40, 0x01, 0x00, > - 0xf0, 0x00, 0x0c, 0x02, 0x01, > - 0xf0, 0x00, 0x0c, 0x02, 0x02, > - 0xa0, 0x00, 0x08, 0x04, 0x00, > - 0x95, 0x00, 0xc6, 0x01, 0xff, > - 0xa0, 0x80, 0x10, 0x30, 0x00, > - 0xa0, 0x60, 0x1c, 0x00, 0x01, > - 0xf0, 0x0f, 0xf0, 0x33, 0xff, > - 0xb4, 0x00, 0xc0, 0x31, 0x81, > - 0xb0, 0x80, 0xb0, 0x32, 0x02, > - 0xa0, 0x20, 0x20, 0x2c, 0x00, > - 0x94, 0xf0, 0xd2, 0x01, 0x21, > - 0xd8, 0x0f, 0x40, 0x01, 0x00, > - 0x19, 0x40, 0x10, 0x04, 0x20, > - 0xa0, 0x00, 0x26, 0x04, 0x00, > - 0xd8, 0x0d, 0xc0, 0x01, 0x00, > - 0x00, 0x42, 0x10, 0x80, 0x02, > - 0xb0, 0x00, 0x46, 0x04, 0x00, > - 0xb0, 0x00, 0x56, 0x08, 0x00, > - 0xe0, 0x00, 0x00, 0x00, 0x04, > - 0xfc, 0x10, 0xae, 0x43, 0x90, > - 0x84, 0xf0, 0x32, 0x01, 0x21, > - 0xd8, 0x11, 0x40, 0x01, 0x00, > - 0xa0, 0x60, 0x3c, 0x00, 0x02, > - 0xa0, 0x20, 0x40, 0x10, 0x00, > - 0xa0, 0x20, 0x50, 0x14, 0x00, > - 0xd8, 0x12, 0x00, 0x00, 0x18, > - 0xa0, 0x00, 0x28, 0x0c, 0x00, > - 0xb0, 0x00, 0x48, 0x10, 0x00, > - 0xb0, 0x00, 0x58, 0x14, 0x00, > - 0xaa, 0xf0, 0x00, 0x14, 0x01, > - 0xd8, 0x1a, 0xc0, 0x01, 0x05, > - 0x85, 0x80, 0x42, 0x01, 0xff, > - 0x95, 0x00, 0x66, 0x01, 0xff, > - 0xba, 0xc0, 0x60, 0x1b, 0x01, > - 0x9a, 0x30, 0x60, 0x19, 0x30, > - 0x9a, 0xb0, 0x70, 0x1a, 0x30, > - 0x9b, 0x50, 0x78, 0x1e, 0x04, > - 0x8a, 0xe2, 0x08, 0x1e, 0x21, > - 0x6a, 0x4e, 0x00, 0x13, 0x00, > - 0xe0, 0x00, 0x00, 0x00, 0x30, > - 0x9b, 0x00, 0x7a, 0x92, 0x04, > - 0x3d, 0x00, 0x04, 0x1f, 0x20, > - 0x84, 0xe2, 0x02, 0x01, 0x21, > - 0xd8, 0x16, 0x80, 0x01, 0x00, > - 0xa4, 0x18, 0x0c, 0x7d, 0x80, > - 0xa0, 0x58, 0x1c, 0x00, 0x01, > - 0x01, 0x42, 0x00, 0xa0, 0x02, > - 0xe0, 0x00, 0x00, 0x00, 0x08, > - 0xfc, 0x10, 0xae, 0x63, 0x98, > - 0xd8, 0x1b, 0x00, 0xc2, 0x14, > - 0x84, 0xe2, 0x02, 0x01, 0x21, > - 0xd8, 0x05, 0xc0, 0x01, 0x00, > - 0x84, 0xa2, 0x02, 0x01, 0x21, > - 0xd8, 0x19, 0x40, 0x01, 0x01, > - 0xa0, 0x58, 0x0c, 0x00, 0x02, > - 0x1a, 0x40, 0x00, 0x04, 0x24, > - 0x33, 0x00, 0x01, 0x2f, 0x20, > - 0xd8, 0x05, 0xc0, 0x00, 0x18, > - 0xa0, 0x58, 0x0c, 0x00, 0x02, > - 0x1a, 0x40, 0x00, 0x04, 0x20, > - 0xd8, 0x05, 0xc0, 0x00, 0x18, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - } > -}; > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc b/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc > deleted file mode 100644 > index d090d18..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.uc > +++ /dev/null > @@ -1,272 +0,0 @@ > -/* > - * TX ucode for the Intel IXP2400 in POS-PHY mode. > - * Copyright (C) 2004, 2005 Lennert Buytenhek > - * Dedicated to Marija Kulikova. > - * > - * 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. > - * > - * Assumptions made in this code: > - * - The IXP2400 MSF is configured for POS-PHY mode, in a mode where > - * only one TBUF partition is used. This includes, for example, > - * 1x32 SPHY and 1x32 MPHY32, but not 4x8 SPHY or 1x32 MPHY4. (This > - * is not an exhaustive list.) > - * - The TBUF uses 64-byte mpackets. > - * - TX descriptors reside in SRAM, and have the following format: > - * struct tx_desc > - * { > - * // to uengine > - * u32 buf_phys_addr; > - * u32 pkt_length; > - * u32 channel; > - * }; > - * - Packet data resides in DRAM. > - * - Packet buffer addresses are 8-byte aligned. > - * - Scratch ring 2 is tx_pending. > - * - Scratch ring 3 is tx_done, and has status condition 'full'. > - * - This code is run on all eight threads of the microengine it runs on. > - */ > - > -#define TX_SEQUENCE_0 0x0060 > -#define TBUF_CTRL 0x1800 > - > -#define PARTITION_SIZE 128 > -#define PARTITION_THRESH 96 > - > - > - .sig volatile sig1 > - .sig volatile sig2 > - .sig volatile sig3 > - > - .reg @old_tx_seq_0 > - .reg @mpkts_in_flight > - .reg @next_tbuf_mpacket > - > - .reg @buffer_handle > - .reg @buffer_start > - .reg @packet_length > - .reg @channel > - .reg @packet_offset > - > - .reg zero > - > - immed[zero, 0] > - > - /* > - * Skip context 0 initialisation? > - */ > - .begin > - br!=ctx[0, mpacket_tx_loop#] > - .end > - > - /* > - * Wait until all pending TBUF elements have been transmitted. > - */ > - .begin > - .reg read $tx > - .sig zzz > - > - loop_empty#: > - msf[read, $tx, zero, TX_SEQUENCE_0, 1], ctx_swap[zzz] > - alu_shf[--, --, b, $tx, >>31] > - beq[loop_empty#] > - > - alu[@old_tx_seq_0, --, b, $tx] > - .end > - > - immed[@mpkts_in_flight, 0] > - alu[@next_tbuf_mpacket, @old_tx_seq_0, and, (PARTITION_SIZE - 1)] > - > - immed[@buffer_handle, 0] > - > - /* > - * Initialise signal pipeline. > - */ > - .begin > - local_csr_wr[SAME_ME_SIGNAL, (&sig1 << 3)] > - .set_sig sig1 > - > - local_csr_wr[SAME_ME_SIGNAL, (&sig2 << 3)] > - .set_sig sig2 > - > - local_csr_wr[SAME_ME_SIGNAL, (&sig3 << 3)] > - .set_sig sig3 > - .end > - > -mpacket_tx_loop#: > - .begin > - .reg tbuf_element_index > - .reg buffer_handle > - .reg sop_eop > - .reg packet_data > - .reg channel > - .reg mpacket_size > - > - /* > - * If there is no packet currently being transmitted, > - * dequeue the next TX descriptor, and fetch the buffer > - * address, packet length and destination channel number. > - */ > - .begin > - .reg read $stemp $stemp2 $stemp3 > - .xfer_order $stemp $stemp2 $stemp3 > - .sig zzz > - > - ctx_arb[sig1] > - > - alu[--, --, b, @buffer_handle] > - bne[already_got_packet#] > - > - tx_nobufs#: > - scratch[get, $stemp, zero, 8, 1], ctx_swap[zzz] > - alu[@buffer_handle, --, b, $stemp] > - beq[tx_nobufs#] > - > - sram[read, $stemp, $stemp, 0, 3], ctx_swap[zzz] > - alu[@buffer_start, --, b, $stemp] > - alu[@packet_length, --, b, $stemp2] > - beq[zero_byte_packet#] > - alu[@channel, --, b, $stemp3] > - immed[@packet_offset, 0] > - > - already_got_packet#: > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig1 << 3))] > - .end > - > - /* > - * Determine tbuf element index, SOP/EOP flags, mpacket > - * offset and mpacket size and cache buffer_handle and > - * channel number. > - */ > - .begin > - alu[tbuf_element_index, --, b, @next_tbuf_mpacket] > - alu[@next_tbuf_mpacket, @next_tbuf_mpacket, +, 1] > - alu[@next_tbuf_mpacket, @next_tbuf_mpacket, and, > - (PARTITION_SIZE - 1)] > - > - alu[buffer_handle, --, b, @buffer_handle] > - immed[@buffer_handle, 0] > - > - immed[sop_eop, 1] > - > - alu[packet_data, --, b, @packet_offset] > - bne[no_sop#] > - alu[sop_eop, sop_eop, or, 2] > - no_sop#: > - alu[packet_data, packet_data, +, @buffer_start] > - > - alu[channel, --, b, @channel] > - > - alu[mpacket_size, @packet_length, -, @packet_offset] > - alu[--, 64, -, mpacket_size] > - bhs[eop#] > - alu[@buffer_handle, --, b, buffer_handle] > - immed[mpacket_size, 64] > - alu[sop_eop, sop_eop, and, 2] > - eop#: > - > - alu[@packet_offset, @packet_offset, +, mpacket_size] > - .end > - > - /* > - * Wait until there's enough space in the TBUF. > - */ > - .begin > - .reg read $tx > - .reg temp > - .sig zzz > - > - ctx_arb[sig2] > - > - br[test_space#] > - > - loop_space#: > - msf[read, $tx, zero, TX_SEQUENCE_0, 1], ctx_swap[zzz] > - > - alu[temp, $tx, -, @old_tx_seq_0] > - alu[temp, temp, and, 0xff] > - alu[@mpkts_in_flight, @mpkts_in_flight, -, temp] > - > - alu[@old_tx_seq_0, --, b, $tx] > - > - test_space#: > - alu[--, PARTITION_THRESH, -, @mpkts_in_flight] > - blo[loop_space#] > - > - alu[@mpkts_in_flight, @mpkts_in_flight, +, 1] > - > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig2 << 3))] > - .end > - > - /* > - * Copy the packet data to the TBUF. > - */ > - .begin > - .reg temp > - .sig copy_sig > - > - alu[temp, mpacket_size, -, 1] > - alu_shf[temp, 0x10, or, temp, >>3] > - alu_shf[temp, 0x10, or, temp, <<21] > - alu_shf[temp, temp, or, tbuf_element_index, <<11] > - alu_shf[--, temp, or, 1, <<18] > - > - dram[tbuf_wr, --, packet_data, 0, max_8], > - indirect_ref, sig_done[copy_sig] > - ctx_arb[copy_sig] > - .end > - > - /* > - * Mark TBUF element as ready-to-be-transmitted. > - */ > - .begin > - .reg write $tsw $tsw2 > - .xfer_order $tsw $tsw2 > - .reg temp > - .sig zzz > - > - alu_shf[temp, channel, or, mpacket_size, <<24] > - alu_shf[$tsw, temp, or, sop_eop, <<8] > - immed[$tsw2, 0] > - > - immed[temp, TBUF_CTRL] > - alu_shf[temp, temp, or, tbuf_element_index, <<3] > - msf[write, $tsw, temp, 0, 2], ctx_swap[zzz] > - .end > - > - /* > - * Resynchronise. > - */ > - .begin > - ctx_arb[sig3] > - local_csr_wr[SAME_ME_SIGNAL, (0x80 | (&sig3 << 3))] > - .end > - > - /* > - * If this was an EOP mpacket, recycle the TX buffer > - * and signal the host. > - */ > - .begin > - .reg write $stemp > - .sig zzz > - > - alu[--, sop_eop, and, 1] > - beq[mpacket_tx_loop#] > - > - tx_done_ring_full#: > - br_inp_state[SCR_Ring3_Status, tx_done_ring_full#] > - > - alu[$stemp, --, b, buffer_handle] > - scratch[put, $stemp, zero, 12, 1], ctx_swap[zzz] > - cap[fast_wr, 0, XSCALE_INT_A] > - br[mpacket_tx_loop#] > - .end > - .end > - > - > -zero_byte_packet#: > - halt > - > - > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode b/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode > deleted file mode 100644 > index a433e24..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixp2400_tx.ucode > +++ /dev/null > @@ -1,98 +0,0 @@ > -static struct ixp2000_uengine_code ixp2400_tx = > -{ > - .cpu_model_bitmask = 0x000003fe, > - .cpu_min_revision = 0, > - .cpu_max_revision = 255, > - > - .uengine_parameters = IXP2000_UENGINE_8_CONTEXTS | > - IXP2000_UENGINE_PRN_UPDATE_EVERY | > - IXP2000_UENGINE_NN_FROM_PREVIOUS | > - IXP2000_UENGINE_ASSERT_EMPTY_AT_0 | > - IXP2000_UENGINE_LM_ADDR1_PER_CONTEXT | > - IXP2000_UENGINE_LM_ADDR0_PER_CONTEXT, > - > - .initial_reg_values = (struct ixp2000_reg_value []) { > - { -1, -1 } > - }, > - > - .num_insns = 77, > - .insns = (u8 []) { > - 0xf0, 0x00, 0x00, 0x07, 0x00, > - 0xd8, 0x03, 0x00, 0x00, 0x11, > - 0x3c, 0x40, 0x00, 0x04, 0xe0, > - 0x81, 0xf2, 0x02, 0x01, 0x00, > - 0xd8, 0x00, 0x80, 0x01, 0x00, > - 0xb0, 0x08, 0x06, 0x00, 0x00, > - 0xf0, 0x00, 0x0c, 0x00, 0x80, > - 0xb4, 0x49, 0x02, 0x03, 0x7f, > - 0xf0, 0x00, 0x02, 0x83, 0x00, > - 0xfc, 0x10, 0xac, 0x23, 0x08, > - 0xfc, 0x10, 0xac, 0x43, 0x10, > - 0xfc, 0x10, 0xac, 0x63, 0x18, > - 0xe0, 0x00, 0x00, 0x00, 0x02, > - 0xa0, 0x30, 0x02, 0x80, 0x00, > - 0xd8, 0x06, 0x00, 0x01, 0x01, > - 0x19, 0x40, 0x00, 0x04, 0x28, > - 0xb0, 0x0a, 0x06, 0x00, 0x00, > - 0xd8, 0x03, 0xc0, 0x01, 0x00, > - 0x00, 0x44, 0x00, 0x80, 0x80, > - 0xa0, 0x09, 0x06, 0x00, 0x00, > - 0xb0, 0x0b, 0x06, 0x04, 0x00, > - 0xd8, 0x13, 0x00, 0x01, 0x00, > - 0xb0, 0x0c, 0x06, 0x08, 0x00, > - 0xf0, 0x00, 0x0c, 0x00, 0xa0, > - 0xfc, 0x10, 0xae, 0x23, 0x88, > - 0xa0, 0x00, 0x12, 0x40, 0x00, > - 0xb0, 0xc9, 0x02, 0x43, 0x01, > - 0xb4, 0x49, 0x02, 0x43, 0x7f, > - 0xb0, 0x00, 0x22, 0x80, 0x00, > - 0xf0, 0x00, 0x02, 0x83, 0x00, > - 0xf0, 0x00, 0x0c, 0x04, 0x02, > - 0xb0, 0x40, 0x6c, 0x00, 0xa0, > - 0xd8, 0x08, 0x80, 0x01, 0x01, > - 0xaa, 0x00, 0x2c, 0x08, 0x02, > - 0xa0, 0xc0, 0x30, 0x18, 0x90, > - 0xa0, 0x00, 0x43, 0x00, 0x00, > - 0xba, 0xc0, 0x32, 0xc0, 0xa0, > - 0xaa, 0xb0, 0x00, 0x0f, 0x40, > - 0xd8, 0x0a, 0x80, 0x01, 0x04, > - 0xb0, 0x0a, 0x00, 0x08, 0x00, > - 0xf0, 0x00, 0x00, 0x0f, 0x40, > - 0xa4, 0x00, 0x2c, 0x08, 0x02, > - 0xa0, 0x8a, 0x00, 0x0c, 0xa0, > - 0xe0, 0x00, 0x00, 0x00, 0x04, > - 0xd8, 0x0c, 0x80, 0x00, 0x18, > - 0x3c, 0x40, 0x00, 0x04, 0xe0, > - 0xba, 0x80, 0x42, 0x01, 0x80, > - 0xb4, 0x40, 0x40, 0x13, 0xff, > - 0xaa, 0x88, 0x00, 0x10, 0x80, > - 0xb0, 0x08, 0x06, 0x00, 0x00, > - 0xaa, 0xf0, 0x0d, 0x80, 0x80, > - 0xd8, 0x0b, 0x40, 0x01, 0x05, > - 0xa0, 0x88, 0x0c, 0x04, 0x80, > - 0xfc, 0x10, 0xae, 0x43, 0x90, > - 0xba, 0xc0, 0x50, 0x0f, 0x01, > - 0x9a, 0x30, 0x50, 0x15, 0x30, > - 0x9a, 0xb0, 0x50, 0x16, 0x30, > - 0x9b, 0x50, 0x58, 0x16, 0x01, > - 0x8a, 0xe2, 0x08, 0x16, 0x21, > - 0x6b, 0x4e, 0x00, 0x83, 0x03, > - 0xe0, 0x00, 0x00, 0x00, 0x30, > - 0x9a, 0x80, 0x70, 0x0e, 0x04, > - 0x8b, 0x88, 0x08, 0x1e, 0x02, > - 0xf0, 0x00, 0x0c, 0x01, 0x81, > - 0xf0, 0x01, 0x80, 0x1f, 0x00, > - 0x9b, 0xd0, 0x78, 0x1e, 0x01, > - 0x3d, 0x42, 0x00, 0x1c, 0x20, > - 0xe0, 0x00, 0x00, 0x00, 0x08, > - 0xfc, 0x10, 0xae, 0x63, 0x98, > - 0xa4, 0x30, 0x0c, 0x04, 0x02, > - 0xd8, 0x03, 0x00, 0x01, 0x00, > - 0xd8, 0x11, 0xc1, 0x42, 0x14, > - 0xa0, 0x18, 0x00, 0x08, 0x00, > - 0x1a, 0x40, 0x00, 0x04, 0x2c, > - 0x33, 0x00, 0x01, 0x2f, 0x20, > - 0xd8, 0x03, 0x00, 0x00, 0x18, > - 0xe0, 0x00, 0x02, 0x00, 0x00, > - } > -}; > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev.c b/drivers/net/ethernet/xscale/ixp2000/ixpdev.c > deleted file mode 100644 > index 4500837..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev.c > +++ /dev/null > @@ -1,437 +0,0 @@ > -/* > - * IXP2000 MSF network device driver > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#include <linux/module.h> > -#include <linux/kernel.h> > -#include <linux/netdevice.h> > -#include <linux/etherdevice.h> > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/moduleparam.h> > -#include <linux/gfp.h> > -#include <asm/hardware/uengine.h> > -#include <asm/io.h> > -#include "ixp2400_rx.ucode" > -#include "ixp2400_tx.ucode" > -#include "ixpdev_priv.h" > -#include "ixpdev.h" > -#include "pm3386.h" > - > -#define DRV_MODULE_VERSION "0.2" > - > -static int nds_count; > -static struct net_device **nds; > -static int nds_open; > -static void (*set_port_admin_status)(int port, int up); > - > -static struct ixpdev_rx_desc * const rx_desc = > - (struct ixpdev_rx_desc *)(IXP2000_SRAM0_VIRT_BASE + RX_BUF_DESC_BASE); > -static struct ixpdev_tx_desc * const tx_desc = > - (struct ixpdev_tx_desc *)(IXP2000_SRAM0_VIRT_BASE + TX_BUF_DESC_BASE); > -static int tx_pointer; > - > - > -static int ixpdev_xmit(struct sk_buff *skb, struct net_device *dev) > -{ > - struct ixpdev_priv *ip = netdev_priv(dev); > - struct ixpdev_tx_desc *desc; > - int entry; > - unsigned long flags; > - > - if (unlikely(skb->len > PAGE_SIZE)) { > - /* @@@ Count drops. */ > - dev_kfree_skb(skb); > - return NETDEV_TX_OK; > - } > - > - entry = tx_pointer; > - tx_pointer = (tx_pointer + 1) % TX_BUF_COUNT; > - > - desc = tx_desc + entry; > - desc->pkt_length = skb->len; > - desc->channel = ip->channel; > - > - skb_copy_and_csum_dev(skb, phys_to_virt(desc->buf_addr)); > - dev_kfree_skb(skb); > - > - ixp2000_reg_write(RING_TX_PENDING, > - TX_BUF_DESC_BASE + (entry * sizeof(struct ixpdev_tx_desc))); > - > - local_irq_save(flags); > - ip->tx_queue_entries++; > - if (ip->tx_queue_entries == TX_BUF_COUNT_PER_CHAN) > - netif_stop_queue(dev); > - local_irq_restore(flags); > - > - return NETDEV_TX_OK; > -} > - > - > -static int ixpdev_rx(struct net_device *dev, int processed, int budget) > -{ > - while (processed < budget) { > - struct ixpdev_rx_desc *desc; > - struct sk_buff *skb; > - void *buf; > - u32 _desc; > - > - _desc = ixp2000_reg_read(RING_RX_DONE); > - if (_desc == 0) > - return 0; > - > - desc = rx_desc + > - ((_desc - RX_BUF_DESC_BASE) / sizeof(struct ixpdev_rx_desc)); > - buf = phys_to_virt(desc->buf_addr); > - > - if (desc->pkt_length < 4 || desc->pkt_length > PAGE_SIZE) { > - printk(KERN_ERR "ixp2000: rx err, length %d\n", > - desc->pkt_length); > - goto err; > - } > - > - if (desc->channel < 0 || desc->channel >= nds_count) { > - printk(KERN_ERR "ixp2000: rx err, channel %d\n", > - desc->channel); > - goto err; > - } > - > - /* @@@ Make FCS stripping configurable. */ > - desc->pkt_length -= 4; > - > - if (unlikely(!netif_running(nds[desc->channel]))) > - goto err; > - > - skb = netdev_alloc_skb_ip_align(dev, desc->pkt_length); > - if (likely(skb != NULL)) { > - skb_copy_to_linear_data(skb, buf, desc->pkt_length); > - skb_put(skb, desc->pkt_length); > - skb->protocol = eth_type_trans(skb, nds[desc->channel]); > - > - netif_receive_skb(skb); > - } > - > -err: > - ixp2000_reg_write(RING_RX_PENDING, _desc); > - processed++; > - } > - > - return processed; > -} > - > -/* dev always points to nds[0]. */ > -static int ixpdev_poll(struct napi_struct *napi, int budget) > -{ > - struct ixpdev_priv *ip = container_of(napi, struct ixpdev_priv, napi); > - struct net_device *dev = ip->dev; > - int rx; > - > - rx = 0; > - do { > - ixp2000_reg_write(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0x00ff); > - > - rx = ixpdev_rx(dev, rx, budget); > - if (rx >= budget) > - break; > - } while (ixp2000_reg_read(IXP2000_IRQ_THD_RAW_STATUS_A_0) & 0x00ff); > - > - napi_complete(napi); > - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_SET_A_0, 0x00ff); > - > - return rx; > -} > - > -static void ixpdev_tx_complete(void) > -{ > - int channel; > - u32 wake; > - > - wake = 0; > - while (1) { > - struct ixpdev_priv *ip; > - u32 desc; > - int entry; > - > - desc = ixp2000_reg_read(RING_TX_DONE); > - if (desc == 0) > - break; > - > - /* @@@ Check whether entries come back in order. */ > - entry = (desc - TX_BUF_DESC_BASE) / sizeof(struct ixpdev_tx_desc); > - channel = tx_desc[entry].channel; > - > - if (channel < 0 || channel >= nds_count) { > - printk(KERN_ERR "ixp2000: txcomp channel index " > - "out of bounds (%d, %.8i, %d)\n", > - channel, (unsigned int)desc, entry); > - continue; > - } > - > - ip = netdev_priv(nds[channel]); > - if (ip->tx_queue_entries == TX_BUF_COUNT_PER_CHAN) > - wake |= 1 << channel; > - ip->tx_queue_entries--; > - } > - > - for (channel = 0; wake != 0; channel++) { > - if (wake & (1 << channel)) { > - netif_wake_queue(nds[channel]); > - wake &= ~(1 << channel); > - } > - } > -} > - > -static irqreturn_t ixpdev_interrupt(int irq, void *dev_id) > -{ > - u32 status; > - > - status = ixp2000_reg_read(IXP2000_IRQ_THD_STATUS_A_0); > - if (status == 0) > - return IRQ_NONE; > - > - /* > - * Any of the eight receive units signaled RX? > - */ > - if (status & 0x00ff) { > - struct net_device *dev = nds[0]; > - struct ixpdev_priv *ip = netdev_priv(dev); > - > - ixp2000_reg_wrb(IXP2000_IRQ_THD_ENABLE_CLEAR_A_0, 0x00ff); > - if (likely(napi_schedule_prep(&ip->napi))) { > - __napi_schedule(&ip->napi); > - } else { > - printk(KERN_CRIT "ixp2000: irq while polling!!\n"); > - } > - } > - > - /* > - * Any of the eight transmit units signaled TXdone? > - */ > - if (status & 0xff00) { > - ixp2000_reg_wrb(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0xff00); > - ixpdev_tx_complete(); > - } > - > - return IRQ_HANDLED; > -} > - > -#ifdef CONFIG_NET_POLL_CONTROLLER > -static void ixpdev_poll_controller(struct net_device *dev) > -{ > - disable_irq(IRQ_IXP2000_THDA0); > - ixpdev_interrupt(IRQ_IXP2000_THDA0, dev); > - enable_irq(IRQ_IXP2000_THDA0); > -} > -#endif > - > -static int ixpdev_open(struct net_device *dev) > -{ > - struct ixpdev_priv *ip = netdev_priv(dev); > - int err; > - > - napi_enable(&ip->napi); > - if (!nds_open++) { > - err = request_irq(IRQ_IXP2000_THDA0, ixpdev_interrupt, > - IRQF_SHARED, "ixp2000_eth", nds); > - if (err) { > - nds_open--; > - napi_disable(&ip->napi); > - return err; > - } > - > - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_SET_A_0, 0xffff); > - } > - > - set_port_admin_status(ip->channel, 1); > - netif_start_queue(dev); > - > - return 0; > -} > - > -static int ixpdev_close(struct net_device *dev) > -{ > - struct ixpdev_priv *ip = netdev_priv(dev); > - > - netif_stop_queue(dev); > - napi_disable(&ip->napi); > - set_port_admin_status(ip->channel, 0); > - > - if (!--nds_open) { > - ixp2000_reg_write(IXP2000_IRQ_THD_ENABLE_CLEAR_A_0, 0xffff); > - free_irq(IRQ_IXP2000_THDA0, nds); > - } > - > - return 0; > -} > - > -static struct net_device_stats *ixpdev_get_stats(struct net_device *dev) > -{ > - struct ixpdev_priv *ip = netdev_priv(dev); > - > - pm3386_get_stats(ip->channel, &(dev->stats)); > - > - return &(dev->stats); > -} > - > -static const struct net_device_ops ixpdev_netdev_ops = { > - .ndo_open = ixpdev_open, > - .ndo_stop = ixpdev_close, > - .ndo_start_xmit = ixpdev_xmit, > - .ndo_change_mtu = eth_change_mtu, > - .ndo_validate_addr = eth_validate_addr, > - .ndo_set_mac_address = eth_mac_addr, > - .ndo_get_stats = ixpdev_get_stats, > -#ifdef CONFIG_NET_POLL_CONTROLLER > - .ndo_poll_controller = ixpdev_poll_controller, > -#endif > -}; > - > -struct net_device *ixpdev_alloc(int channel, int sizeof_priv) > -{ > - struct net_device *dev; > - struct ixpdev_priv *ip; > - > - dev = alloc_etherdev(sizeof_priv); > - if (dev == NULL) > - return NULL; > - > - dev->netdev_ops = &ixpdev_netdev_ops; > - > - dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM; > - > - ip = netdev_priv(dev); > - ip->dev = dev; > - netif_napi_add(dev, &ip->napi, ixpdev_poll, 64); > - ip->channel = channel; > - ip->tx_queue_entries = 0; > - > - return dev; > -} > - > -int ixpdev_init(int __nds_count, struct net_device **__nds, > - void (*__set_port_admin_status)(int port, int up)) > -{ > - int i; > - int err; > - > - BUILD_BUG_ON(RX_BUF_COUNT > 192 || TX_BUF_COUNT > 192); > - > - printk(KERN_INFO "IXP2000 MSF ethernet driver %s\n", DRV_MODULE_VERSION); > - > - nds_count = __nds_count; > - nds = __nds; > - set_port_admin_status = __set_port_admin_status; > - > - for (i = 0; i < RX_BUF_COUNT; i++) { > - void *buf; > - > - buf = (void *)get_zeroed_page(GFP_KERNEL); > - if (buf == NULL) { > - err = -ENOMEM; > - while (--i >= 0) > - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); > - goto err_out; > - } > - rx_desc[i].buf_addr = virt_to_phys(buf); > - rx_desc[i].buf_length = PAGE_SIZE; > - } > - > - /* @@@ Maybe we shouldn't be preallocating TX buffers. */ > - for (i = 0; i < TX_BUF_COUNT; i++) { > - void *buf; > - > - buf = (void *)get_zeroed_page(GFP_KERNEL); > - if (buf == NULL) { > - err = -ENOMEM; > - while (--i >= 0) > - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); > - goto err_free_rx; > - } > - tx_desc[i].buf_addr = virt_to_phys(buf); > - } > - > - /* 256 entries, ring status set means 'empty', base address 0x0000. */ > - ixp2000_reg_write(RING_RX_PENDING_BASE, 0x44000000); > - ixp2000_reg_write(RING_RX_PENDING_HEAD, 0x00000000); > - ixp2000_reg_write(RING_RX_PENDING_TAIL, 0x00000000); > - > - /* 256 entries, ring status set means 'full', base address 0x0400. */ > - ixp2000_reg_write(RING_RX_DONE_BASE, 0x40000400); > - ixp2000_reg_write(RING_RX_DONE_HEAD, 0x00000000); > - ixp2000_reg_write(RING_RX_DONE_TAIL, 0x00000000); > - > - for (i = 0; i < RX_BUF_COUNT; i++) { > - ixp2000_reg_write(RING_RX_PENDING, > - RX_BUF_DESC_BASE + (i * sizeof(struct ixpdev_rx_desc))); > - } > - > - ixp2000_uengine_load(0, &ixp2400_rx); > - ixp2000_uengine_start_contexts(0, 0xff); > - > - /* 256 entries, ring status set means 'empty', base address 0x0800. */ > - ixp2000_reg_write(RING_TX_PENDING_BASE, 0x44000800); > - ixp2000_reg_write(RING_TX_PENDING_HEAD, 0x00000000); > - ixp2000_reg_write(RING_TX_PENDING_TAIL, 0x00000000); > - > - /* 256 entries, ring status set means 'full', base address 0x0c00. */ > - ixp2000_reg_write(RING_TX_DONE_BASE, 0x40000c00); > - ixp2000_reg_write(RING_TX_DONE_HEAD, 0x00000000); > - ixp2000_reg_write(RING_TX_DONE_TAIL, 0x00000000); > - > - ixp2000_uengine_load(1, &ixp2400_tx); > - ixp2000_uengine_start_contexts(1, 0xff); > - > - for (i = 0; i < nds_count; i++) { > - err = register_netdev(nds[i]); > - if (err) { > - while (--i >= 0) > - unregister_netdev(nds[i]); > - goto err_free_tx; > - } > - } > - > - for (i = 0; i < nds_count; i++) { > - printk(KERN_INFO "%s: IXP2000 MSF ethernet (port %d), %pM.\n", > - nds[i]->name, i, nds[i]->dev_addr); > - } > - > - return 0; > - > -err_free_tx: > - for (i = 0; i < TX_BUF_COUNT; i++) > - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); > - > -err_free_rx: > - for (i = 0; i < RX_BUF_COUNT; i++) > - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); > - > -err_out: > - return err; > -} > - > -void ixpdev_deinit(void) > -{ > - int i; > - > - /* @@@ Flush out pending packets. */ > - > - for (i = 0; i < nds_count; i++) > - unregister_netdev(nds[i]); > - > - ixp2000_uengine_stop_contexts(1, 0xff); > - ixp2000_uengine_stop_contexts(0, 0xff); > - ixp2000_uengine_reset(0x3); > - > - for (i = 0; i < TX_BUF_COUNT; i++) > - free_page((unsigned long)phys_to_virt(tx_desc[i].buf_addr)); > - > - for (i = 0; i < RX_BUF_COUNT; i++) > - free_page((unsigned long)phys_to_virt(rx_desc[i].buf_addr)); > -} > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev.h b/drivers/net/ethernet/xscale/ixp2000/ixpdev.h > deleted file mode 100644 > index 391ece6..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev.h > +++ /dev/null > @@ -1,29 +0,0 @@ > -/* > - * IXP2000 MSF network device driver > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#ifndef __IXPDEV_H > -#define __IXPDEV_H > - > -struct ixpdev_priv > -{ > - struct net_device *dev; > - struct napi_struct napi; > - int channel; > - int tx_queue_entries; > -}; > - > -struct net_device *ixpdev_alloc(int channel, int sizeof_priv); > -int ixpdev_init(int num_ports, struct net_device **nds, > - void (*set_port_admin_status)(int port, int up)); > -void ixpdev_deinit(void); > - > - > -#endif > diff --git a/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h b/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h > deleted file mode 100644 > index 86aa08e..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/ixpdev_priv.h > +++ /dev/null > @@ -1,57 +0,0 @@ > -/* > - * IXP2000 MSF network device driver > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#ifndef __IXPDEV_PRIV_H > -#define __IXPDEV_PRIV_H > - > -#define RX_BUF_DESC_BASE 0x00001000 > -#define RX_BUF_COUNT ((3 * PAGE_SIZE) / (4 * sizeof(struct ixpdev_rx_desc))) > -#define TX_BUF_DESC_BASE 0x00002000 > -#define TX_BUF_COUNT ((3 * PAGE_SIZE) / (4 * sizeof(struct ixpdev_tx_desc))) > -#define TX_BUF_COUNT_PER_CHAN (TX_BUF_COUNT / 4) > - > -#define RING_RX_PENDING ((u32 *)IXP2000_SCRATCH_RING_VIRT_BASE) > -#define RING_RX_DONE ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 4)) > -#define RING_TX_PENDING ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 8)) > -#define RING_TX_DONE ((u32 *)(IXP2000_SCRATCH_RING_VIRT_BASE + 12)) > - > -#define SCRATCH_REG(x) ((u32 *)(IXP2000_GLOBAL_REG_VIRT_BASE | 0x0800 | (x))) > -#define RING_RX_PENDING_BASE SCRATCH_REG(0x00) > -#define RING_RX_PENDING_HEAD SCRATCH_REG(0x04) > -#define RING_RX_PENDING_TAIL SCRATCH_REG(0x08) > -#define RING_RX_DONE_BASE SCRATCH_REG(0x10) > -#define RING_RX_DONE_HEAD SCRATCH_REG(0x14) > -#define RING_RX_DONE_TAIL SCRATCH_REG(0x18) > -#define RING_TX_PENDING_BASE SCRATCH_REG(0x20) > -#define RING_TX_PENDING_HEAD SCRATCH_REG(0x24) > -#define RING_TX_PENDING_TAIL SCRATCH_REG(0x28) > -#define RING_TX_DONE_BASE SCRATCH_REG(0x30) > -#define RING_TX_DONE_HEAD SCRATCH_REG(0x34) > -#define RING_TX_DONE_TAIL SCRATCH_REG(0x38) > - > -struct ixpdev_rx_desc > -{ > - u32 buf_addr; > - u32 buf_length; > - u32 channel; > - u32 pkt_length; > -}; > - > -struct ixpdev_tx_desc > -{ > - u32 buf_addr; > - u32 pkt_length; > - u32 channel; > - u32 unused; > -}; > - > - > -#endif > diff --git a/drivers/net/ethernet/xscale/ixp2000/pm3386.c b/drivers/net/ethernet/xscale/ixp2000/pm3386.c > deleted file mode 100644 > index e08d3f9..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/pm3386.c > +++ /dev/null > @@ -1,351 +0,0 @@ > -/* > - * Helper functions for the PM3386s on the Radisys ENP2611 > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#include <linux/module.h> > -#include <linux/delay.h> > -#include <linux/netdevice.h> > -#include <asm/io.h> > -#include "pm3386.h" > - > -/* > - * Read from register 'reg' of PM3386 device 'pm'. > - */ > -static u16 pm3386_reg_read(int pm, int reg) > -{ > - void *_reg; > - u16 value; > - > - _reg = (void *)ENP2611_PM3386_0_VIRT_BASE; > - if (pm == 1) > - _reg = (void *)ENP2611_PM3386_1_VIRT_BASE; > - > - value = *((volatile u16 *)(_reg + (reg << 1))); > - > -// printk(KERN_INFO "pm3386_reg_read(%d, %.3x) = %.8x\n", pm, reg, value); > - > - return value; > -} > - > -/* > - * Write to register 'reg' of PM3386 device 'pm', and perform > - * a readback from the identification register. > - */ > -static void pm3386_reg_write(int pm, int reg, u16 value) > -{ > - void *_reg; > - u16 dummy; > - > -// printk(KERN_INFO "pm3386_reg_write(%d, %.3x, %.8x)\n", pm, reg, value); > - > - _reg = (void *)ENP2611_PM3386_0_VIRT_BASE; > - if (pm == 1) > - _reg = (void *)ENP2611_PM3386_1_VIRT_BASE; > - > - *((volatile u16 *)(_reg + (reg << 1))) = value; > - > - dummy = *((volatile u16 *)_reg); > - __asm__ __volatile__("mov %0, %0" : "+r" (dummy)); > -} > - > -/* > - * Read from port 'port' register 'reg', where the registers > - * for the different ports are 'spacing' registers apart. > - */ > -static u16 pm3386_port_reg_read(int port, int _reg, int spacing) > -{ > - int reg; > - > - reg = _reg; > - if (port & 1) > - reg += spacing; > - > - return pm3386_reg_read(port >> 1, reg); > -} > - > -/* > - * Write to port 'port' register 'reg', where the registers > - * for the different ports are 'spacing' registers apart. > - */ > -static void pm3386_port_reg_write(int port, int _reg, int spacing, u16 value) > -{ > - int reg; > - > - reg = _reg; > - if (port & 1) > - reg += spacing; > - > - pm3386_reg_write(port >> 1, reg, value); > -} > - > -int pm3386_secondary_present(void) > -{ > - return pm3386_reg_read(1, 0) == 0x3386; > -} > - > -void pm3386_reset(void) > -{ > - u8 mac[3][6]; > - int secondary; > - > - secondary = pm3386_secondary_present(); > - > - /* Save programmed MAC addresses. */ > - pm3386_get_mac(0, mac[0]); > - pm3386_get_mac(1, mac[1]); > - if (secondary) > - pm3386_get_mac(2, mac[2]); > - > - /* Assert analog and digital reset. */ > - pm3386_reg_write(0, 0x002, 0x0060); > - if (secondary) > - pm3386_reg_write(1, 0x002, 0x0060); > - mdelay(1); > - > - /* Deassert analog reset. */ > - pm3386_reg_write(0, 0x002, 0x0062); > - if (secondary) > - pm3386_reg_write(1, 0x002, 0x0062); > - mdelay(10); > - > - /* Deassert digital reset. */ > - pm3386_reg_write(0, 0x002, 0x0063); > - if (secondary) > - pm3386_reg_write(1, 0x002, 0x0063); > - mdelay(10); > - > - /* Restore programmed MAC addresses. */ > - pm3386_set_mac(0, mac[0]); > - pm3386_set_mac(1, mac[1]); > - if (secondary) > - pm3386_set_mac(2, mac[2]); > - > - /* Disable carrier on all ports. */ > - pm3386_set_carrier(0, 0); > - pm3386_set_carrier(1, 0); > - if (secondary) > - pm3386_set_carrier(2, 0); > -} > - > -static u16 swaph(u16 x) > -{ > - return ((x << 8) | (x >> 8)) & 0xffff; > -} > - > -int pm3386_port_count(void) > -{ > - return 2 + pm3386_secondary_present(); > -} > - > -void pm3386_init_port(int port) > -{ > - int pm = port >> 1; > - > - /* > - * Work around ENP2611 bootloader programming MAC address > - * in reverse. > - */ > - if (pm3386_port_reg_read(port, 0x30a, 0x100) == 0x0000 && > - (pm3386_port_reg_read(port, 0x309, 0x100) & 0xff00) == 0x5000) { > - u16 temp[3]; > - > - temp[0] = pm3386_port_reg_read(port, 0x308, 0x100); > - temp[1] = pm3386_port_reg_read(port, 0x309, 0x100); > - temp[2] = pm3386_port_reg_read(port, 0x30a, 0x100); > - pm3386_port_reg_write(port, 0x308, 0x100, swaph(temp[2])); > - pm3386_port_reg_write(port, 0x309, 0x100, swaph(temp[1])); > - pm3386_port_reg_write(port, 0x30a, 0x100, swaph(temp[0])); > - } > - > - /* > - * Initialise narrowbanding mode. See application note 2010486 > - * for more information. (@@@ We also need to issue a reset > - * when ROOL or DOOL are detected.) > - */ > - pm3386_port_reg_write(port, 0x708, 0x10, 0xd055); > - udelay(500); > - pm3386_port_reg_write(port, 0x708, 0x10, 0x5055); > - > - /* > - * SPI-3 ingress block. Set 64 bytes SPI-3 burst size > - * towards SPI-3 bridge. > - */ > - pm3386_port_reg_write(port, 0x122, 0x20, 0x0002); > - > - /* > - * Enable ingress protocol checking, and soft reset the > - * SPI-3 ingress block. > - */ > - pm3386_reg_write(pm, 0x103, 0x0003); > - while (!(pm3386_reg_read(pm, 0x103) & 0x80)) > - ; > - > - /* > - * SPI-3 egress block. Gather 12288 bytes of the current > - * packet in the TX fifo before initiating transmit on the > - * SERDES interface. (Prevents TX underflows.) > - */ > - pm3386_port_reg_write(port, 0x221, 0x20, 0x0007); > - > - /* > - * Enforce odd parity from the SPI-3 bridge, and soft reset > - * the SPI-3 egress block. > - */ > - pm3386_reg_write(pm, 0x203, 0x000d & ~(4 << (port & 1))); > - while ((pm3386_reg_read(pm, 0x203) & 0x000c) != 0x000c) > - ; > - > - /* > - * EGMAC block. Set this channels to reject long preambles, > - * not send or transmit PAUSE frames, enable preamble checking, > - * disable frame length checking, enable FCS appending, enable > - * TX frame padding. > - */ > - pm3386_port_reg_write(port, 0x302, 0x100, 0x0113); > - > - /* > - * Soft reset the EGMAC block. > - */ > - pm3386_port_reg_write(port, 0x301, 0x100, 0x8000); > - pm3386_port_reg_write(port, 0x301, 0x100, 0x0000); > - > - /* > - * Auto-sense autonegotiation status. > - */ > - pm3386_port_reg_write(port, 0x306, 0x100, 0x0100); > - > - /* > - * Allow reception of jumbo frames. > - */ > - pm3386_port_reg_write(port, 0x310, 0x100, 9018); > - > - /* > - * Allow transmission of jumbo frames. > - */ > - pm3386_port_reg_write(port, 0x336, 0x100, 9018); > - > - /* @@@ Should set 0x337/0x437 (RX forwarding threshold.) */ > - > - /* > - * Set autonegotiation parameters to 'no PAUSE, full duplex.' > - */ > - pm3386_port_reg_write(port, 0x31c, 0x100, 0x0020); > - > - /* > - * Enable and restart autonegotiation. > - */ > - pm3386_port_reg_write(port, 0x318, 0x100, 0x0003); > - pm3386_port_reg_write(port, 0x318, 0x100, 0x0002); > -} > - > -void pm3386_get_mac(int port, u8 *mac) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x308, 0x100); > - mac[0] = temp & 0xff; > - mac[1] = (temp >> 8) & 0xff; > - > - temp = pm3386_port_reg_read(port, 0x309, 0x100); > - mac[2] = temp & 0xff; > - mac[3] = (temp >> 8) & 0xff; > - > - temp = pm3386_port_reg_read(port, 0x30a, 0x100); > - mac[4] = temp & 0xff; > - mac[5] = (temp >> 8) & 0xff; > -} > - > -void pm3386_set_mac(int port, u8 *mac) > -{ > - pm3386_port_reg_write(port, 0x308, 0x100, (mac[1] << 8) | mac[0]); > - pm3386_port_reg_write(port, 0x309, 0x100, (mac[3] << 8) | mac[2]); > - pm3386_port_reg_write(port, 0x30a, 0x100, (mac[5] << 8) | mac[4]); > -} > - > -static u32 pm3386_get_stat(int port, u16 base) > -{ > - u32 value; > - > - value = pm3386_port_reg_read(port, base, 0x100); > - value |= pm3386_port_reg_read(port, base + 1, 0x100) << 16; > - > - return value; > -} > - > -void pm3386_get_stats(int port, struct net_device_stats *stats) > -{ > - /* > - * Snapshot statistics counters. > - */ > - pm3386_port_reg_write(port, 0x500, 0x100, 0x0001); > - while (pm3386_port_reg_read(port, 0x500, 0x100) & 0x0001) > - ; > - > - memset(stats, 0, sizeof(*stats)); > - > - stats->rx_packets = pm3386_get_stat(port, 0x510); > - stats->tx_packets = pm3386_get_stat(port, 0x590); > - stats->rx_bytes = pm3386_get_stat(port, 0x514); > - stats->tx_bytes = pm3386_get_stat(port, 0x594); > - /* @@@ Add other stats. */ > -} > - > -void pm3386_set_carrier(int port, int state) > -{ > - pm3386_port_reg_write(port, 0x703, 0x10, state ? 0x1001 : 0x0000); > -} > - > -int pm3386_is_link_up(int port) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x31a, 0x100); > - temp = pm3386_port_reg_read(port, 0x31a, 0x100); > - > - return !!(temp & 0x0002); > -} > - > -void pm3386_enable_rx(int port) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x303, 0x100); > - temp |= 0x1000; > - pm3386_port_reg_write(port, 0x303, 0x100, temp); > -} > - > -void pm3386_disable_rx(int port) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x303, 0x100); > - temp &= 0xefff; > - pm3386_port_reg_write(port, 0x303, 0x100, temp); > -} > - > -void pm3386_enable_tx(int port) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x303, 0x100); > - temp |= 0x4000; > - pm3386_port_reg_write(port, 0x303, 0x100, temp); > -} > - > -void pm3386_disable_tx(int port) > -{ > - u16 temp; > - > - temp = pm3386_port_reg_read(port, 0x303, 0x100); > - temp &= 0xbfff; > - pm3386_port_reg_write(port, 0x303, 0x100, temp); > -} > - > -MODULE_LICENSE("GPL"); > diff --git a/drivers/net/ethernet/xscale/ixp2000/pm3386.h b/drivers/net/ethernet/xscale/ixp2000/pm3386.h > deleted file mode 100644 > index cc4183d..0000000 > --- a/drivers/net/ethernet/xscale/ixp2000/pm3386.h > +++ /dev/null > @@ -1,29 +0,0 @@ > -/* > - * Helper functions for the PM3386s on the Radisys ENP2611 > - * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> > - * Dedicated to Marija Kulikova. > - * > - * 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. > - */ > - > -#ifndef __PM3386_H > -#define __PM3386_H > - > -void pm3386_reset(void); > -int pm3386_port_count(void); > -void pm3386_init_port(int port); > -void pm3386_get_mac(int port, u8 *mac); > -void pm3386_set_mac(int port, u8 *mac); > -void pm3386_get_stats(int port, struct net_device_stats *stats); > -void pm3386_set_carrier(int port, int state); > -int pm3386_is_link_up(int port); > -void pm3386_enable_rx(int port); > -void pm3386_disable_rx(int port); > -void pm3386_enable_tx(int port); > -void pm3386_disable_tx(int port); > - > - > -#endif Adding Lennert Buytenhek (the maintainer for the ixp2000 driver) [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] net: remove ixp2000 ethernet driver 2012-04-04 10:20 ` Jeff Kirsher @ 2012-04-04 12:25 ` Lennert Buytenhek 2012-04-04 22:09 ` David Miller 0 siblings, 1 reply; 14+ messages in thread From: Lennert Buytenhek @ 2012-04-04 12:25 UTC (permalink / raw) To: Jeff Kirsher Cc: Rob Herring, linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring On Wed, Apr 04, 2012 at 03:20:57AM -0700, Jeff Kirsher wrote: > > From: Rob Herring <rob.herring@calxeda.com> > > > > The platform is removed, so there are no users of this driver. > > > > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > > Cc: Jesse Brandeburg <jesse.brandeburg@intel.com> > > Cc: Bruce Allan <bruce.w.allan@intel.com> > > Cc: Carolyn Wyborny <carolyn.wyborny@intel.com> > > Cc: Don Skidmore <donald.c.skidmore@intel.com> > > Cc: Greg Rose <gregory.v.rose@intel.com> > > Cc: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> > > Cc: Alex Duyck <alexander.h.duyck@intel.com> > > Cc: John Ronciak <john.ronciak@intel.com> > > Cc: netdev@vger.kernel.org Acked-by: Lennert Buytenhek <buytenh@wantstofly.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] net: remove ixp2000 ethernet driver 2012-04-04 12:25 ` Lennert Buytenhek @ 2012-04-04 22:09 ` David Miller 0 siblings, 0 replies; 14+ messages in thread From: David Miller @ 2012-04-04 22:09 UTC (permalink / raw) To: buytenh Cc: jeffrey.t.kirsher, robherring2, linux-kernel, linux-arm-kernel, linux, nico, arnd, olof, rob.herring From: Lennert Buytenhek <buytenh@wantstofly.org> Date: Wed, 4 Apr 2012 14:25:40 +0200 > On Wed, Apr 04, 2012 at 03:20:57AM -0700, Jeff Kirsher wrote: > >> > From: Rob Herring <rob.herring@calxeda.com> >> > >> > The platform is removed, so there are no users of this driver. >> > >> > Signed-off-by: Rob Herring <rob.herring@calxeda.com> >> > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> >> > Cc: Jesse Brandeburg <jesse.brandeburg@intel.com> >> > Cc: Bruce Allan <bruce.w.allan@intel.com> >> > Cc: Carolyn Wyborny <carolyn.wyborny@intel.com> >> > Cc: Don Skidmore <donald.c.skidmore@intel.com> >> > Cc: Greg Rose <gregory.v.rose@intel.com> >> > Cc: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> >> > Cc: Alex Duyck <alexander.h.duyck@intel.com> >> > Cc: John Ronciak <john.ronciak@intel.com> >> > Cc: netdev@vger.kernel.org > > Acked-by: Lennert Buytenhek <buytenh@wantstofly.org> Applied to net-next, thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 3/5] i2c: remove ixp2000 driver 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring 2012-04-04 1:34 ` [PATCH 2/5] net: remove ixp2000 ethernet driver Rob Herring @ 2012-04-04 1:34 ` Rob Herring 2012-04-22 16:31 ` Wolfram Sang 2012-04-04 1:34 ` [PATCH 4/5] mtd: remove ixp2000 map device Rob Herring ` (3 subsequent siblings) 5 siblings, 1 reply; 14+ messages in thread From: Rob Herring @ 2012-04-04 1:34 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Jean Delvare (PC drivers, core), Ben Dooks (embedded platforms), Wolfram Sang (embedded platforms), linux-i2c From: Rob Herring <rob.herring@calxeda.com> The platform is removed, so there are no users of this driver. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: "Jean Delvare (PC drivers, core)" <khali@linux-fr.org> Cc: "Ben Dooks (embedded platforms)" <ben-linux@fluff.org> Cc: "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de> Cc: linux-i2c@vger.kernel.org --- drivers/i2c/busses/Kconfig | 14 ---- drivers/i2c/busses/Makefile | 1 - drivers/i2c/busses/i2c-ixp2000.c | 157 -------------------------------------- 3 files changed, 0 insertions(+), 172 deletions(-) delete mode 100644 drivers/i2c/busses/i2c-ixp2000.c diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig index d2c5095..188543d 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig @@ -445,20 +445,6 @@ config I2C_IOP3XX This driver can also be built as a module. If so, the module will be called i2c-iop3xx. -config I2C_IXP2000 - tristate "IXP2000 GPIO-Based I2C Interface (DEPRECATED)" - depends on ARCH_IXP2000 - select I2C_ALGOBIT - help - Say Y here if you have an Intel IXP2000 (2400, 2800, 2850) based - system and are using GPIO lines for an I2C bus. - - This support is also available as a module. If so, the module - will be called i2c-ixp2000. - - This driver is deprecated and will be dropped soon. Use i2c-gpio - instead. - config I2C_MPC tristate "MPC107/824x/85xx/512x/52xx/83xx/86xx" depends on PPC diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile index 569567b..ce3c2be 100644 --- a/drivers/i2c/busses/Makefile +++ b/drivers/i2c/busses/Makefile @@ -44,7 +44,6 @@ obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o obj-$(CONFIG_I2C_IMX) += i2c-imx.o obj-$(CONFIG_I2C_INTEL_MID) += i2c-intel-mid.o obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o -obj-$(CONFIG_I2C_IXP2000) += i2c-ixp2000.o obj-$(CONFIG_I2C_MPC) += i2c-mpc.o obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o obj-$(CONFIG_I2C_MXS) += i2c-mxs.o diff --git a/drivers/i2c/busses/i2c-ixp2000.c b/drivers/i2c/busses/i2c-ixp2000.c deleted file mode 100644 index 5d263f90..0000000 --- a/drivers/i2c/busses/i2c-ixp2000.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * drivers/i2c/busses/i2c-ixp2000.c - * - * I2C adapter for IXP2000 systems using GPIOs for I2C bus - * - * Author: Deepak Saxena <dsaxena@plexity.net> - * Based on IXDP2400 code by: Naeem M. Afzal <naeem.m.afzal@intel.com> - * Made generic by: Jeff Daly <jeffrey.daly@intel.com> - * - * Copyright (c) 2003-2004 MontaVista Software Inc. - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - * - * From Jeff Daly: - * - * I2C adapter driver for Intel IXDP2xxx platforms. This should work for any - * IXP2000 platform if it uses the HW GPIO in the same manner. Basically, - * SDA and SCL GPIOs have external pullups. Setting the respective GPIO to - * an input will make the signal a '1' via the pullup. Setting them to - * outputs will pull them down. - * - * The GPIOs are open drain signals and are used as configuration strap inputs - * during power-up so there's generally a buffer on the board that needs to be - * 'enabled' to drive the GPIOs. - */ - -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/module.h> -#include <linux/i2c.h> -#include <linux/i2c-algo-bit.h> -#include <linux/slab.h> - -#include <mach/hardware.h> /* Pick up IXP2000-specific bits */ -#include <mach/gpio-ixp2000.h> - -static inline int ixp2000_scl_pin(void *data) -{ - return ((struct ixp2000_i2c_pins*)data)->scl_pin; -} - -static inline int ixp2000_sda_pin(void *data) -{ - return ((struct ixp2000_i2c_pins*)data)->sda_pin; -} - - -static void ixp2000_bit_setscl(void *data, int val) -{ - int i = 5000; - - if (val) { - gpio_line_config(ixp2000_scl_pin(data), GPIO_IN); - while(!gpio_line_get(ixp2000_scl_pin(data)) && i--); - } else { - gpio_line_config(ixp2000_scl_pin(data), GPIO_OUT); - } -} - -static void ixp2000_bit_setsda(void *data, int val) -{ - if (val) { - gpio_line_config(ixp2000_sda_pin(data), GPIO_IN); - } else { - gpio_line_config(ixp2000_sda_pin(data), GPIO_OUT); - } -} - -static int ixp2000_bit_getscl(void *data) -{ - return gpio_line_get(ixp2000_scl_pin(data)); -} - -static int ixp2000_bit_getsda(void *data) -{ - return gpio_line_get(ixp2000_sda_pin(data)); -} - -struct ixp2000_i2c_data { - struct ixp2000_i2c_pins *gpio_pins; - struct i2c_adapter adapter; - struct i2c_algo_bit_data algo_data; -}; - -static int ixp2000_i2c_remove(struct platform_device *plat_dev) -{ - struct ixp2000_i2c_data *drv_data = platform_get_drvdata(plat_dev); - - platform_set_drvdata(plat_dev, NULL); - - i2c_del_adapter(&drv_data->adapter); - - kfree(drv_data); - - return 0; -} - -static int ixp2000_i2c_probe(struct platform_device *plat_dev) -{ - int err; - struct ixp2000_i2c_pins *gpio = plat_dev->dev.platform_data; - struct ixp2000_i2c_data *drv_data = - kzalloc(sizeof(struct ixp2000_i2c_data), GFP_KERNEL); - - if (!drv_data) - return -ENOMEM; - drv_data->gpio_pins = gpio; - - drv_data->algo_data.data = gpio; - drv_data->algo_data.setsda = ixp2000_bit_setsda; - drv_data->algo_data.setscl = ixp2000_bit_setscl; - drv_data->algo_data.getsda = ixp2000_bit_getsda; - drv_data->algo_data.getscl = ixp2000_bit_getscl; - drv_data->algo_data.udelay = 6; - drv_data->algo_data.timeout = HZ; - - strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name, - sizeof(drv_data->adapter.name)); - drv_data->adapter.algo_data = &drv_data->algo_data, - - drv_data->adapter.dev.parent = &plat_dev->dev; - - gpio_line_config(gpio->sda_pin, GPIO_IN); - gpio_line_config(gpio->scl_pin, GPIO_IN); - gpio_line_set(gpio->scl_pin, 0); - gpio_line_set(gpio->sda_pin, 0); - - if ((err = i2c_bit_add_bus(&drv_data->adapter)) != 0) { - dev_err(&plat_dev->dev, "Could not install, error %d\n", err); - kfree(drv_data); - return err; - } - - platform_set_drvdata(plat_dev, drv_data); - - return 0; -} - -static struct platform_driver ixp2000_i2c_driver = { - .probe = ixp2000_i2c_probe, - .remove = ixp2000_i2c_remove, - .driver = { - .name = "IXP2000-I2C", - .owner = THIS_MODULE, - }, -}; - -module_platform_driver(ixp2000_i2c_driver); - -MODULE_AUTHOR ("Deepak Saxena <dsaxena@plexity.net>"); -MODULE_DESCRIPTION("IXP2000 GPIO-based I2C bus driver"); -MODULE_LICENSE("GPL"); -MODULE_ALIAS("platform:IXP2000-I2C"); - -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] i2c: remove ixp2000 driver 2012-04-04 1:34 ` [PATCH 3/5] i2c: remove ixp2000 driver Rob Herring @ 2012-04-22 16:31 ` Wolfram Sang 0 siblings, 0 replies; 14+ messages in thread From: Wolfram Sang @ 2012-04-22 16:31 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Jean Delvare (PC drivers, core), Ben Dooks (embedded platforms), linux-i2c [-- Attachment #1: Type: text/plain, Size: 426 bytes --] On Tue, Apr 03, 2012 at 08:34:01PM -0500, Rob Herring wrote: > From: Rob Herring <rob.herring@calxeda.com> > > The platform is removed, so there are no users of this driver. > > Signed-off-by: Rob Herring <rob.herring@calxeda.com> Thanks, applied to next. -- Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 4/5] mtd: remove ixp2000 map device 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring 2012-04-04 1:34 ` [PATCH 2/5] net: remove ixp2000 ethernet driver Rob Herring 2012-04-04 1:34 ` [PATCH 3/5] i2c: remove ixp2000 driver Rob Herring @ 2012-04-04 1:34 ` Rob Herring 2012-04-04 1:34 ` [PATCH 5/5] watchdog: remove ixp2000 driver Rob Herring ` (2 subsequent siblings) 5 siblings, 0 replies; 14+ messages in thread From: Rob Herring @ 2012-04-04 1:34 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, David Woodhouse, linux-mtd From: Rob Herring <rob.herring@calxeda.com> The platform is removed, so there are no users of this driver. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: David Woodhouse <dwmw2@infradead.org> Cc: linux-mtd@lists.infradead.org --- drivers/mtd/maps/Kconfig | 9 -- drivers/mtd/maps/Makefile | 1 - drivers/mtd/maps/ixp2000.c | 253 -------------------------------------------- 3 files changed, 0 insertions(+), 263 deletions(-) delete mode 100644 drivers/mtd/maps/ixp2000.c diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 8af67cf..ddb2935 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig @@ -356,15 +356,6 @@ config MTD_IXP4XX IXDP425 and Coyote. If you have an IXP4xx based board and would like to use the flash chips on it, say 'Y'. -config MTD_IXP2000 - tristate "CFI Flash device mapped on Intel IXP2000 based systems" - depends on MTD_CFI && MTD_COMPLEX_MAPPINGS && ARCH_IXP2000 - help - This enables MTD access to flash devices on platforms based - on Intel's IXP2000 family of network processors. If you have an - IXP2000 based board and would like to use the flash chips on it, - say 'Y'. - config MTD_FORTUNET tristate "CFI Flash device mapped on the FortuNet board" depends on MTD_CFI && SA1100_FORTUNET diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile index 68a9a91..cfa110c 100644 --- a/drivers/mtd/maps/Makefile +++ b/drivers/mtd/maps/Makefile @@ -46,7 +46,6 @@ obj-$(CONFIG_MTD_NETtel) += nettel.o obj-$(CONFIG_MTD_SCB2_FLASH) += scb2_flash.o obj-$(CONFIG_MTD_H720X) += h720x-flash.o obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o -obj-$(CONFIG_MTD_IXP2000) += ixp2000.o obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o obj-$(CONFIG_MTD_DMV182) += dmv182.o obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o diff --git a/drivers/mtd/maps/ixp2000.c b/drivers/mtd/maps/ixp2000.c deleted file mode 100644 index 4a41ced..0000000 --- a/drivers/mtd/maps/ixp2000.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * drivers/mtd/maps/ixp2000.c - * - * Mapping for the Intel XScale IXP2000 based systems - * - * Copyright (C) 2002 Intel Corp. - * Copyright (C) 2003-2004 MontaVista Software, Inc. - * - * Original Author: Naeem M Afzal <naeem.m.afzal@intel.com> - * Maintainer: Deepak Saxena <dsaxena@plexity.net> - * - * 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. - * - */ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/slab.h> -#include <linux/ioport.h> -#include <linux/device.h> -#include <linux/platform_device.h> - -#include <linux/mtd/mtd.h> -#include <linux/mtd/map.h> -#include <linux/mtd/partitions.h> - -#include <asm/io.h> -#include <mach/hardware.h> -#include <asm/mach/flash.h> - -#include <linux/reboot.h> - -struct ixp2000_flash_info { - struct mtd_info *mtd; - struct map_info map; - struct resource *res; -}; - -static inline unsigned long flash_bank_setup(struct map_info *map, unsigned long ofs) -{ - unsigned long (*set_bank)(unsigned long) = - (unsigned long(*)(unsigned long))map->map_priv_2; - - return (set_bank ? set_bank(ofs) : ofs); -} - -#ifdef __ARMEB__ -/* - * Rev A0 and A1 of IXP2400 silicon have a broken addressing unit which - * causes the lower address bits to be XORed with 0x11 on 8 bit accesses - * and XORed with 0x10 on 16 bit accesses. See the spec update, erratum 44. - */ -static int erratum44_workaround = 0; - -static inline unsigned long address_fix8_write(unsigned long addr) -{ - if (erratum44_workaround) { - return (addr ^ 3); - } - return addr; -} -#else - -#define address_fix8_write(x) (x) -#endif - -static map_word ixp2000_flash_read8(struct map_info *map, unsigned long ofs) -{ - map_word val; - - val.x[0] = *((u8 *)(map->map_priv_1 + flash_bank_setup(map, ofs))); - return val; -} - -/* - * We can't use the standard memcpy due to the broken SlowPort - * address translation on rev A0 and A1 silicon and the fact that - * we have banked flash. - */ -static void ixp2000_flash_copy_from(struct map_info *map, void *to, - unsigned long from, ssize_t len) -{ - from = flash_bank_setup(map, from); - while(len--) - *(__u8 *) to++ = *(__u8 *)(map->map_priv_1 + from++); -} - -static void ixp2000_flash_write8(struct map_info *map, map_word d, unsigned long ofs) -{ - *(__u8 *) (address_fix8_write(map->map_priv_1 + - flash_bank_setup(map, ofs))) = d.x[0]; -} - -static void ixp2000_flash_copy_to(struct map_info *map, unsigned long to, - const void *from, ssize_t len) -{ - to = flash_bank_setup(map, to); - while(len--) { - unsigned long tmp = address_fix8_write(map->map_priv_1 + to++); - *(__u8 *)(tmp) = *(__u8 *)(from++); - } -} - - -static int ixp2000_flash_remove(struct platform_device *dev) -{ - struct flash_platform_data *plat = dev->dev.platform_data; - struct ixp2000_flash_info *info = platform_get_drvdata(dev); - - platform_set_drvdata(dev, NULL); - - if(!info) - return 0; - - if (info->mtd) { - mtd_device_unregister(info->mtd); - map_destroy(info->mtd); - } - if (info->map.map_priv_1) - iounmap((void *) info->map.map_priv_1); - - if (info->res) { - release_resource(info->res); - kfree(info->res); - } - - if (plat->exit) - plat->exit(); - - return 0; -} - - -static int ixp2000_flash_probe(struct platform_device *dev) -{ - static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; - struct ixp2000_flash_data *ixp_data = dev->dev.platform_data; - struct flash_platform_data *plat; - struct ixp2000_flash_info *info; - unsigned long window_size; - int err = -1; - - if (!ixp_data) - return -ENODEV; - - plat = ixp_data->platform_data; - if (!plat) - return -ENODEV; - - window_size = resource_size(dev->resource); - dev_info(&dev->dev, "Probe of IXP2000 flash(%d banks x %dMiB)\n", - ixp_data->nr_banks, ((u32)window_size >> 20)); - - if (plat->width != 1) { - dev_err(&dev->dev, "IXP2000 MTD map only supports 8-bit mode, asking for %d\n", - plat->width * 8); - return -EIO; - } - - info = kzalloc(sizeof(struct ixp2000_flash_info), GFP_KERNEL); - if(!info) { - err = -ENOMEM; - goto Error; - } - - platform_set_drvdata(dev, info); - - /* - * Tell the MTD layer we're not 1:1 mapped so that it does - * not attempt to do a direct access on us. - */ - info->map.phys = NO_XIP; - - info->map.size = ixp_data->nr_banks * window_size; - info->map.bankwidth = 1; - - /* - * map_priv_2 is used to store a ptr to the bank_setup routine - */ - info->map.map_priv_2 = (unsigned long) ixp_data->bank_setup; - - info->map.name = dev_name(&dev->dev); - info->map.read = ixp2000_flash_read8; - info->map.write = ixp2000_flash_write8; - info->map.copy_from = ixp2000_flash_copy_from; - info->map.copy_to = ixp2000_flash_copy_to; - - info->res = request_mem_region(dev->resource->start, - resource_size(dev->resource), - dev_name(&dev->dev)); - if (!info->res) { - dev_err(&dev->dev, "Could not reserve memory region\n"); - err = -ENOMEM; - goto Error; - } - - info->map.map_priv_1 = - (unsigned long)ioremap(dev->resource->start, - resource_size(dev->resource)); - if (!info->map.map_priv_1) { - dev_err(&dev->dev, "Failed to ioremap flash region\n"); - err = -EIO; - goto Error; - } - -#if defined(__ARMEB__) - /* - * Enable erratum 44 workaround for NPUs with broken slowport - */ - - erratum44_workaround = ixp2000_has_broken_slowport(); - dev_info(&dev->dev, "Erratum 44 workaround %s\n", - erratum44_workaround ? "enabled" : "disabled"); -#endif - - info->mtd = do_map_probe(plat->map_name, &info->map); - if (!info->mtd) { - dev_err(&dev->dev, "map_probe failed\n"); - err = -ENXIO; - goto Error; - } - info->mtd->owner = THIS_MODULE; - - err = mtd_device_parse_register(info->mtd, probes, NULL, NULL, 0); - if (err) - goto Error; - - return 0; - -Error: - ixp2000_flash_remove(dev); - return err; -} - -static struct platform_driver ixp2000_flash_driver = { - .probe = ixp2000_flash_probe, - .remove = ixp2000_flash_remove, - .driver = { - .name = "IXP2000-Flash", - .owner = THIS_MODULE, - }, -}; - -module_platform_driver(ixp2000_flash_driver); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>"); -MODULE_ALIAS("platform:IXP2000-Flash"); -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] watchdog: remove ixp2000 driver 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring ` (2 preceding siblings ...) 2012-04-04 1:34 ` [PATCH 4/5] mtd: remove ixp2000 map device Rob Herring @ 2012-04-04 1:34 ` Rob Herring 2012-05-02 16:15 ` Wim Van Sebroeck 2012-04-04 12:18 ` [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring 2012-04-04 12:35 ` Arnd Bergmann 5 siblings, 1 reply; 14+ messages in thread From: Rob Herring @ 2012-04-04 1:34 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Wim Van Sebroeck, linux-watchdog From: Rob Herring <rob.herring@calxeda.com> The platform is removed, so there are no users of this driver. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Wim Van Sebroeck <wim@iguana.be> Cc: linux-watchdog@vger.kernel.org --- drivers/watchdog/Kconfig | 11 -- drivers/watchdog/Makefile | 1 - drivers/watchdog/ixp2000_wdt.c | 215 ---------------------------------------- 3 files changed, 0 insertions(+), 227 deletions(-) delete mode 100644 drivers/watchdog/ixp2000_wdt.c diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 3709624..2cb3438 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -129,17 +129,6 @@ config 977_WATCHDOG Not sure? It's safe to say N. -config IXP2000_WATCHDOG - tristate "IXP2000 Watchdog" - depends on ARCH_IXP2000 - help - Say Y here if to include support for the watchdog timer - in the Intel IXP2000(2400, 2800, 2850) network processors. - This driver can be built as a module by choosing M. The module - will be called ixp2000_wdt. - - Say N if you are unsure. - config IXP4XX_WATCHDOG tristate "IXP4xx Watchdog" depends on ARCH_IXP4XX diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index e8f479a..34b4ceb 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -36,7 +36,6 @@ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt.o obj-$(CONFIG_21285_WATCHDOG) += wdt285.o obj-$(CONFIG_977_WATCHDOG) += wdt977.o -obj-$(CONFIG_IXP2000_WATCHDOG) += ixp2000_wdt.o obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o obj-$(CONFIG_KS8695_WATCHDOG) += ks8695_wdt.o obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o diff --git a/drivers/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c deleted file mode 100644 index 3f047a5..0000000 --- a/drivers/watchdog/ixp2000_wdt.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * drivers/char/watchdog/ixp2000_wdt.c - * - * Watchdog driver for Intel IXP2000 network processors - * - * Adapted from the IXP4xx watchdog driver by Lennert Buytenhek. - * The original version carries these notices: - * - * Author: Deepak Saxena <dsaxena@plexity.net> - * - * Copyright 2004 (c) MontaVista, Software, Inc. - * Based on sa1100 driver, Copyright (C) 2000 Oleg Drokin <green@crimea.edu> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include <linux/module.h> -#include <linux/moduleparam.h> -#include <linux/types.h> -#include <linux/timer.h> -#include <linux/kernel.h> -#include <linux/fs.h> -#include <linux/miscdevice.h> -#include <linux/watchdog.h> -#include <linux/init.h> -#include <linux/bitops.h> -#include <linux/uaccess.h> -#include <mach/hardware.h> - -static bool nowayout = WATCHDOG_NOWAYOUT; -static unsigned int heartbeat = 60; /* (secs) Default is 1 minute */ -static unsigned long wdt_status; -static DEFINE_SPINLOCK(wdt_lock); - -#define WDT_IN_USE 0 -#define WDT_OK_TO_CLOSE 1 - -static unsigned long wdt_tick_rate; - -static void wdt_enable(void) -{ - spin_lock(&wdt_lock); - ixp2000_reg_write(IXP2000_RESET0, *(IXP2000_RESET0) | WDT_RESET_ENABLE); - ixp2000_reg_write(IXP2000_TWDE, WDT_ENABLE); - ixp2000_reg_write(IXP2000_T4_CLD, heartbeat * wdt_tick_rate); - ixp2000_reg_write(IXP2000_T4_CTL, TIMER_DIVIDER_256 | TIMER_ENABLE); - spin_unlock(&wdt_lock); -} - -static void wdt_disable(void) -{ - spin_lock(&wdt_lock); - ixp2000_reg_write(IXP2000_T4_CTL, 0); - spin_unlock(&wdt_lock); -} - -static void wdt_keepalive(void) -{ - spin_lock(&wdt_lock); - ixp2000_reg_write(IXP2000_T4_CLD, heartbeat * wdt_tick_rate); - spin_unlock(&wdt_lock); -} - -static int ixp2000_wdt_open(struct inode *inode, struct file *file) -{ - if (test_and_set_bit(WDT_IN_USE, &wdt_status)) - return -EBUSY; - - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - - wdt_enable(); - - return nonseekable_open(inode, file); -} - -static ssize_t ixp2000_wdt_write(struct file *file, const char *data, - size_t len, loff_t *ppos) -{ - if (len) { - if (!nowayout) { - size_t i; - - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - - for (i = 0; i != len; i++) { - char c; - - if (get_user(c, data + i)) - return -EFAULT; - if (c == 'V') - set_bit(WDT_OK_TO_CLOSE, &wdt_status); - } - } - wdt_keepalive(); - } - - return len; -} - - -static const struct watchdog_info ident = { - .options = WDIOF_MAGICCLOSE | WDIOF_SETTIMEOUT | - WDIOF_KEEPALIVEPING, - .identity = "IXP2000 Watchdog", -}; - -static long ixp2000_wdt_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - int ret = -ENOTTY; - int time; - - switch (cmd) { - case WDIOC_GETSUPPORT: - ret = copy_to_user((struct watchdog_info *)arg, &ident, - sizeof(ident)) ? -EFAULT : 0; - break; - - case WDIOC_GETSTATUS: - ret = put_user(0, (int *)arg); - break; - - case WDIOC_GETBOOTSTATUS: - ret = put_user(0, (int *)arg); - break; - - case WDIOC_KEEPALIVE: - wdt_enable(); - ret = 0; - break; - - case WDIOC_SETTIMEOUT: - ret = get_user(time, (int *)arg); - if (ret) - break; - - if (time <= 0 || time > 60) { - ret = -EINVAL; - break; - } - - heartbeat = time; - wdt_keepalive(); - /* Fall through */ - - case WDIOC_GETTIMEOUT: - ret = put_user(heartbeat, (int *)arg); - break; - } - - return ret; -} - -static int ixp2000_wdt_release(struct inode *inode, struct file *file) -{ - if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) - wdt_disable(); - else - pr_crit("Device closed unexpectedly - timer will not stop\n"); - clear_bit(WDT_IN_USE, &wdt_status); - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - - return 0; -} - - -static const struct file_operations ixp2000_wdt_fops = { - .owner = THIS_MODULE, - .llseek = no_llseek, - .write = ixp2000_wdt_write, - .unlocked_ioctl = ixp2000_wdt_ioctl, - .open = ixp2000_wdt_open, - .release = ixp2000_wdt_release, -}; - -static struct miscdevice ixp2000_wdt_miscdev = { - .minor = WATCHDOG_MINOR, - .name = "watchdog", - .fops = &ixp2000_wdt_fops, -}; - -static int __init ixp2000_wdt_init(void) -{ - if ((*IXP2000_PRODUCT_ID & 0x001ffef0) == 0x00000000) { - pr_info("Unable to use IXP2000 watchdog due to IXP2800 erratum #25\n"); - return -EIO; - } - wdt_tick_rate = (*IXP2000_T1_CLD * HZ) / 256; - return misc_register(&ixp2000_wdt_miscdev); -} - -static void __exit ixp2000_wdt_exit(void) -{ - misc_deregister(&ixp2000_wdt_miscdev); -} - -module_init(ixp2000_wdt_init); -module_exit(ixp2000_wdt_exit); - -MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>"); -MODULE_DESCRIPTION("IXP2000 Network Processor Watchdog"); - -module_param(heartbeat, int, 0); -MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds (default 60s)"); - -module_param(nowayout, bool, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started"); - -MODULE_LICENSE("GPL"); -MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); - -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] watchdog: remove ixp2000 driver 2012-04-04 1:34 ` [PATCH 5/5] watchdog: remove ixp2000 driver Rob Herring @ 2012-05-02 16:15 ` Wim Van Sebroeck 0 siblings, 0 replies; 14+ messages in thread From: Wim Van Sebroeck @ 2012-05-02 16:15 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, linux-watchdog Hi Rob, > From: Rob Herring <rob.herring@calxeda.com> > > The platform is removed, so there are no users of this driver. > > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > Cc: Wim Van Sebroeck <wim@iguana.be> > Cc: linux-watchdog@vger.kernel.org In linux-watchdog-next now. Kind regards, Wim. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring ` (3 preceding siblings ...) 2012-04-04 1:34 ` [PATCH 5/5] watchdog: remove ixp2000 driver Rob Herring @ 2012-04-04 12:18 ` Rob Herring 2012-04-04 12:24 ` Lennert Buytenhek 2012-04-04 12:35 ` Arnd Bergmann 5 siblings, 1 reply; 14+ messages in thread From: Rob Herring @ 2012-04-04 12:18 UTC (permalink / raw) To: linux-kernel, linux-arm-kernel Cc: Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Randy Dunlap, Lennert Buytenhek Doh! Forgot to cc Lennert. Rob On 04/03/2012 08:33 PM, Rob Herring wrote: > From: Rob Herring <rob.herring@calxeda.com> > > ixp2xxx platforms have had no real changes since ~2006 and the maintainer > has said on irc that they can be removed: > > 13:05 < nico> do you still care about ixp2000? > 13:22 < lennert> not really, no > 13:58 < nico> do you think we could remove it from the kernel tree? > 14:01 < lennert> go for it, and remove ixp23xx too while you're at it > > Removing will help simplify ARM consolidation in general and PCI re-work > specifically. > > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > Cc: Randy Dunlap <rdunlap@xenotime.net> > --- > Documentation/arm/00-INDEX | 2 - > Documentation/arm/IXP2000 | 69 --- > MAINTAINERS | 17 - > arch/arm/Kconfig | 26 - > arch/arm/Makefile | 2 - > arch/arm/boot/compressed/head-xscale.S | 7 - > arch/arm/common/Makefile | 2 - > arch/arm/common/uengine.c | 507 -------------------- > arch/arm/configs/ixp2000_defconfig | 99 ---- > arch/arm/configs/ixp23xx_defconfig | 105 ----- > arch/arm/include/asm/hardware/uengine.h | 62 --- > arch/arm/mach-ixp2000/Kconfig | 72 --- > arch/arm/mach-ixp2000/Makefile | 14 - > arch/arm/mach-ixp2000/Makefile.boot | 3 - > arch/arm/mach-ixp2000/core.c | 520 --------------------- > arch/arm/mach-ixp2000/enp2611.c | 265 ----------- > arch/arm/mach-ixp2000/include/mach/debug-macro.S | 25 - > arch/arm/mach-ixp2000/include/mach/enp2611.h | 46 -- > arch/arm/mach-ixp2000/include/mach/entry-macro.S | 54 --- > arch/arm/mach-ixp2000/include/mach/gpio-ixp2000.h | 48 -- > arch/arm/mach-ixp2000/include/mach/hardware.h | 36 -- > arch/arm/mach-ixp2000/include/mach/io.h | 133 ------ > arch/arm/mach-ixp2000/include/mach/irqs.h | 207 -------- > arch/arm/mach-ixp2000/include/mach/ixdp2x00.h | 92 ---- > arch/arm/mach-ixp2000/include/mach/ixdp2x01.h | 57 --- > arch/arm/mach-ixp2000/include/mach/ixp2000-regs.h | 451 ------------------ > arch/arm/mach-ixp2000/include/mach/memory.h | 31 -- > arch/arm/mach-ixp2000/include/mach/platform.h | 153 ------ > arch/arm/mach-ixp2000/include/mach/timex.h | 13 - > arch/arm/mach-ixp2000/include/mach/uncompress.h | 47 -- > arch/arm/mach-ixp2000/ixdp2400.c | 180 ------- > arch/arm/mach-ixp2000/ixdp2800.c | 295 ------------ > arch/arm/mach-ixp2000/ixdp2x00.c | 306 ------------ > arch/arm/mach-ixp2000/ixdp2x01.c | 483 ------------------- > arch/arm/mach-ixp2000/pci.c | 252 ---------- > arch/arm/mach-ixp23xx/Kconfig | 25 - > arch/arm/mach-ixp23xx/Makefile | 11 - > arch/arm/mach-ixp23xx/Makefile.boot | 2 - > arch/arm/mach-ixp23xx/core.c | 455 ------------------ > arch/arm/mach-ixp23xx/espresso.c | 93 ---- > arch/arm/mach-ixp23xx/include/mach/debug-macro.S | 25 - > arch/arm/mach-ixp23xx/include/mach/entry-macro.S | 31 -- > arch/arm/mach-ixp23xx/include/mach/hardware.h | 32 -- > arch/arm/mach-ixp23xx/include/mach/io.h | 22 - > arch/arm/mach-ixp23xx/include/mach/irqs.h | 223 --------- > arch/arm/mach-ixp23xx/include/mach/ixdp2351.h | 89 ---- > arch/arm/mach-ixp23xx/include/mach/ixp23xx.h | 298 ------------ > arch/arm/mach-ixp23xx/include/mach/memory.h | 34 -- > arch/arm/mach-ixp23xx/include/mach/platform.h | 58 --- > arch/arm/mach-ixp23xx/include/mach/time.h | 3 - > arch/arm/mach-ixp23xx/include/mach/timex.h | 7 - > arch/arm/mach-ixp23xx/include/mach/uncompress.h | 40 -- > arch/arm/mach-ixp23xx/ixdp2351.c | 347 -------------- > arch/arm/mach-ixp23xx/pci.c | 294 ------------ > arch/arm/mach-ixp23xx/roadrunner.c | 180 ------- > 55 files changed, 0 insertions(+), 6950 deletions(-) > delete mode 100644 Documentation/arm/IXP2000 > delete mode 100644 arch/arm/common/uengine.c > delete mode 100644 arch/arm/configs/ixp2000_defconfig > delete mode 100644 arch/arm/configs/ixp23xx_defconfig > delete mode 100644 arch/arm/include/asm/hardware/uengine.h > delete mode 100644 arch/arm/mach-ixp2000/Kconfig > delete mode 100644 arch/arm/mach-ixp2000/Makefile > delete mode 100644 arch/arm/mach-ixp2000/Makefile.boot > delete mode 100644 arch/arm/mach-ixp2000/core.c > delete mode 100644 arch/arm/mach-ixp2000/enp2611.c > delete mode 100644 arch/arm/mach-ixp2000/include/mach/debug-macro.S > delete mode 100644 arch/arm/mach-ixp2000/include/mach/enp2611.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/entry-macro.S > delete mode 100644 arch/arm/mach-ixp2000/include/mach/gpio-ixp2000.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/hardware.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/io.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/irqs.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixdp2x00.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixdp2x01.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/ixp2000-regs.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/memory.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/platform.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/timex.h > delete mode 100644 arch/arm/mach-ixp2000/include/mach/uncompress.h > delete mode 100644 arch/arm/mach-ixp2000/ixdp2400.c > delete mode 100644 arch/arm/mach-ixp2000/ixdp2800.c > delete mode 100644 arch/arm/mach-ixp2000/ixdp2x00.c > delete mode 100644 arch/arm/mach-ixp2000/ixdp2x01.c > delete mode 100644 arch/arm/mach-ixp2000/pci.c > delete mode 100644 arch/arm/mach-ixp23xx/Kconfig > delete mode 100644 arch/arm/mach-ixp23xx/Makefile > delete mode 100644 arch/arm/mach-ixp23xx/Makefile.boot > delete mode 100644 arch/arm/mach-ixp23xx/core.c > delete mode 100644 arch/arm/mach-ixp23xx/espresso.c > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/debug-macro.S > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/entry-macro.S > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/hardware.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/io.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/irqs.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/ixdp2351.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/ixp23xx.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/memory.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/platform.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/time.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/timex.h > delete mode 100644 arch/arm/mach-ixp23xx/include/mach/uncompress.h > delete mode 100644 arch/arm/mach-ixp23xx/ixdp2351.c > delete mode 100644 arch/arm/mach-ixp23xx/pci.c > delete mode 100644 arch/arm/mach-ixp23xx/roadrunner.c > > diff --git a/Documentation/arm/00-INDEX b/Documentation/arm/00-INDEX > index 91c24a1..36420e1 100644 > --- a/Documentation/arm/00-INDEX > +++ b/Documentation/arm/00-INDEX > @@ -4,8 +4,6 @@ Booting > - requirements for booting > Interrupts > - ARM Interrupt subsystem documentation > -IXP2000 > - - Release Notes for Linux on Intel's IXP2000 Network Processor > msm > - MSM specific documentation > Netwinder > diff --git a/Documentation/arm/IXP2000 b/Documentation/arm/IXP2000 > deleted file mode 100644 > index 68d21d9..0000000 > --- a/Documentation/arm/IXP2000 > +++ /dev/null > @@ -1,69 +0,0 @@ > - > -------------------------------------------------------------------------- > -Release Notes for Linux on Intel's IXP2000 Network Processor > - > -Maintained by Deepak Saxena <dsaxena@plexity.net> > -------------------------------------------------------------------------- > - > -1. Overview > - > -Intel's IXP2000 family of NPUs (IXP2400, IXP2800, IXP2850) is designed > -for high-performance network applications such high-availability > -telecom systems. In addition to an XScale core, it contains up to 8 > -"MicroEngines" that run special code, several high-end networking > -interfaces (UTOPIA, SPI, etc), a PCI host bridge, one serial port, > -flash interface, and some other odds and ends. For more information, see: > - > -http://developer.intel.com > - > -2. Linux Support > - > -Linux currently supports the following features on the IXP2000 NPUs: > - > -- On-chip serial > -- PCI > -- Flash (MTD/JFFS2) > -- I2C through GPIO > -- Timers (watchdog, OS) > - > -That is about all we can support under Linux ATM b/c the core networking > -components of the chip are accessed via Intel's closed source SDK. > -Please contact Intel directly on issues with using those. There is > -also a mailing list run by some folks at Princeton University that might > -be of help: https://lists.cs.princeton.edu/mailman/listinfo/ixp2xxx > - > -WHATEVER YOU DO, DO NOT POST EMAIL TO THE LINUX-ARM OR LINUX-ARM-KERNEL > -MAILING LISTS REGARDING THE INTEL SDK. > - > -3. Supported Platforms > - > -- Intel IXDP2400 Reference Platform > -- Intel IXDP2800 Reference Platform > -- Intel IXDP2401 Reference Platform > -- Intel IXDP2801 Reference Platform > -- RadiSys ENP-2611 > - > -4. Usage Notes > - > -- The IXP2000 platforms usually have rather complex PCI bus topologies > - with large memory space requirements. In addition, b/c of the way the > - Intel SDK is designed, devices are enumerated in a very specific > - way. B/c of this this, we use "pci=firmware" option in the kernel > - command line so that we do not re-enumerate the bus. > - > -- IXDP2x01 systems have variable clock tick rates that we cannot determine > - via HW registers. The "ixdp2x01_clk=XXX" cmd line options allow you > - to pass the clock rate to the board port. > - > -5. Thanks > - > -The IXP2000 work has been funded by Intel Corp. and MontaVista Software, Inc. > - > -The following people have contributed patches/comments/etc: > - > -Naeem F. Afzal > -Lennert Buytenhek > -Jeffrey Daly > - > -------------------------------------------------------------------------- > -Last Update: 8/09/2004 > diff --git a/MAINTAINERS b/MAINTAINERS > index eecf344..defc06a 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -640,13 +640,6 @@ S: Maintained > F: drivers/amba/ > F: include/linux/amba/bus.h > > -ARM/ADI ROADRUNNER MACHINE SUPPORT > -M: Lennert Buytenhek <kernel@wantstofly.org> > -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > -S: Maintained > -F: arch/arm/mach-ixp23xx/ > -F: arch/arm/mach-ixp23xx/include/mach/ > - > ARM/ADS SPHERE MACHINE SUPPORT > M: Lennert Buytenhek <kernel@wantstofly.org> > L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > @@ -859,21 +852,11 @@ M: Dan Williams <dan.j.williams@intel.com> > L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > S: Maintained > > -ARM/INTEL IXP2000 ARM ARCHITECTURE > -M: Lennert Buytenhek <kernel@wantstofly.org> > -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > -S: Maintained > - > ARM/INTEL IXDP2850 MACHINE SUPPORT > M: Lennert Buytenhek <kernel@wantstofly.org> > L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > S: Maintained > > -ARM/INTEL IXP23XX ARM ARCHITECTURE > -M: Lennert Buytenhek <kernel@wantstofly.org> > -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) > -S: Maintained > - > ARM/INTEL IXP4XX ARM ARCHITECTURE > M: Imre Kaloz <kaloz@openwrt.org> > M: Krzysztof Halasa <khc@pm.waw.pl> > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 9318084..6b242f4 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -527,28 +527,6 @@ config ARCH_IOP33X > help > Support for Intel's IOP33X (XScale) family of processors. > > -config ARCH_IXP23XX > - bool "IXP23XX-based" > - depends on MMU > - select CPU_XSC3 > - select PCI > - select ARCH_USES_GETTIMEOFFSET > - select NEED_MACH_IO_H > - select NEED_MACH_MEMORY_H > - help > - Support for Intel's IXP23xx (XScale) family of processors. > - > -config ARCH_IXP2000 > - bool "IXP2400/2800-based" > - depends on MMU > - select CPU_XSCALE > - select PCI > - select ARCH_USES_GETTIMEOFFSET > - select NEED_MACH_IO_H > - select NEED_MACH_MEMORY_H > - help > - Support for Intel's IXP2400/2800 (XScale) family of processors. > - > config ARCH_IXP4XX > bool "IXP4xx-based" > depends on MMU > @@ -1045,10 +1023,6 @@ source "arch/arm/mach-iop13xx/Kconfig" > > source "arch/arm/mach-ixp4xx/Kconfig" > > -source "arch/arm/mach-ixp2000/Kconfig" > - > -source "arch/arm/mach-ixp23xx/Kconfig" > - > source "arch/arm/mach-kirkwood/Kconfig" > > source "arch/arm/mach-ks8695/Kconfig" > diff --git a/arch/arm/Makefile b/arch/arm/Makefile > index 047a207..a0c40a0 100644 > --- a/arch/arm/Makefile > +++ b/arch/arm/Makefile > @@ -149,8 +149,6 @@ machine-$(CONFIG_ARCH_INTEGRATOR) := integrator > machine-$(CONFIG_ARCH_IOP13XX) := iop13xx > machine-$(CONFIG_ARCH_IOP32X) := iop32x > machine-$(CONFIG_ARCH_IOP33X) := iop33x > -machine-$(CONFIG_ARCH_IXP2000) := ixp2000 > -machine-$(CONFIG_ARCH_IXP23XX) := ixp23xx > machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx > machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood > machine-$(CONFIG_ARCH_KS8695) := ks8695 > diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S > index aa5ee49..6ab0599 100644 > --- a/arch/arm/boot/compressed/head-xscale.S > +++ b/arch/arm/boot/compressed/head-xscale.S > @@ -32,10 +32,3 @@ __XScale_start: > bic r0, r0, #0x1000 @ clear Icache > mcr p15, 0, r0, c1, c0, 0 > > -#ifdef CONFIG_ARCH_IXP2000 > - mov r1, #-1 > - mov r0, #0xd6000000 > - str r1, [r0, #0x14] > - str r1, [r0, #0x18] > -#endif > - > diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile > index 215816f..e8a4e58 100644 > --- a/arch/arm/common/Makefile > +++ b/arch/arm/common/Makefile > @@ -11,7 +11,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o > obj-$(CONFIG_SHARP_LOCOMO) += locomo.o > obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o > obj-$(CONFIG_SHARP_SCOOP) += scoop.o > -obj-$(CONFIG_ARCH_IXP2000) += uengine.o > -obj-$(CONFIG_ARCH_IXP23XX) += uengine.o > obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o > obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o > > [snip] > > The rest of the patch is just deleted files and too big to get thru the > lists, so I cut it out. > > Rob ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms 2012-04-04 12:18 ` [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring @ 2012-04-04 12:24 ` Lennert Buytenhek 0 siblings, 0 replies; 14+ messages in thread From: Lennert Buytenhek @ 2012-04-04 12:24 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Arnd Bergmann, Olof Johansson, Rob Herring, Randy Dunlap On Wed, Apr 04, 2012 at 07:18:51AM -0500, Rob Herring wrote: > > From: Rob Herring <rob.herring@calxeda.com> > > > > ixp2xxx platforms have had no real changes since ~2006 and the maintainer > > has said on irc that they can be removed: > > > > 13:05 < nico> do you still care about ixp2000? > > 13:22 < lennert> not really, no > > 13:58 < nico> do you think we could remove it from the kernel tree? > > 14:01 < lennert> go for it, and remove ixp23xx too while you're at it Acked-by: Lennert Buytenhek <buytenh@wantstofly.org> > > Removing will help simplify ARM consolidation in general and PCI re-work > > specifically. But this seems pretty specious. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring ` (4 preceding siblings ...) 2012-04-04 12:18 ` [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring @ 2012-04-04 12:35 ` Arnd Bergmann 2012-04-10 22:13 ` Jaccon Bastiaansen 5 siblings, 1 reply; 14+ messages in thread From: Arnd Bergmann @ 2012-04-04 12:35 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Olof Johansson, Rob Herring, Randy Dunlap, Jaccon Bastiaansen, Sascha Hauer, Russell Nelson On Wednesday 04 April 2012, Rob Herring wrote: > From: Rob Herring <rob.herring@calxeda.com> > > ixp2xxx platforms have had no real changes since ~2006 and the maintainer > has said on irc that they can be removed: > > 13:05 < nico> do you still care about ixp2000? > 13:22 < lennert> not really, no > 13:58 < nico> do you think we could remove it from the kernel tree? > 14:01 < lennert> go for it, and remove ixp23xx too while you're at it > > Removing will help simplify ARM consolidation in general and PCI re-work > specifically. This will let us kill another bit of ugly code: 8<----- [PATCH] net: cs89x0: remove ixp2xxx specific hacks The IXDP2351 and IXDP2X01 machines are getting removed from the kernel, so there is no longer a need to special-case them in the cs89x0 driver. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- drivers/net/ethernet/cirrus/cs89x0.c | 36 ---------------------------------- 1 files changed, 0 insertions(+), 36 deletions(-) diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c index b9406cb..6b92080 100644 --- a/drivers/net/ethernet/cirrus/cs89x0.c +++ b/drivers/net/ethernet/cirrus/cs89x0.c @@ -173,21 +173,11 @@ static char version[] __initdata = /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps them to system IRQ numbers. This mapping is card specific and is set to the configuration of the Cirrus Eval board for this chip. */ -#if defined(CONFIG_MACH_IXDP2351) -#define CS89x0_NONISA_IRQ -static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0}; -static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0}; -#elif defined(CONFIG_ARCH_IXDP2X01) -#define CS89x0_NONISA_IRQ -static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0}; -static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; -#else #ifndef CONFIG_CS89x0_PLATFORM static unsigned int netcard_portlist[] __used __initdata = { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; static unsigned int cs8900_irq_map[] = {10,11,12,5}; #endif -#endif #if DEBUGGING static unsigned int net_debug = DEBUGGING; @@ -345,31 +335,6 @@ out: #endif #endif -#if defined(CONFIG_MACH_IXDP2351) -static u16 -readword(unsigned long base_addr, int portno) -{ - return __raw_readw(base_addr + (portno << 1)); -} - -static void -writeword(unsigned long base_addr, int portno, u16 value) -{ - __raw_writew(value, base_addr + (portno << 1)); -} -#elif defined(CONFIG_ARCH_IXDP2X01) -static u16 -readword(unsigned long base_addr, int portno) -{ - return __raw_readl(base_addr + (portno << 1)); -} - -static void -writeword(unsigned long base_addr, int portno, u16 value) -{ - __raw_writel(value, base_addr + (portno << 1)); -} -#else static u16 readword(unsigned long base_addr, int portno) { @@ -381,7 +346,6 @@ writeword(unsigned long base_addr, int portno, u16 value) { outw(value, base_addr + portno); } -#endif static void readwords(unsigned long base_addr, int portno, void *buf, int length) ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms 2012-04-04 12:35 ` Arnd Bergmann @ 2012-04-10 22:13 ` Jaccon Bastiaansen 0 siblings, 0 replies; 14+ messages in thread From: Jaccon Bastiaansen @ 2012-04-10 22:13 UTC (permalink / raw) To: Arnd Bergmann Cc: Rob Herring, linux-kernel, linux-arm-kernel, Russell King, Nicolas Pitre, Olof Johansson, Rob Herring, Randy Dunlap, Sascha Hauer, Russell Nelson Hello Arnd, Op 4 april 2012 14:35 heeft Arnd Bergmann <arnd@arndb.de> het volgende geschreven: > On Wednesday 04 April 2012, Rob Herring wrote: >> From: Rob Herring <rob.herring@calxeda.com> >> >> ixp2xxx platforms have had no real changes since ~2006 and the maintainer >> has said on irc that they can be removed: >> >> 13:05 < nico> do you still care about ixp2000? >> 13:22 < lennert> not really, no >> 13:58 < nico> do you think we could remove it from the kernel tree? >> 14:01 < lennert> go for it, and remove ixp23xx too while you're at it >> >> Removing will help simplify ARM consolidation in general and PCI re-work >> specifically. > > This will let us kill another bit of ugly code: > 8<----- > [PATCH] net: cs89x0: remove ixp2xxx specific hacks > > The IXDP2351 and IXDP2X01 machines are getting removed from the kernel, so there > is no longer a need to special-case them in the cs89x0 driver. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/net/ethernet/cirrus/cs89x0.c | 36 ---------------------------------- > 1 files changed, 0 insertions(+), 36 deletions(-) > > diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c > index b9406cb..6b92080 100644 > --- a/drivers/net/ethernet/cirrus/cs89x0.c > +++ b/drivers/net/ethernet/cirrus/cs89x0.c > @@ -173,21 +173,11 @@ static char version[] __initdata = > /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps > them to system IRQ numbers. This mapping is card specific and is set to > the configuration of the Cirrus Eval board for this chip. */ > -#if defined(CONFIG_MACH_IXDP2351) > -#define CS89x0_NONISA_IRQ > -static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0}; > -static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0}; > -#elif defined(CONFIG_ARCH_IXDP2X01) > -#define CS89x0_NONISA_IRQ > -static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0}; > -static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; > -#else > #ifndef CONFIG_CS89x0_PLATFORM > static unsigned int netcard_portlist[] __used __initdata = > { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; > static unsigned int cs8900_irq_map[] = {10,11,12,5}; > #endif > -#endif > > #if DEBUGGING > static unsigned int net_debug = DEBUGGING; > @@ -345,31 +335,6 @@ out: > #endif > #endif > > -#if defined(CONFIG_MACH_IXDP2351) > -static u16 > -readword(unsigned long base_addr, int portno) > -{ > - return __raw_readw(base_addr + (portno << 1)); > -} > - > -static void > -writeword(unsigned long base_addr, int portno, u16 value) > -{ > - __raw_writew(value, base_addr + (portno << 1)); > -} > -#elif defined(CONFIG_ARCH_IXDP2X01) > -static u16 > -readword(unsigned long base_addr, int portno) > -{ > - return __raw_readl(base_addr + (portno << 1)); > -} > - > -static void > -writeword(unsigned long base_addr, int portno, u16 value) > -{ > - __raw_writel(value, base_addr + (portno << 1)); > -} > -#else > static u16 > readword(unsigned long base_addr, int portno) > { > @@ -381,7 +346,6 @@ writeword(unsigned long base_addr, int portno, u16 value) > { > outw(value, base_addr + portno); > } > -#endif > > static void > readwords(unsigned long base_addr, int portno, void *buf, int length) You can now also remove all the uses of CS89x0_NONISA_IRQ, since those are only used for the IXDP specific parts of the CS89x0 driver. Regards Jaccon ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-05-02 16:48 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-04-04 1:33 [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring 2012-04-04 1:34 ` [PATCH 2/5] net: remove ixp2000 ethernet driver Rob Herring 2012-04-04 10:20 ` Jeff Kirsher 2012-04-04 12:25 ` Lennert Buytenhek 2012-04-04 22:09 ` David Miller 2012-04-04 1:34 ` [PATCH 3/5] i2c: remove ixp2000 driver Rob Herring 2012-04-22 16:31 ` Wolfram Sang 2012-04-04 1:34 ` [PATCH 4/5] mtd: remove ixp2000 map device Rob Herring 2012-04-04 1:34 ` [PATCH 5/5] watchdog: remove ixp2000 driver Rob Herring 2012-05-02 16:15 ` Wim Van Sebroeck 2012-04-04 12:18 ` [PATCH 1/5] ARM: remove ixp23xx and ixp2000 platforms Rob Herring 2012-04-04 12:24 ` Lennert Buytenhek 2012-04-04 12:35 ` Arnd Bergmann 2012-04-10 22:13 ` Jaccon Bastiaansen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).