xref: /OK3568_Linux_fs/kernel/Documentation/arm/ixp4xx.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun===========================================================
2*4882a593SmuzhiyunRelease Notes for Linux on Intel's IXP4xx Network Processor
3*4882a593Smuzhiyun===========================================================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunMaintained by Deepak Saxena <dsaxena@plexity.net>
6*4882a593Smuzhiyun-------------------------------------------------------------------------
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun1. Overview
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunIntel's IXP4xx network processor is a highly integrated SOC that
11*4882a593Smuzhiyunis targeted for network applications, though it has become popular
12*4882a593Smuzhiyunin industrial control and other areas due to low cost and power
13*4882a593Smuzhiyunconsumption. The IXP4xx family currently consists of several processors
14*4882a593Smuzhiyunthat support different network offload functions such as encryption,
15*4882a593Smuzhiyunrouting, firewalling, etc. The IXP46x family is an updated version which
16*4882a593Smuzhiyunsupports faster speeds, new memory and flash configurations, and more
17*4882a593Smuzhiyunintegration such as an on-chip I2C controller.
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunFor more information on the various versions of the CPU, see:
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun   http://developer.intel.com/design/network/products/npfamily/ixp4xx.htm
22*4882a593Smuzhiyun
23*4882a593SmuzhiyunIntel also made the IXCP1100 CPU for sometime which is an IXP4xx
24*4882a593Smuzhiyunstripped of much of the network intelligence.
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun2. Linux Support
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunLinux currently supports the following features on the IXP4xx chips:
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun- Dual serial ports
31*4882a593Smuzhiyun- PCI interface
32*4882a593Smuzhiyun- Flash access (MTD/JFFS)
33*4882a593Smuzhiyun- I2C through GPIO on IXP42x
34*4882a593Smuzhiyun- GPIO for input/output/interrupts
35*4882a593Smuzhiyun  See arch/arm/mach-ixp4xx/include/mach/platform.h for access functions.
36*4882a593Smuzhiyun- Timers (watchdog, OS)
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunThe following components of the chips are not supported by Linux and
39*4882a593Smuzhiyunrequire the use of Intel's proprietary CSR software:
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun- USB device interface
42*4882a593Smuzhiyun- Network interfaces (HSS, Utopia, NPEs, etc)
43*4882a593Smuzhiyun- Network offload functionality
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunIf you need to use any of the above, you need to download Intel's
46*4882a593Smuzhiyunsoftware from:
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun   http://developer.intel.com/design/network/products/npfamily/ixp425.htm
49*4882a593Smuzhiyun
50*4882a593SmuzhiyunDO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPRIETARY
51*4882a593SmuzhiyunSOFTWARE.
52*4882a593Smuzhiyun
53*4882a593SmuzhiyunThere are several websites that provide directions/pointers on using
54*4882a593SmuzhiyunIntel's software:
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun   - http://sourceforge.net/projects/ixp4xx-osdg/
57*4882a593Smuzhiyun     Open Source Developer's Guide for using uClinux and the Intel libraries
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun   - http://gatewaymaker.sourceforge.net/
60*4882a593Smuzhiyun     Simple one page summary of building a gateway using an IXP425 and Linux
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun   - http://ixp425.sourceforge.net/
63*4882a593Smuzhiyun     ATM device driver for IXP425 that relies on Intel's libraries
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun3. Known Issues/Limitations
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun3a. Limited inbound PCI window
68*4882a593Smuzhiyun
69*4882a593SmuzhiyunThe IXP4xx family allows for up to 256MB of memory but the PCI interface
70*4882a593Smuzhiyuncan only expose 64MB of that memory to the PCI bus. This means that if
71*4882a593Smuzhiyunyou are running with > 64MB, all PCI buffers outside of the accessible
72*4882a593Smuzhiyunrange will be bounced using the routines in arch/arm/common/dmabounce.c.
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun3b. Limited outbound PCI window
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunIXP4xx provides two methods of accessing PCI memory space:
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB).
79*4882a593Smuzhiyun   To access PCI via this space, we simply ioremap() the BAR
80*4882a593Smuzhiyun   into the kernel and we can use the standard read[bwl]/write[bwl]
81*4882a593Smuzhiyun   macros. This is the preffered method due to speed but it
82*4882a593Smuzhiyun   limits the system to just 64MB of PCI memory. This can be
83*4882a593Smuzhiyun   problamatic if using video cards and other memory-heavy devices.
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun2) If > 64MB of memory space is required, the IXP4xx can be
86*4882a593Smuzhiyun   configured to use indirect registers to access PCI This allows
87*4882a593Smuzhiyun   for up to 128MB (0x48000000 to 0x4fffffff) of memory on the bus.
88*4882a593Smuzhiyun   The disadvantage of this is that every PCI access requires
89*4882a593Smuzhiyun   three local register accesses plus a spinlock, but in some
90*4882a593Smuzhiyun   cases the performance hit is acceptable. In addition, you cannot
91*4882a593Smuzhiyun   mmap() PCI devices in this case due to the indirect nature
92*4882a593Smuzhiyun   of the PCI window.
93*4882a593Smuzhiyun
94*4882a593SmuzhiyunBy default, the direct method is used for performance reasons. If
95*4882a593Smuzhiyunyou need more PCI memory, enable the IXP4XX_INDIRECT_PCI config option.
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun3c. GPIO as Interrupts
98*4882a593Smuzhiyun
99*4882a593SmuzhiyunCurrently the code only handles level-sensitive GPIO interrupts
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun4. Supported platforms
102*4882a593Smuzhiyun
103*4882a593SmuzhiyunADI Engineering Coyote Gateway Reference Platform
104*4882a593Smuzhiyunhttp://www.adiengineering.com/productsCoyote.html
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun   The ADI Coyote platform is reference design for those building
107*4882a593Smuzhiyun   small residential/office gateways. One NPE is connected to a 10/100
108*4882a593Smuzhiyun   interface, one to 4-port 10/100 switch, and the third to and ADSL
109*4882a593Smuzhiyun   interface. In addition, it also supports to POTs interfaces connected
110*4882a593Smuzhiyun   via SLICs. Note that those are not supported by Linux ATM. Finally,
111*4882a593Smuzhiyun   the platform has two mini-PCI slots used for 802.11[bga] cards.
112*4882a593Smuzhiyun   Finally, there is an IDE port hanging off the expansion bus.
113*4882a593Smuzhiyun
114*4882a593SmuzhiyunGateworks Avila Network Platform
115*4882a593Smuzhiyunhttp://www.gateworks.com/support/overview.php
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun   The Avila platform is basically and IXDP425 with the 4 PCI slots
118*4882a593Smuzhiyun   replaced with mini-PCI slots and a CF IDE interface hanging off
119*4882a593Smuzhiyun   the expansion bus.
120*4882a593Smuzhiyun
121*4882a593SmuzhiyunIntel IXDP425 Development Platform
122*4882a593Smuzhiyunhttp://www.intel.com/design/network/products/npfamily/ixdpg425.htm
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun   This is Intel's standard reference platform for the IXDP425 and is
125*4882a593Smuzhiyun   also known as the Richfield board. It contains 4 PCI slots, 16MB
126*4882a593Smuzhiyun   of flash, two 10/100 ports and one ADSL port.
127*4882a593Smuzhiyun
128*4882a593SmuzhiyunIntel IXDP465 Development Platform
129*4882a593Smuzhiyunhttp://www.intel.com/design/network/products/npfamily/ixdp465.htm
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun   This is basically an IXDP425 with an IXP465 and 32M of flash instead
132*4882a593Smuzhiyun   of just 16.
133*4882a593Smuzhiyun
134*4882a593SmuzhiyunIntel IXDPG425 Development Platform
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun   This is basically and ADI Coyote board with a NEC EHCI controller
137*4882a593Smuzhiyun   added. One issue with this board is that the mini-PCI slots only
138*4882a593Smuzhiyun   have the 3.3v line connected, so you can't use a PCI to mini-PCI
139*4882a593Smuzhiyun   adapter with an E100 card. So to NFS root you need to use either
140*4882a593Smuzhiyun   the CSR or a WiFi card and a ramdisk that BOOTPs and then does
141*4882a593Smuzhiyun   a pivot_root to NFS.
142*4882a593Smuzhiyun
143*4882a593SmuzhiyunMotorola PrPMC1100 Processor Mezanine Card
144*4882a593Smuzhiyunhttp://www.fountainsys.com
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun   The PrPMC1100 is based on the IXCP1100 and is meant to plug into
147*4882a593Smuzhiyun   and IXP2400/2800 system to act as the system controller. It simply
148*4882a593Smuzhiyun   contains a CPU and 16MB of flash on the board and needs to be
149*4882a593Smuzhiyun   plugged into a carrier board to function. Currently Linux only
150*4882a593Smuzhiyun   supports the Motorola PrPMC carrier board for this platform.
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun5. TODO LIST
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun- Add support for Coyote IDE
155*4882a593Smuzhiyun- Add support for edge-based GPIO interrupts
156*4882a593Smuzhiyun- Add support for CF IDE on expansion bus
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun6. Thanks
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunThe IXP4xx work has been funded by Intel Corp. and MontaVista Software, Inc.
161*4882a593Smuzhiyun
162*4882a593SmuzhiyunThe following people have contributed patches/comments/etc:
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun- Lennerty Buytenhek
165*4882a593Smuzhiyun- Lutz Jaenicke
166*4882a593Smuzhiyun- Justin Mayfield
167*4882a593Smuzhiyun- Robert E. Ranslam
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun[I know I've forgotten others, please email me to be added]
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun-------------------------------------------------------------------------
172*4882a593Smuzhiyun
173*4882a593SmuzhiyunLast Update: 01/04/2005
174