xref: /OK3568_Linux_fs/kernel/Documentation/driver-api/rapidio/rapidio.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun============
2*4882a593SmuzhiyunIntroduction
3*4882a593Smuzhiyun============
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunThe RapidIO standard is a packet-based fabric interconnect standard designed for
6*4882a593Smuzhiyunuse in embedded systems. Development of the RapidIO standard is directed by the
7*4882a593SmuzhiyunRapidIO Trade Association (RTA). The current version of the RapidIO specification
8*4882a593Smuzhiyunis publicly available for download from the RTA web-site [1].
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunThis document describes the basics of the Linux RapidIO subsystem and provides
11*4882a593Smuzhiyuninformation on its major components.
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun1 Overview
14*4882a593Smuzhiyun==========
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunBecause the RapidIO subsystem follows the Linux device model it is integrated
17*4882a593Smuzhiyuninto the kernel similarly to other buses by defining RapidIO-specific device and
18*4882a593Smuzhiyunbus types and registering them within the device model.
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunThe Linux RapidIO subsystem is architecture independent and therefore defines
21*4882a593Smuzhiyunarchitecture-specific interfaces that provide support for common RapidIO
22*4882a593Smuzhiyunsubsystem operations.
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun2. Core Components
25*4882a593Smuzhiyun==================
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunA typical RapidIO network is a combination of endpoints and switches.
28*4882a593SmuzhiyunEach of these components is represented in the subsystem by an associated data
29*4882a593Smuzhiyunstructure. The core logical components of the RapidIO subsystem are defined
30*4882a593Smuzhiyunin include/linux/rio.h file.
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun2.1 Master Port
33*4882a593Smuzhiyun---------------
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunA master port (or mport) is a RapidIO interface controller that is local to the
36*4882a593Smuzhiyunprocessor executing the Linux code. A master port generates and receives RapidIO
37*4882a593Smuzhiyunpackets (transactions). In the RapidIO subsystem each master port is represented
38*4882a593Smuzhiyunby a rio_mport data structure. This structure contains master port specific
39*4882a593Smuzhiyunresources such as mailboxes and doorbells. The rio_mport also includes a unique
40*4882a593Smuzhiyunhost device ID that is valid when a master port is configured as an enumerating
41*4882a593Smuzhiyunhost.
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunRapidIO master ports are serviced by subsystem specific mport device drivers
44*4882a593Smuzhiyunthat provide functionality defined for this subsystem. To provide a hardware
45*4882a593Smuzhiyunindependent interface for RapidIO subsystem operations, rio_mport structure
46*4882a593Smuzhiyunincludes rio_ops data structure which contains pointers to hardware specific
47*4882a593Smuzhiyunimplementations of RapidIO functions.
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun2.2 Device
50*4882a593Smuzhiyun----------
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunA RapidIO device is any endpoint (other than mport) or switch in the network.
53*4882a593SmuzhiyunAll devices are presented in the RapidIO subsystem by corresponding rio_dev data
54*4882a593Smuzhiyunstructure. Devices form one global device list and per-network device lists
55*4882a593Smuzhiyun(depending on number of available mports and networks).
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun2.3 Switch
58*4882a593Smuzhiyun----------
59*4882a593Smuzhiyun
60*4882a593SmuzhiyunA RapidIO switch is a special class of device that routes packets between its
61*4882a593Smuzhiyunports towards their final destination. The packet destination port within a
62*4882a593Smuzhiyunswitch is defined by an internal routing table. A switch is presented in the
63*4882a593SmuzhiyunRapidIO subsystem by rio_dev data structure expanded by additional rio_switch
64*4882a593Smuzhiyundata structure, which contains switch specific information such as copy of the
65*4882a593Smuzhiyunrouting table and pointers to switch specific functions.
66*4882a593Smuzhiyun
67*4882a593SmuzhiyunThe RapidIO subsystem defines the format and initialization method for subsystem
68*4882a593Smuzhiyunspecific switch drivers that are designed to provide hardware-specific
69*4882a593Smuzhiyunimplementation of common switch management routines.
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun2.4 Network
72*4882a593Smuzhiyun-----------
73*4882a593Smuzhiyun
74*4882a593SmuzhiyunA RapidIO network is a combination of interconnected endpoint and switch devices.
75*4882a593SmuzhiyunEach RapidIO network known to the system is represented by corresponding rio_net
76*4882a593Smuzhiyundata structure. This structure includes lists of all devices and local master
77*4882a593Smuzhiyunports that form the same network. It also contains a pointer to the default
78*4882a593Smuzhiyunmaster port that is used to communicate with devices within the network.
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun2.5 Device Drivers
81*4882a593Smuzhiyun------------------
82*4882a593Smuzhiyun
83*4882a593SmuzhiyunRapidIO device-specific drivers follow Linux Kernel Driver Model and are
84*4882a593Smuzhiyunintended to support specific RapidIO devices attached to the RapidIO network.
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun2.6 Subsystem Interfaces
87*4882a593Smuzhiyun------------------------
88*4882a593Smuzhiyun
89*4882a593SmuzhiyunRapidIO interconnect specification defines features that may be used to provide
90*4882a593Smuzhiyunone or more common service layers for all participating RapidIO devices. These
91*4882a593Smuzhiyuncommon services may act separately from device-specific drivers or be used by
92*4882a593Smuzhiyundevice-specific drivers. Example of such service provider is the RIONET driver
93*4882a593Smuzhiyunwhich implements Ethernet-over-RapidIO interface. Because only one driver can be
94*4882a593Smuzhiyunregistered for a device, all common RapidIO services have to be registered as
95*4882a593Smuzhiyunsubsystem interfaces. This allows to have multiple common services attached to
96*4882a593Smuzhiyunthe same device without blocking attachment of a device-specific driver.
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun3. Subsystem Initialization
99*4882a593Smuzhiyun===========================
100*4882a593Smuzhiyun
101*4882a593SmuzhiyunIn order to initialize the RapidIO subsystem, a platform must initialize and
102*4882a593Smuzhiyunregister at least one master port within the RapidIO network. To register mport
103*4882a593Smuzhiyunwithin the subsystem controller driver's initialization code calls function
104*4882a593Smuzhiyunrio_register_mport() for each available master port.
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunAfter all active master ports are registered with a RapidIO subsystem,
107*4882a593Smuzhiyunan enumeration and/or discovery routine may be called automatically or
108*4882a593Smuzhiyunby user-space command.
109*4882a593Smuzhiyun
110*4882a593SmuzhiyunRapidIO subsystem can be configured to be built as a statically linked or
111*4882a593Smuzhiyunmodular component of the kernel (see details below).
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun4. Enumeration and Discovery
114*4882a593Smuzhiyun============================
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun4.1 Overview
117*4882a593Smuzhiyun------------
118*4882a593Smuzhiyun
119*4882a593SmuzhiyunRapidIO subsystem configuration options allow users to build enumeration and
120*4882a593Smuzhiyundiscovery methods as statically linked components or loadable modules.
121*4882a593SmuzhiyunAn enumeration/discovery method implementation and available input parameters
122*4882a593Smuzhiyundefine how any given method can be attached to available RapidIO mports:
123*4882a593Smuzhiyunsimply to all available mports OR individually to the specified mport device.
124*4882a593Smuzhiyun
125*4882a593SmuzhiyunDepending on selected enumeration/discovery build configuration, there are
126*4882a593Smuzhiyunseveral methods to initiate an enumeration and/or discovery process:
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun  (a) Statically linked enumeration and discovery process can be started
129*4882a593Smuzhiyun  automatically during kernel initialization time using corresponding module
130*4882a593Smuzhiyun  parameters. This was the original method used since introduction of RapidIO
131*4882a593Smuzhiyun  subsystem. Now this method relies on enumerator module parameter which is
132*4882a593Smuzhiyun  'rio-scan.scan' for existing basic enumeration/discovery method.
133*4882a593Smuzhiyun  When automatic start of enumeration/discovery is used a user has to ensure
134*4882a593Smuzhiyun  that all discovering endpoints are started before the enumerating endpoint
135*4882a593Smuzhiyun  and are waiting for enumeration to be completed.
136*4882a593Smuzhiyun  Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering
137*4882a593Smuzhiyun  endpoint waits for enumeration to be completed. If the specified timeout
138*4882a593Smuzhiyun  expires the discovery process is terminated without obtaining RapidIO network
139*4882a593Smuzhiyun  information. NOTE: a timed out discovery process may be restarted later using
140*4882a593Smuzhiyun  a user-space command as it is described below (if the given endpoint was
141*4882a593Smuzhiyun  enumerated successfully).
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun  (b) Statically linked enumeration and discovery process can be started by
144*4882a593Smuzhiyun  a command from user space. This initiation method provides more flexibility
145*4882a593Smuzhiyun  for a system startup compared to the option (a) above. After all participating
146*4882a593Smuzhiyun  endpoints have been successfully booted, an enumeration process shall be
147*4882a593Smuzhiyun  started first by issuing a user-space command, after an enumeration is
148*4882a593Smuzhiyun  completed a discovery process can be started on all remaining endpoints.
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun  (c) Modular enumeration and discovery process can be started by a command from
151*4882a593Smuzhiyun  user space. After an enumeration/discovery module is loaded, a network scan
152*4882a593Smuzhiyun  process can be started by issuing a user-space command.
153*4882a593Smuzhiyun  Similar to the option (b) above, an enumerator has to be started first.
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun  (d) Modular enumeration and discovery process can be started by a module
156*4882a593Smuzhiyun  initialization routine. In this case an enumerating module shall be loaded
157*4882a593Smuzhiyun  first.
158*4882a593Smuzhiyun
159*4882a593SmuzhiyunWhen a network scan process is started it calls an enumeration or discovery
160*4882a593Smuzhiyunroutine depending on the configured role of a master port: host or agent.
161*4882a593Smuzhiyun
162*4882a593SmuzhiyunEnumeration is performed by a master port if it is configured as a host port by
163*4882a593Smuzhiyunassigning a host destination ID greater than or equal to zero. The host
164*4882a593Smuzhiyundestination ID can be assigned to a master port using various methods depending
165*4882a593Smuzhiyunon RapidIO subsystem build configuration:
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun  (a) For a statically linked RapidIO subsystem core use command line parameter
168*4882a593Smuzhiyun  "rapidio.hdid=" with a list of destination ID assignments in order of mport
169*4882a593Smuzhiyun  device registration. For example, in a system with two RapidIO controllers
170*4882a593Smuzhiyun  the command line parameter "rapidio.hdid=-1,7" will result in assignment of
171*4882a593Smuzhiyun  the host destination ID=7 to the second RapidIO controller, while the first
172*4882a593Smuzhiyun  one will be assigned destination ID=-1.
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun  (b) If the RapidIO subsystem core is built as a loadable module, in addition
175*4882a593Smuzhiyun  to the method shown above, the host destination ID(s) can be specified using
176*4882a593Smuzhiyun  traditional methods of passing module parameter "hdid=" during its loading:
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun  - from command line: "modprobe rapidio hdid=-1,7", or
179*4882a593Smuzhiyun  - from modprobe configuration file using configuration command "options",
180*4882a593Smuzhiyun    like in this example: "options rapidio hdid=-1,7". An example of modprobe
181*4882a593Smuzhiyun    configuration file is provided in the section below.
182*4882a593Smuzhiyun
183*4882a593SmuzhiyunNOTES:
184*4882a593Smuzhiyun  (i) if "hdid=" parameter is omitted all available mport will be assigned
185*4882a593Smuzhiyun  destination ID = -1;
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun  (ii) the "hdid=" parameter in systems with multiple mports can have
188*4882a593Smuzhiyun  destination ID assignments omitted from the end of list (default = -1).
189*4882a593Smuzhiyun
190*4882a593SmuzhiyunIf the host device ID for a specific master port is set to -1, the discovery
191*4882a593Smuzhiyunprocess will be performed for it.
192*4882a593Smuzhiyun
193*4882a593SmuzhiyunThe enumeration and discovery routines use RapidIO maintenance transactions
194*4882a593Smuzhiyunto access the configuration space of devices.
195*4882a593Smuzhiyun
196*4882a593SmuzhiyunNOTE: If RapidIO switch-specific device drivers are built as loadable modules
197*4882a593Smuzhiyunthey must be loaded before enumeration/discovery process starts.
198*4882a593SmuzhiyunThis requirement is cased by the fact that enumeration/discovery methods invoke
199*4882a593Smuzhiyunvendor-specific callbacks on early stages.
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun4.2 Automatic Start of Enumeration and Discovery
202*4882a593Smuzhiyun------------------------------------------------
203*4882a593Smuzhiyun
204*4882a593SmuzhiyunAutomatic enumeration/discovery start method is applicable only to built-in
205*4882a593Smuzhiyunenumeration/discovery RapidIO configuration selection. To enable automatic
206*4882a593Smuzhiyunenumeration/discovery start by existing basic enumerator method set use boot
207*4882a593Smuzhiyuncommand line parameter "rio-scan.scan=1".
208*4882a593Smuzhiyun
209*4882a593SmuzhiyunThis configuration requires synchronized start of all RapidIO endpoints that
210*4882a593Smuzhiyunform a network which will be enumerated/discovered. Discovering endpoints have
211*4882a593Smuzhiyunto be started before an enumeration starts to ensure that all RapidIO
212*4882a593Smuzhiyuncontrollers have been initialized and are ready to be discovered. Configuration
213*4882a593Smuzhiyunparameter CONFIG_RAPIDIO_DISC_TIMEOUT defines time (in seconds) which
214*4882a593Smuzhiyuna discovering endpoint will wait for enumeration to be completed.
215*4882a593Smuzhiyun
216*4882a593SmuzhiyunWhen automatic enumeration/discovery start is selected, basic method's
217*4882a593Smuzhiyuninitialization routine calls rio_init_mports() to perform enumeration or
218*4882a593Smuzhiyundiscovery for all known mport devices.
219*4882a593Smuzhiyun
220*4882a593SmuzhiyunDepending on RapidIO network size and configuration this automatic
221*4882a593Smuzhiyunenumeration/discovery start method may be difficult to use due to the
222*4882a593Smuzhiyunrequirement for synchronized start of all endpoints.
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun4.3 User-space Start of Enumeration and Discovery
225*4882a593Smuzhiyun-------------------------------------------------
226*4882a593Smuzhiyun
227*4882a593SmuzhiyunUser-space start of enumeration and discovery can be used with built-in and
228*4882a593Smuzhiyunmodular build configurations. For user-space controlled start RapidIO subsystem
229*4882a593Smuzhiyuncreates the sysfs write-only attribute file '/sys/bus/rapidio/scan'. To initiate
230*4882a593Smuzhiyunan enumeration or discovery process on specific mport device, a user needs to
231*4882a593Smuzhiyunwrite mport_ID (not RapidIO destination ID) into that file. The mport_ID is a
232*4882a593Smuzhiyunsequential number (0 ... RIO_MAX_MPORTS) assigned during mport device
233*4882a593Smuzhiyunregistration. For example for machine with single RapidIO controller, mport_ID
234*4882a593Smuzhiyunfor that controller always will be 0.
235*4882a593Smuzhiyun
236*4882a593SmuzhiyunTo initiate RapidIO enumeration/discovery on all available mports a user may
237*4882a593Smuzhiyunwrite '-1' (or RIO_MPORT_ANY) into the scan attribute file.
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun4.4 Basic Enumeration Method
240*4882a593Smuzhiyun----------------------------
241*4882a593Smuzhiyun
242*4882a593SmuzhiyunThis is an original enumeration/discovery method which is available since
243*4882a593Smuzhiyunfirst release of RapidIO subsystem code. The enumeration process is
244*4882a593Smuzhiyunimplemented according to the enumeration algorithm outlined in the RapidIO
245*4882a593SmuzhiyunInterconnect Specification: Annex I [1].
246*4882a593Smuzhiyun
247*4882a593SmuzhiyunThis method can be configured as statically linked or loadable module.
248*4882a593SmuzhiyunThe method's single parameter "scan" allows to trigger the enumeration/discovery
249*4882a593Smuzhiyunprocess from module initialization routine.
250*4882a593Smuzhiyun
251*4882a593SmuzhiyunThis enumeration/discovery method can be started only once and does not support
252*4882a593Smuzhiyununloading if it is built as a module.
253*4882a593Smuzhiyun
254*4882a593SmuzhiyunThe enumeration process traverses the network using a recursive depth-first
255*4882a593Smuzhiyunalgorithm. When a new device is found, the enumerator takes ownership of that
256*4882a593Smuzhiyundevice by writing into the Host Device ID Lock CSR. It does this to ensure that
257*4882a593Smuzhiyunthe enumerator has exclusive right to enumerate the device. If device ownership
258*4882a593Smuzhiyunis successfully acquired, the enumerator allocates a new rio_dev structure and
259*4882a593Smuzhiyuninitializes it according to device capabilities.
260*4882a593Smuzhiyun
261*4882a593SmuzhiyunIf the device is an endpoint, a unique device ID is assigned to it and its value
262*4882a593Smuzhiyunis written into the device's Base Device ID CSR.
263*4882a593Smuzhiyun
264*4882a593SmuzhiyunIf the device is a switch, the enumerator allocates an additional rio_switch
265*4882a593Smuzhiyunstructure to store switch specific information. Then the switch's vendor ID and
266*4882a593Smuzhiyundevice ID are queried against a table of known RapidIO switches. Each switch
267*4882a593Smuzhiyuntable entry contains a pointer to a switch-specific initialization routine that
268*4882a593Smuzhiyuninitializes pointers to the rest of switch specific operations, and performs
269*4882a593Smuzhiyunhardware initialization if necessary. A RapidIO switch does not have a unique
270*4882a593Smuzhiyundevice ID; it relies on hopcount and routing for device ID of an attached
271*4882a593Smuzhiyunendpoint if access to its configuration registers is required. If a switch (or
272*4882a593Smuzhiyunchain of switches) does not have any endpoint (except enumerator) attached to
273*4882a593Smuzhiyunit, a fake device ID will be assigned to configure a route to that switch.
274*4882a593SmuzhiyunIn the case of a chain of switches without endpoint, one fake device ID is used
275*4882a593Smuzhiyunto configure a route through the entire chain and switches are differentiated by
276*4882a593Smuzhiyuntheir hopcount value.
277*4882a593Smuzhiyun
278*4882a593SmuzhiyunFor both endpoints and switches the enumerator writes a unique component tag
279*4882a593Smuzhiyuninto device's Component Tag CSR. That unique value is used by the error
280*4882a593Smuzhiyunmanagement notification mechanism to identify a device that is reporting an
281*4882a593Smuzhiyunerror management event.
282*4882a593Smuzhiyun
283*4882a593SmuzhiyunEnumeration beyond a switch is completed by iterating over each active egress
284*4882a593Smuzhiyunport of that switch. For each active link, a route to a default device ID
285*4882a593Smuzhiyun(0xFF for 8-bit systems and 0xFFFF for 16-bit systems) is temporarily written
286*4882a593Smuzhiyuninto the routing table. The algorithm recurs by calling itself with hopcount + 1
287*4882a593Smuzhiyunand the default device ID in order to access the device on the active port.
288*4882a593Smuzhiyun
289*4882a593SmuzhiyunAfter the host has completed enumeration of the entire network it releases
290*4882a593Smuzhiyundevices by clearing device ID locks (calls rio_clear_locks()). For each endpoint
291*4882a593Smuzhiyunin the system, it sets the Discovered bit in the Port General Control CSR
292*4882a593Smuzhiyunto indicate that enumeration is completed and agents are allowed to execute
293*4882a593Smuzhiyunpassive discovery of the network.
294*4882a593Smuzhiyun
295*4882a593SmuzhiyunThe discovery process is performed by agents and is similar to the enumeration
296*4882a593Smuzhiyunprocess that is described above. However, the discovery process is performed
297*4882a593Smuzhiyunwithout changes to the existing routing because agents only gather information
298*4882a593Smuzhiyunabout RapidIO network structure and are building an internal map of discovered
299*4882a593Smuzhiyundevices. This way each Linux-based component of the RapidIO subsystem has
300*4882a593Smuzhiyuna complete view of the network. The discovery process can be performed
301*4882a593Smuzhiyunsimultaneously by several agents. After initializing its RapidIO master port
302*4882a593Smuzhiyuneach agent waits for enumeration completion by the host for the configured wait
303*4882a593Smuzhiyuntime period. If this wait time period expires before enumeration is completed,
304*4882a593Smuzhiyunan agent skips RapidIO discovery and continues with remaining kernel
305*4882a593Smuzhiyuninitialization.
306*4882a593Smuzhiyun
307*4882a593Smuzhiyun4.5 Adding New Enumeration/Discovery Method
308*4882a593Smuzhiyun-------------------------------------------
309*4882a593Smuzhiyun
310*4882a593SmuzhiyunRapidIO subsystem code organization allows addition of new enumeration/discovery
311*4882a593Smuzhiyunmethods as new configuration options without significant impact to the core
312*4882a593SmuzhiyunRapidIO code.
313*4882a593Smuzhiyun
314*4882a593SmuzhiyunA new enumeration/discovery method has to be attached to one or more mport
315*4882a593Smuzhiyundevices before an enumeration/discovery process can be started. Normally,
316*4882a593Smuzhiyunmethod's module initialization routine calls rio_register_scan() to attach
317*4882a593Smuzhiyunan enumerator to a specified mport device (or devices). The basic enumerator
318*4882a593Smuzhiyunimplementation demonstrates this process.
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun4.6 Using Loadable RapidIO Switch Drivers
321*4882a593Smuzhiyun-----------------------------------------
322*4882a593Smuzhiyun
323*4882a593SmuzhiyunIn the case when RapidIO switch drivers are built as loadable modules a user
324*4882a593Smuzhiyunmust ensure that they are loaded before the enumeration/discovery starts.
325*4882a593SmuzhiyunThis process can be automated by specifying pre- or post- dependencies in the
326*4882a593SmuzhiyunRapidIO-specific modprobe configuration file as shown in the example below.
327*4882a593Smuzhiyun
328*4882a593SmuzhiyunFile /etc/modprobe.d/rapidio.conf::
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun  # Configure RapidIO subsystem modules
331*4882a593Smuzhiyun
332*4882a593Smuzhiyun  # Set enumerator host destination ID (overrides kernel command line option)
333*4882a593Smuzhiyun  options rapidio hdid=-1,2
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun  # Load RapidIO switch drivers immediately after rapidio core module was loaded
336*4882a593Smuzhiyun  softdep rapidio post: idt_gen2 idtcps tsi57x
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun  # OR :
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun  # Load RapidIO switch drivers just before rio-scan enumerator module is loaded
341*4882a593Smuzhiyun  softdep rio-scan pre: idt_gen2 idtcps tsi57x
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun  --------------------------
344*4882a593Smuzhiyun
345*4882a593SmuzhiyunNOTE:
346*4882a593Smuzhiyun  In the example above, one of "softdep" commands must be removed or
347*4882a593Smuzhiyun  commented out to keep required module loading sequence.
348*4882a593Smuzhiyun
349*4882a593Smuzhiyun5. References
350*4882a593Smuzhiyun=============
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun[1] RapidIO Trade Association. RapidIO Interconnect Specifications.
353*4882a593Smuzhiyun    http://www.rapidio.org.
354*4882a593Smuzhiyun
355*4882a593Smuzhiyun[2] Rapidio TA. Technology Comparisons.
356*4882a593Smuzhiyun    http://www.rapidio.org/education/technology_comparisons/
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun[3] RapidIO support for Linux.
359*4882a593Smuzhiyun    https://lwn.net/Articles/139118/
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun[4] Matt Porter. RapidIO for Linux. Ottawa Linux Symposium, 2005
362*4882a593Smuzhiyun    https://www.kernel.org/doc/ols/2005/ols2005v2-pages-43-56.pdf
363