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