162306a36Sopenharmony_ci============
262306a36Sopenharmony_ciIntroduction
362306a36Sopenharmony_ci============
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciThe RapidIO standard is a packet-based fabric interconnect standard designed for
662306a36Sopenharmony_ciuse in embedded systems. Development of the RapidIO standard is directed by the
762306a36Sopenharmony_ciRapidIO Trade Association (RTA). The current version of the RapidIO specification
862306a36Sopenharmony_ciis publicly available for download from the RTA web-site [1].
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciThis document describes the basics of the Linux RapidIO subsystem and provides
1162306a36Sopenharmony_ciinformation on its major components.
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci1 Overview
1462306a36Sopenharmony_ci==========
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciBecause the RapidIO subsystem follows the Linux device model it is integrated
1762306a36Sopenharmony_ciinto the kernel similarly to other buses by defining RapidIO-specific device and
1862306a36Sopenharmony_cibus types and registering them within the device model.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciThe Linux RapidIO subsystem is architecture independent and therefore defines
2162306a36Sopenharmony_ciarchitecture-specific interfaces that provide support for common RapidIO
2262306a36Sopenharmony_cisubsystem operations.
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci2. Core Components
2562306a36Sopenharmony_ci==================
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciA typical RapidIO network is a combination of endpoints and switches.
2862306a36Sopenharmony_ciEach of these components is represented in the subsystem by an associated data
2962306a36Sopenharmony_cistructure. The core logical components of the RapidIO subsystem are defined
3062306a36Sopenharmony_ciin include/linux/rio.h file.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci2.1 Master Port
3362306a36Sopenharmony_ci---------------
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciA master port (or mport) is a RapidIO interface controller that is local to the
3662306a36Sopenharmony_ciprocessor executing the Linux code. A master port generates and receives RapidIO
3762306a36Sopenharmony_cipackets (transactions). In the RapidIO subsystem each master port is represented
3862306a36Sopenharmony_ciby a rio_mport data structure. This structure contains master port specific
3962306a36Sopenharmony_ciresources such as mailboxes and doorbells. The rio_mport also includes a unique
4062306a36Sopenharmony_cihost device ID that is valid when a master port is configured as an enumerating
4162306a36Sopenharmony_cihost.
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciRapidIO master ports are serviced by subsystem specific mport device drivers
4462306a36Sopenharmony_cithat provide functionality defined for this subsystem. To provide a hardware
4562306a36Sopenharmony_ciindependent interface for RapidIO subsystem operations, rio_mport structure
4662306a36Sopenharmony_ciincludes rio_ops data structure which contains pointers to hardware specific
4762306a36Sopenharmony_ciimplementations of RapidIO functions.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci2.2 Device
5062306a36Sopenharmony_ci----------
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciA RapidIO device is any endpoint (other than mport) or switch in the network.
5362306a36Sopenharmony_ciAll devices are presented in the RapidIO subsystem by corresponding rio_dev data
5462306a36Sopenharmony_cistructure. Devices form one global device list and per-network device lists
5562306a36Sopenharmony_ci(depending on number of available mports and networks).
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci2.3 Switch
5862306a36Sopenharmony_ci----------
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciA RapidIO switch is a special class of device that routes packets between its
6162306a36Sopenharmony_ciports towards their final destination. The packet destination port within a
6262306a36Sopenharmony_ciswitch is defined by an internal routing table. A switch is presented in the
6362306a36Sopenharmony_ciRapidIO subsystem by rio_dev data structure expanded by additional rio_switch
6462306a36Sopenharmony_cidata structure, which contains switch specific information such as copy of the
6562306a36Sopenharmony_cirouting table and pointers to switch specific functions.
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciThe RapidIO subsystem defines the format and initialization method for subsystem
6862306a36Sopenharmony_cispecific switch drivers that are designed to provide hardware-specific
6962306a36Sopenharmony_ciimplementation of common switch management routines.
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci2.4 Network
7262306a36Sopenharmony_ci-----------
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciA RapidIO network is a combination of interconnected endpoint and switch devices.
7562306a36Sopenharmony_ciEach RapidIO network known to the system is represented by corresponding rio_net
7662306a36Sopenharmony_cidata structure. This structure includes lists of all devices and local master
7762306a36Sopenharmony_ciports that form the same network. It also contains a pointer to the default
7862306a36Sopenharmony_cimaster port that is used to communicate with devices within the network.
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci2.5 Device Drivers
8162306a36Sopenharmony_ci------------------
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciRapidIO device-specific drivers follow Linux Kernel Driver Model and are
8462306a36Sopenharmony_ciintended to support specific RapidIO devices attached to the RapidIO network.
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci2.6 Subsystem Interfaces
8762306a36Sopenharmony_ci------------------------
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciRapidIO interconnect specification defines features that may be used to provide
9062306a36Sopenharmony_cione or more common service layers for all participating RapidIO devices. These
9162306a36Sopenharmony_cicommon services may act separately from device-specific drivers or be used by
9262306a36Sopenharmony_cidevice-specific drivers. Example of such service provider is the RIONET driver
9362306a36Sopenharmony_ciwhich implements Ethernet-over-RapidIO interface. Because only one driver can be
9462306a36Sopenharmony_ciregistered for a device, all common RapidIO services have to be registered as
9562306a36Sopenharmony_cisubsystem interfaces. This allows to have multiple common services attached to
9662306a36Sopenharmony_cithe same device without blocking attachment of a device-specific driver.
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci3. Subsystem Initialization
9962306a36Sopenharmony_ci===========================
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ciIn order to initialize the RapidIO subsystem, a platform must initialize and
10262306a36Sopenharmony_ciregister at least one master port within the RapidIO network. To register mport
10362306a36Sopenharmony_ciwithin the subsystem controller driver's initialization code calls function
10462306a36Sopenharmony_cirio_register_mport() for each available master port.
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciAfter all active master ports are registered with a RapidIO subsystem,
10762306a36Sopenharmony_cian enumeration and/or discovery routine may be called automatically or
10862306a36Sopenharmony_ciby user-space command.
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciRapidIO subsystem can be configured to be built as a statically linked or
11162306a36Sopenharmony_cimodular component of the kernel (see details below).
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci4. Enumeration and Discovery
11462306a36Sopenharmony_ci============================
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci4.1 Overview
11762306a36Sopenharmony_ci------------
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciRapidIO subsystem configuration options allow users to build enumeration and
12062306a36Sopenharmony_cidiscovery methods as statically linked components or loadable modules.
12162306a36Sopenharmony_ciAn enumeration/discovery method implementation and available input parameters
12262306a36Sopenharmony_cidefine how any given method can be attached to available RapidIO mports:
12362306a36Sopenharmony_cisimply to all available mports OR individually to the specified mport device.
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ciDepending on selected enumeration/discovery build configuration, there are
12662306a36Sopenharmony_ciseveral methods to initiate an enumeration and/or discovery process:
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci  (a) Statically linked enumeration and discovery process can be started
12962306a36Sopenharmony_ci  automatically during kernel initialization time using corresponding module
13062306a36Sopenharmony_ci  parameters. This was the original method used since introduction of RapidIO
13162306a36Sopenharmony_ci  subsystem. Now this method relies on enumerator module parameter which is
13262306a36Sopenharmony_ci  'rio-scan.scan' for existing basic enumeration/discovery method.
13362306a36Sopenharmony_ci  When automatic start of enumeration/discovery is used a user has to ensure
13462306a36Sopenharmony_ci  that all discovering endpoints are started before the enumerating endpoint
13562306a36Sopenharmony_ci  and are waiting for enumeration to be completed.
13662306a36Sopenharmony_ci  Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering
13762306a36Sopenharmony_ci  endpoint waits for enumeration to be completed. If the specified timeout
13862306a36Sopenharmony_ci  expires the discovery process is terminated without obtaining RapidIO network
13962306a36Sopenharmony_ci  information. NOTE: a timed out discovery process may be restarted later using
14062306a36Sopenharmony_ci  a user-space command as it is described below (if the given endpoint was
14162306a36Sopenharmony_ci  enumerated successfully).
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci  (b) Statically linked enumeration and discovery process can be started by
14462306a36Sopenharmony_ci  a command from user space. This initiation method provides more flexibility
14562306a36Sopenharmony_ci  for a system startup compared to the option (a) above. After all participating
14662306a36Sopenharmony_ci  endpoints have been successfully booted, an enumeration process shall be
14762306a36Sopenharmony_ci  started first by issuing a user-space command, after an enumeration is
14862306a36Sopenharmony_ci  completed a discovery process can be started on all remaining endpoints.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  (c) Modular enumeration and discovery process can be started by a command from
15162306a36Sopenharmony_ci  user space. After an enumeration/discovery module is loaded, a network scan
15262306a36Sopenharmony_ci  process can be started by issuing a user-space command.
15362306a36Sopenharmony_ci  Similar to the option (b) above, an enumerator has to be started first.
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci  (d) Modular enumeration and discovery process can be started by a module
15662306a36Sopenharmony_ci  initialization routine. In this case an enumerating module shall be loaded
15762306a36Sopenharmony_ci  first.
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ciWhen a network scan process is started it calls an enumeration or discovery
16062306a36Sopenharmony_ciroutine depending on the configured role of a master port: host or agent.
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ciEnumeration is performed by a master port if it is configured as a host port by
16362306a36Sopenharmony_ciassigning a host destination ID greater than or equal to zero. The host
16462306a36Sopenharmony_cidestination ID can be assigned to a master port using various methods depending
16562306a36Sopenharmony_cion RapidIO subsystem build configuration:
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci  (a) For a statically linked RapidIO subsystem core use command line parameter
16862306a36Sopenharmony_ci  "rapidio.hdid=" with a list of destination ID assignments in order of mport
16962306a36Sopenharmony_ci  device registration. For example, in a system with two RapidIO controllers
17062306a36Sopenharmony_ci  the command line parameter "rapidio.hdid=-1,7" will result in assignment of
17162306a36Sopenharmony_ci  the host destination ID=7 to the second RapidIO controller, while the first
17262306a36Sopenharmony_ci  one will be assigned destination ID=-1.
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci  (b) If the RapidIO subsystem core is built as a loadable module, in addition
17562306a36Sopenharmony_ci  to the method shown above, the host destination ID(s) can be specified using
17662306a36Sopenharmony_ci  traditional methods of passing module parameter "hdid=" during its loading:
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci  - from command line: "modprobe rapidio hdid=-1,7", or
17962306a36Sopenharmony_ci  - from modprobe configuration file using configuration command "options",
18062306a36Sopenharmony_ci    like in this example: "options rapidio hdid=-1,7". An example of modprobe
18162306a36Sopenharmony_ci    configuration file is provided in the section below.
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ciNOTES:
18462306a36Sopenharmony_ci  (i) if "hdid=" parameter is omitted all available mport will be assigned
18562306a36Sopenharmony_ci  destination ID = -1;
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci  (ii) the "hdid=" parameter in systems with multiple mports can have
18862306a36Sopenharmony_ci  destination ID assignments omitted from the end of list (default = -1).
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ciIf the host device ID for a specific master port is set to -1, the discovery
19162306a36Sopenharmony_ciprocess will be performed for it.
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ciThe enumeration and discovery routines use RapidIO maintenance transactions
19462306a36Sopenharmony_cito access the configuration space of devices.
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ciNOTE: If RapidIO switch-specific device drivers are built as loadable modules
19762306a36Sopenharmony_cithey must be loaded before enumeration/discovery process starts.
19862306a36Sopenharmony_ciThis requirement is cased by the fact that enumeration/discovery methods invoke
19962306a36Sopenharmony_civendor-specific callbacks on early stages.
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci4.2 Automatic Start of Enumeration and Discovery
20262306a36Sopenharmony_ci------------------------------------------------
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ciAutomatic enumeration/discovery start method is applicable only to built-in
20562306a36Sopenharmony_cienumeration/discovery RapidIO configuration selection. To enable automatic
20662306a36Sopenharmony_cienumeration/discovery start by existing basic enumerator method set use boot
20762306a36Sopenharmony_cicommand line parameter "rio-scan.scan=1".
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ciThis configuration requires synchronized start of all RapidIO endpoints that
21062306a36Sopenharmony_ciform a network which will be enumerated/discovered. Discovering endpoints have
21162306a36Sopenharmony_cito be started before an enumeration starts to ensure that all RapidIO
21262306a36Sopenharmony_cicontrollers have been initialized and are ready to be discovered. Configuration
21362306a36Sopenharmony_ciparameter CONFIG_RAPIDIO_DISC_TIMEOUT defines time (in seconds) which
21462306a36Sopenharmony_cia discovering endpoint will wait for enumeration to be completed.
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciWhen automatic enumeration/discovery start is selected, basic method's
21762306a36Sopenharmony_ciinitialization routine calls rio_init_mports() to perform enumeration or
21862306a36Sopenharmony_cidiscovery for all known mport devices.
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ciDepending on RapidIO network size and configuration this automatic
22162306a36Sopenharmony_cienumeration/discovery start method may be difficult to use due to the
22262306a36Sopenharmony_cirequirement for synchronized start of all endpoints.
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci4.3 User-space Start of Enumeration and Discovery
22562306a36Sopenharmony_ci-------------------------------------------------
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ciUser-space start of enumeration and discovery can be used with built-in and
22862306a36Sopenharmony_cimodular build configurations. For user-space controlled start RapidIO subsystem
22962306a36Sopenharmony_cicreates the sysfs write-only attribute file '/sys/bus/rapidio/scan'. To initiate
23062306a36Sopenharmony_cian enumeration or discovery process on specific mport device, a user needs to
23162306a36Sopenharmony_ciwrite mport_ID (not RapidIO destination ID) into that file. The mport_ID is a
23262306a36Sopenharmony_cisequential number (0 ... RIO_MAX_MPORTS) assigned during mport device
23362306a36Sopenharmony_ciregistration. For example for machine with single RapidIO controller, mport_ID
23462306a36Sopenharmony_cifor that controller always will be 0.
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ciTo initiate RapidIO enumeration/discovery on all available mports a user may
23762306a36Sopenharmony_ciwrite '-1' (or RIO_MPORT_ANY) into the scan attribute file.
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci4.4 Basic Enumeration Method
24062306a36Sopenharmony_ci----------------------------
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ciThis is an original enumeration/discovery method which is available since
24362306a36Sopenharmony_cifirst release of RapidIO subsystem code. The enumeration process is
24462306a36Sopenharmony_ciimplemented according to the enumeration algorithm outlined in the RapidIO
24562306a36Sopenharmony_ciInterconnect Specification: Annex I [1].
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ciThis method can be configured as statically linked or loadable module.
24862306a36Sopenharmony_ciThe method's single parameter "scan" allows to trigger the enumeration/discovery
24962306a36Sopenharmony_ciprocess from module initialization routine.
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ciThis enumeration/discovery method can be started only once and does not support
25262306a36Sopenharmony_ciunloading if it is built as a module.
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciThe enumeration process traverses the network using a recursive depth-first
25562306a36Sopenharmony_cialgorithm. When a new device is found, the enumerator takes ownership of that
25662306a36Sopenharmony_cidevice by writing into the Host Device ID Lock CSR. It does this to ensure that
25762306a36Sopenharmony_cithe enumerator has exclusive right to enumerate the device. If device ownership
25862306a36Sopenharmony_ciis successfully acquired, the enumerator allocates a new rio_dev structure and
25962306a36Sopenharmony_ciinitializes it according to device capabilities.
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ciIf the device is an endpoint, a unique device ID is assigned to it and its value
26262306a36Sopenharmony_ciis written into the device's Base Device ID CSR.
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ciIf the device is a switch, the enumerator allocates an additional rio_switch
26562306a36Sopenharmony_cistructure to store switch specific information. Then the switch's vendor ID and
26662306a36Sopenharmony_cidevice ID are queried against a table of known RapidIO switches. Each switch
26762306a36Sopenharmony_citable entry contains a pointer to a switch-specific initialization routine that
26862306a36Sopenharmony_ciinitializes pointers to the rest of switch specific operations, and performs
26962306a36Sopenharmony_cihardware initialization if necessary. A RapidIO switch does not have a unique
27062306a36Sopenharmony_cidevice ID; it relies on hopcount and routing for device ID of an attached
27162306a36Sopenharmony_ciendpoint if access to its configuration registers is required. If a switch (or
27262306a36Sopenharmony_cichain of switches) does not have any endpoint (except enumerator) attached to
27362306a36Sopenharmony_ciit, a fake device ID will be assigned to configure a route to that switch.
27462306a36Sopenharmony_ciIn the case of a chain of switches without endpoint, one fake device ID is used
27562306a36Sopenharmony_cito configure a route through the entire chain and switches are differentiated by
27662306a36Sopenharmony_citheir hopcount value.
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ciFor both endpoints and switches the enumerator writes a unique component tag
27962306a36Sopenharmony_ciinto device's Component Tag CSR. That unique value is used by the error
28062306a36Sopenharmony_cimanagement notification mechanism to identify a device that is reporting an
28162306a36Sopenharmony_cierror management event.
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ciEnumeration beyond a switch is completed by iterating over each active egress
28462306a36Sopenharmony_ciport of that switch. For each active link, a route to a default device ID
28562306a36Sopenharmony_ci(0xFF for 8-bit systems and 0xFFFF for 16-bit systems) is temporarily written
28662306a36Sopenharmony_ciinto the routing table. The algorithm recurs by calling itself with hopcount + 1
28762306a36Sopenharmony_ciand the default device ID in order to access the device on the active port.
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ciAfter the host has completed enumeration of the entire network it releases
29062306a36Sopenharmony_cidevices by clearing device ID locks (calls rio_clear_locks()). For each endpoint
29162306a36Sopenharmony_ciin the system, it sets the Discovered bit in the Port General Control CSR
29262306a36Sopenharmony_cito indicate that enumeration is completed and agents are allowed to execute
29362306a36Sopenharmony_cipassive discovery of the network.
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ciThe discovery process is performed by agents and is similar to the enumeration
29662306a36Sopenharmony_ciprocess that is described above. However, the discovery process is performed
29762306a36Sopenharmony_ciwithout changes to the existing routing because agents only gather information
29862306a36Sopenharmony_ciabout RapidIO network structure and are building an internal map of discovered
29962306a36Sopenharmony_cidevices. This way each Linux-based component of the RapidIO subsystem has
30062306a36Sopenharmony_cia complete view of the network. The discovery process can be performed
30162306a36Sopenharmony_cisimultaneously by several agents. After initializing its RapidIO master port
30262306a36Sopenharmony_cieach agent waits for enumeration completion by the host for the configured wait
30362306a36Sopenharmony_citime period. If this wait time period expires before enumeration is completed,
30462306a36Sopenharmony_cian agent skips RapidIO discovery and continues with remaining kernel
30562306a36Sopenharmony_ciinitialization.
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci4.5 Adding New Enumeration/Discovery Method
30862306a36Sopenharmony_ci-------------------------------------------
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciRapidIO subsystem code organization allows addition of new enumeration/discovery
31162306a36Sopenharmony_cimethods as new configuration options without significant impact to the core
31262306a36Sopenharmony_ciRapidIO code.
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ciA new enumeration/discovery method has to be attached to one or more mport
31562306a36Sopenharmony_cidevices before an enumeration/discovery process can be started. Normally,
31662306a36Sopenharmony_cimethod's module initialization routine calls rio_register_scan() to attach
31762306a36Sopenharmony_cian enumerator to a specified mport device (or devices). The basic enumerator
31862306a36Sopenharmony_ciimplementation demonstrates this process.
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci4.6 Using Loadable RapidIO Switch Drivers
32162306a36Sopenharmony_ci-----------------------------------------
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ciIn the case when RapidIO switch drivers are built as loadable modules a user
32462306a36Sopenharmony_cimust ensure that they are loaded before the enumeration/discovery starts.
32562306a36Sopenharmony_ciThis process can be automated by specifying pre- or post- dependencies in the
32662306a36Sopenharmony_ciRapidIO-specific modprobe configuration file as shown in the example below.
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ciFile /etc/modprobe.d/rapidio.conf::
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci  # Configure RapidIO subsystem modules
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci  # Set enumerator host destination ID (overrides kernel command line option)
33362306a36Sopenharmony_ci  options rapidio hdid=-1,2
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ci  # Load RapidIO switch drivers immediately after rapidio core module was loaded
33662306a36Sopenharmony_ci  softdep rapidio post: idt_gen2 idtcps tsi57x
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci  # OR :
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci  # Load RapidIO switch drivers just before rio-scan enumerator module is loaded
34162306a36Sopenharmony_ci  softdep rio-scan pre: idt_gen2 idtcps tsi57x
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci  --------------------------
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ciNOTE:
34662306a36Sopenharmony_ci  In the example above, one of "softdep" commands must be removed or
34762306a36Sopenharmony_ci  commented out to keep required module loading sequence.
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci5. References
35062306a36Sopenharmony_ci=============
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ci[1] RapidIO Trade Association. RapidIO Interconnect Specifications.
35362306a36Sopenharmony_ci    http://www.rapidio.org.
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci[2] Rapidio TA. Technology Comparisons.
35662306a36Sopenharmony_ci    http://www.rapidio.org/education/technology_comparisons/
35762306a36Sopenharmony_ci
35862306a36Sopenharmony_ci[3] RapidIO support for Linux.
35962306a36Sopenharmony_ci    https://lwn.net/Articles/139118/
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci[4] Matt Porter. RapidIO for Linux. Ottawa Linux Symposium, 2005
36262306a36Sopenharmony_ci    https://www.kernel.org/doc/ols/2005/ols2005v2-pages-43-56.pdf
363