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