2 * RapidIO enumeration and discovery support
4 * Copyright 2005 MontaVista Software, Inc.
5 * Matt Porter <mporter@kernel.crashing.org>
7 * Copyright 2009 Integrated Device Technology, Inc.
8 * Alex Bounine <alexandre.bounine@idt.com>
9 * - Added Port-Write/Error Management initialization and handling
11 * Copyright 2009 Sysgo AG
12 * Thomas Moll <thomas.moll@sysgo.com>
13 * - Added Input- Output- enable functionality, to allow full communication
15 * This program is free software; you can redistribute it and/or modify it
16 * under the terms of the GNU General Public License as published by the
17 * Free Software Foundation; either version 2 of the License, or (at your
18 * option) any later version.
21 #include <linux/types.h>
22 #include <linux/kernel.h>
24 #include <linux/delay.h>
25 #include <linux/dma-mapping.h>
26 #include <linux/init.h>
27 #include <linux/rio.h>
28 #include <linux/rio_drv.h>
29 #include <linux/rio_ids.h>
30 #include <linux/rio_regs.h>
31 #include <linux/module.h>
32 #include <linux/spinlock.h>
33 #include <linux/timer.h>
34 #include <linux/sched.h>
35 #include <linux/jiffies.h>
36 #include <linux/slab.h>
40 static void rio_init_em(struct rio_dev
*rdev
);
42 static int next_destid
= 0;
43 static int next_comptag
= 1;
45 static int rio_mport_phys_table
[] = {
47 RIO_EFB_PAR_EP_REC_ID
,
49 RIO_EFB_SER_EP_REC_ID
,
55 * rio_destid_alloc - Allocate next available destID for given network
58 * Returns next available device destination ID for the specified RIO network.
59 * Marks allocated ID as one in use.
60 * Returns RIO_INVALID_DESTID if new destID is not available.
62 static u16
rio_destid_alloc(struct rio_net
*net
)
65 struct rio_id_table
*idtab
= &net
->destid_table
;
67 spin_lock(&idtab
->lock
);
68 destid
= find_first_zero_bit(idtab
->table
, idtab
->max
);
70 if (destid
< idtab
->max
) {
71 set_bit(destid
, idtab
->table
);
72 destid
+= idtab
->start
;
74 destid
= RIO_INVALID_DESTID
;
76 spin_unlock(&idtab
->lock
);
81 * rio_destid_reserve - Reserve the specivied destID
83 * @destid: destID to reserve
85 * Tries to reserve the specified destID.
86 * Returns 0 if successfull.
88 static int rio_destid_reserve(struct rio_net
*net
, u16 destid
)
91 struct rio_id_table
*idtab
= &net
->destid_table
;
93 destid
-= idtab
->start
;
94 spin_lock(&idtab
->lock
);
95 oldbit
= test_and_set_bit(destid
, idtab
->table
);
96 spin_unlock(&idtab
->lock
);
101 * rio_destid_free - free a previously allocated destID
103 * @destid: destID to free
105 * Makes the specified destID available for use.
107 static void rio_destid_free(struct rio_net
*net
, u16 destid
)
109 struct rio_id_table
*idtab
= &net
->destid_table
;
111 destid
-= idtab
->start
;
112 spin_lock(&idtab
->lock
);
113 clear_bit(destid
, idtab
->table
);
114 spin_unlock(&idtab
->lock
);
118 * rio_destid_first - return first destID in use
121 static u16
rio_destid_first(struct rio_net
*net
)
124 struct rio_id_table
*idtab
= &net
->destid_table
;
126 spin_lock(&idtab
->lock
);
127 destid
= find_first_bit(idtab
->table
, idtab
->max
);
128 if (destid
>= idtab
->max
)
129 destid
= RIO_INVALID_DESTID
;
131 destid
+= idtab
->start
;
132 spin_unlock(&idtab
->lock
);
137 * rio_destid_next - return next destID in use
139 * @from: destination ID from which search shall continue
141 static u16
rio_destid_next(struct rio_net
*net
, u16 from
)
144 struct rio_id_table
*idtab
= &net
->destid_table
;
146 spin_lock(&idtab
->lock
);
147 destid
= find_next_bit(idtab
->table
, idtab
->max
, from
);
148 if (destid
>= idtab
->max
)
149 destid
= RIO_INVALID_DESTID
;
151 destid
+= idtab
->start
;
152 spin_unlock(&idtab
->lock
);
157 * rio_get_device_id - Get the base/extended device id for a device
158 * @port: RIO master port
159 * @destid: Destination ID of device
160 * @hopcount: Hopcount to device
162 * Reads the base/extended device id from a device. Returns the
163 * 8/16-bit device ID.
165 static u16
rio_get_device_id(struct rio_mport
*port
, u16 destid
, u8 hopcount
)
169 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_DID_CSR
, &result
);
171 return RIO_GET_DID(port
->sys_size
, result
);
175 * rio_set_device_id - Set the base/extended device id for a device
176 * @port: RIO master port
177 * @destid: Destination ID of device
178 * @hopcount: Hopcount to device
179 * @did: Device ID value to be written
181 * Writes the base/extended device id from a device.
183 static void rio_set_device_id(struct rio_mport
*port
, u16 destid
, u8 hopcount
, u16 did
)
185 rio_mport_write_config_32(port
, destid
, hopcount
, RIO_DID_CSR
,
186 RIO_SET_DID(port
->sys_size
, did
));
190 * rio_local_set_device_id - Set the base/extended device id for a port
191 * @port: RIO master port
192 * @did: Device ID value to be written
194 * Writes the base/extended device id from a device.
196 static void rio_local_set_device_id(struct rio_mport
*port
, u16 did
)
198 rio_local_write_config_32(port
, RIO_DID_CSR
, RIO_SET_DID(port
->sys_size
,
203 * rio_clear_locks- Release all host locks and signal enumeration complete
204 * @net: RIO network to run on
206 * Marks the component tag CSR on each device with the enumeration
207 * complete flag. When complete, it then release the host locks on
208 * each device. Returns 0 on success or %-EINVAL on failure.
210 static int rio_clear_locks(struct rio_net
*net
)
212 struct rio_mport
*port
= net
->hport
;
213 struct rio_dev
*rdev
;
217 /* Release host device id locks */
218 rio_local_write_config_32(port
, RIO_HOST_DID_LOCK_CSR
,
219 port
->host_deviceid
);
220 rio_local_read_config_32(port
, RIO_HOST_DID_LOCK_CSR
, &result
);
221 if ((result
& 0xffff) != 0xffff) {
223 "RIO: badness when releasing host lock on master port, result %8.8x\n",
227 list_for_each_entry(rdev
, &net
->devices
, net_list
) {
228 rio_write_config_32(rdev
, RIO_HOST_DID_LOCK_CSR
,
229 port
->host_deviceid
);
230 rio_read_config_32(rdev
, RIO_HOST_DID_LOCK_CSR
, &result
);
231 if ((result
& 0xffff) != 0xffff) {
233 "RIO: badness when releasing host lock on vid %4.4x did %4.4x\n",
234 rdev
->vid
, rdev
->did
);
238 /* Mark device as discovered and enable master */
239 rio_read_config_32(rdev
,
240 rdev
->phys_efptr
+ RIO_PORT_GEN_CTL_CSR
,
242 result
|= RIO_PORT_GEN_DISCOVERED
| RIO_PORT_GEN_MASTER
;
243 rio_write_config_32(rdev
,
244 rdev
->phys_efptr
+ RIO_PORT_GEN_CTL_CSR
,
252 * rio_enum_host- Set host lock and initialize host destination ID
253 * @port: Master port to issue transaction
255 * Sets the local host master port lock and destination ID register
256 * with the host device ID value. The host device ID value is provided
257 * by the platform. Returns %0 on success or %-1 on failure.
259 static int rio_enum_host(struct rio_mport
*port
)
263 /* Set master port host device id lock */
264 rio_local_write_config_32(port
, RIO_HOST_DID_LOCK_CSR
,
265 port
->host_deviceid
);
267 rio_local_read_config_32(port
, RIO_HOST_DID_LOCK_CSR
, &result
);
268 if ((result
& 0xffff) != port
->host_deviceid
)
271 /* Set master port destid and init destid ctr */
272 rio_local_set_device_id(port
, port
->host_deviceid
);
277 * rio_device_has_destid- Test if a device contains a destination ID register
278 * @port: Master port to issue transaction
279 * @src_ops: RIO device source operations
280 * @dst_ops: RIO device destination operations
282 * Checks the provided @src_ops and @dst_ops for the necessary transaction
283 * capabilities that indicate whether or not a device will implement a
284 * destination ID register. Returns 1 if true or 0 if false.
286 static int rio_device_has_destid(struct rio_mport
*port
, int src_ops
,
289 u32 mask
= RIO_OPS_READ
| RIO_OPS_WRITE
| RIO_OPS_ATOMIC_TST_SWP
| RIO_OPS_ATOMIC_INC
| RIO_OPS_ATOMIC_DEC
| RIO_OPS_ATOMIC_SET
| RIO_OPS_ATOMIC_CLR
;
291 return !!((src_ops
| dst_ops
) & mask
);
295 * rio_release_dev- Frees a RIO device struct
296 * @dev: LDM device associated with a RIO device struct
298 * Gets the RIO device struct associated a RIO device struct.
299 * The RIO device struct is freed.
301 static void rio_release_dev(struct device
*dev
)
303 struct rio_dev
*rdev
;
305 rdev
= to_rio_dev(dev
);
310 * rio_is_switch- Tests if a RIO device has switch capabilities
313 * Gets the RIO device Processing Element Features register
314 * contents and tests for switch capabilities. Returns 1 if
315 * the device is a switch or 0 if it is not a switch.
316 * The RIO device struct is freed.
318 static int rio_is_switch(struct rio_dev
*rdev
)
320 if (rdev
->pef
& RIO_PEF_SWITCH
)
326 * rio_setup_device- Allocates and sets up a RIO device
328 * @port: Master port to send transactions
329 * @destid: Current destination ID
330 * @hopcount: Current hopcount
331 * @do_enum: Enumeration/Discovery mode flag
333 * Allocates a RIO device and configures fields based on configuration
334 * space contents. If device has a destination ID register, a destination
335 * ID is either assigned in enumeration mode or read from configuration
336 * space in discovery mode. If the device has switch capabilities, then
337 * a switch is allocated and configured appropriately. Returns a pointer
338 * to a RIO device on success or NULL on failure.
341 static struct rio_dev
*rio_setup_device(struct rio_net
*net
,
342 struct rio_mport
*port
, u16 destid
,
343 u8 hopcount
, int do_enum
)
346 struct rio_dev
*rdev
;
347 struct rio_switch
*rswitch
= NULL
;
352 size
= sizeof(struct rio_dev
);
353 if (rio_mport_read_config_32(port
, destid
, hopcount
,
354 RIO_PEF_CAR
, &result
))
357 if (result
& (RIO_PEF_SWITCH
| RIO_PEF_MULTIPORT
)) {
358 rio_mport_read_config_32(port
, destid
, hopcount
,
359 RIO_SWP_INFO_CAR
, &swpinfo
);
360 if (result
& RIO_PEF_SWITCH
) {
361 size
+= (RIO_GET_TOTAL_PORTS(swpinfo
) *
362 sizeof(rswitch
->nextdev
[0])) + sizeof(*rswitch
);
366 rdev
= kzalloc(size
, GFP_KERNEL
);
372 rdev
->swpinfo
= swpinfo
;
373 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_DEV_ID_CAR
,
375 rdev
->did
= result
>> 16;
376 rdev
->vid
= result
& 0xffff;
377 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_DEV_INFO_CAR
,
379 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_ASM_ID_CAR
,
381 rdev
->asm_did
= result
>> 16;
382 rdev
->asm_vid
= result
& 0xffff;
383 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_ASM_INFO_CAR
,
385 rdev
->asm_rev
= result
>> 16;
386 if (rdev
->pef
& RIO_PEF_EXT_FEATURES
) {
387 rdev
->efptr
= result
& 0xffff;
388 rdev
->phys_efptr
= rio_mport_get_physefb(port
, 0, destid
,
391 rdev
->em_efptr
= rio_mport_get_feature(port
, 0, destid
,
392 hopcount
, RIO_EFB_ERR_MGMNT
);
395 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_SRC_OPS_CAR
,
397 rio_mport_read_config_32(port
, destid
, hopcount
, RIO_DST_OPS_CAR
,
401 /* Assign component tag to device */
402 if (next_comptag
>= 0x10000) {
403 pr_err("RIO: Component Tag Counter Overflow\n");
406 rio_mport_write_config_32(port
, destid
, hopcount
,
407 RIO_COMPONENT_TAG_CSR
, next_comptag
);
408 rdev
->comp_tag
= next_comptag
++;
409 rdev
->do_enum
= true;
411 rio_mport_read_config_32(port
, destid
, hopcount
,
412 RIO_COMPONENT_TAG_CSR
,
416 if (rio_device_has_destid(port
, rdev
->src_ops
, rdev
->dst_ops
)) {
418 rio_set_device_id(port
, destid
, hopcount
, next_destid
);
419 rdev
->destid
= next_destid
;
420 next_destid
= rio_destid_alloc(net
);
422 rdev
->destid
= rio_get_device_id(port
, destid
, hopcount
);
424 rdev
->hopcount
= 0xff;
426 /* Switch device has an associated destID which
427 * will be adjusted later
429 rdev
->destid
= destid
;
430 rdev
->hopcount
= hopcount
;
433 /* If a PE has both switch and other functions, show it as a switch */
434 if (rio_is_switch(rdev
)) {
435 rswitch
= rdev
->rswitch
;
436 rswitch
->port_ok
= 0;
437 spin_lock_init(&rswitch
->lock
);
438 rswitch
->route_table
= kzalloc(sizeof(u8
)*
439 RIO_MAX_ROUTE_ENTRIES(port
->sys_size
),
441 if (!rswitch
->route_table
)
443 /* Initialize switch route table */
444 for (rdid
= 0; rdid
< RIO_MAX_ROUTE_ENTRIES(port
->sys_size
);
446 rswitch
->route_table
[rdid
] = RIO_INVALID_ROUTE
;
447 dev_set_name(&rdev
->dev
, "%02x:s:%04x", rdev
->net
->id
,
448 rdev
->comp_tag
& RIO_CTAG_UDEVID
);
451 rio_route_clr_table(rdev
, RIO_GLOBAL_TABLE
, 0);
453 list_add_tail(&rswitch
->node
, &net
->switches
);
457 /*Enable Input Output Port (transmitter reviever)*/
458 rio_enable_rx_tx_port(port
, 0, destid
, hopcount
, 0);
460 dev_set_name(&rdev
->dev
, "%02x:e:%04x", rdev
->net
->id
,
461 rdev
->comp_tag
& RIO_CTAG_UDEVID
);
464 rio_attach_device(rdev
);
466 device_initialize(&rdev
->dev
);
467 rdev
->dev
.release
= rio_release_dev
;
470 rdev
->dma_mask
= DMA_BIT_MASK(32);
471 rdev
->dev
.dma_mask
= &rdev
->dma_mask
;
472 rdev
->dev
.coherent_dma_mask
= DMA_BIT_MASK(32);
474 if (rdev
->dst_ops
& RIO_DST_OPS_DOORBELL
)
475 rio_init_dbell_res(&rdev
->riores
[RIO_DOORBELL_RESOURCE
],
478 ret
= rio_add_device(rdev
);
486 kfree(rswitch
->route_table
);
493 * rio_sport_is_active- Tests if a switch port has an active connection.
494 * @port: Master port to send transaction
495 * @destid: Associated destination ID for switch
496 * @hopcount: Hopcount to reach switch
497 * @sport: Switch port number
499 * Reads the port error status CSR for a particular switch port to
500 * determine if the port has an active link. Returns
501 * %RIO_PORT_N_ERR_STS_PORT_OK if the port is active or %0 if it is
505 rio_sport_is_active(struct rio_mport
*port
, u16 destid
, u8 hopcount
, int sport
)
510 ext_ftr_ptr
= rio_mport_get_efb(port
, 0, destid
, hopcount
, 0);
512 while (ext_ftr_ptr
) {
513 rio_mport_read_config_32(port
, destid
, hopcount
,
514 ext_ftr_ptr
, &result
);
515 result
= RIO_GET_BLOCK_ID(result
);
516 if ((result
== RIO_EFB_SER_EP_FREE_ID
) ||
517 (result
== RIO_EFB_SER_EP_FREE_ID_V13P
) ||
518 (result
== RIO_EFB_SER_EP_FREC_ID
))
521 ext_ftr_ptr
= rio_mport_get_efb(port
, 0, destid
, hopcount
,
526 rio_mport_read_config_32(port
, destid
, hopcount
,
528 RIO_PORT_N_ERR_STS_CSR(sport
),
531 return result
& RIO_PORT_N_ERR_STS_PORT_OK
;
535 * rio_get_host_deviceid_lock- Reads the Host Device ID Lock CSR on a device
536 * @port: Master port to send transaction
537 * @hopcount: Number of hops to the device
539 * Used during enumeration to read the Host Device ID Lock CSR on a
540 * RIO device. Returns the value of the lock register.
542 static u16
rio_get_host_deviceid_lock(struct rio_mport
*port
, u8 hopcount
)
546 rio_mport_read_config_32(port
, RIO_ANY_DESTID(port
->sys_size
), hopcount
,
547 RIO_HOST_DID_LOCK_CSR
, &result
);
549 return (u16
) (result
& 0xffff);
553 * rio_enum_peer- Recursively enumerate a RIO network through a master port
554 * @net: RIO network being enumerated
555 * @port: Master port to send transactions
556 * @hopcount: Number of hops into the network
557 * @prev: Previous RIO device connected to the enumerated one
558 * @prev_port: Port on previous RIO device
560 * Recursively enumerates a RIO network. Transactions are sent via the
561 * master port passed in @port.
563 static int rio_enum_peer(struct rio_net
*net
, struct rio_mport
*port
,
564 u8 hopcount
, struct rio_dev
*prev
, int prev_port
)
566 struct rio_dev
*rdev
;
570 if (rio_mport_chk_dev_access(port
,
571 RIO_ANY_DESTID(port
->sys_size
), hopcount
)) {
572 pr_debug("RIO: device access check failed\n");
576 if (rio_get_host_deviceid_lock(port
, hopcount
) == port
->host_deviceid
) {
577 pr_debug("RIO: PE already discovered by this host\n");
579 * Already discovered by this host. Add it as another
580 * link to the existing device.
582 rio_mport_read_config_32(port
, RIO_ANY_DESTID(port
->sys_size
),
583 hopcount
, RIO_COMPONENT_TAG_CSR
, ®val
);
586 rdev
= rio_get_comptag((regval
& 0xffff), NULL
);
588 if (rdev
&& prev
&& rio_is_switch(prev
)) {
589 pr_debug("RIO: redundant path to %s\n",
591 prev
->rswitch
->nextdev
[prev_port
] = rdev
;
598 /* Attempt to acquire device lock */
599 rio_mport_write_config_32(port
, RIO_ANY_DESTID(port
->sys_size
),
601 RIO_HOST_DID_LOCK_CSR
, port
->host_deviceid
);
602 while ((tmp
= rio_get_host_deviceid_lock(port
, hopcount
))
603 < port
->host_deviceid
) {
606 /* Attempt to acquire device lock again */
607 rio_mport_write_config_32(port
, RIO_ANY_DESTID(port
->sys_size
),
609 RIO_HOST_DID_LOCK_CSR
,
610 port
->host_deviceid
);
613 if (rio_get_host_deviceid_lock(port
, hopcount
) > port
->host_deviceid
) {
615 "RIO: PE locked by a higher priority host...retreating\n");
619 /* Setup new RIO device */
620 rdev
= rio_setup_device(net
, port
, RIO_ANY_DESTID(port
->sys_size
),
623 /* Add device to the global and bus/net specific list. */
624 list_add_tail(&rdev
->net_list
, &net
->devices
);
626 if (prev
&& rio_is_switch(prev
))
627 prev
->rswitch
->nextdev
[prev_port
] = rdev
;
631 if (rio_is_switch(rdev
)) {
638 sw_inport
= RIO_GET_PORT_NUM(rdev
->swpinfo
);
639 rio_route_add_entry(rdev
, RIO_GLOBAL_TABLE
,
640 port
->host_deviceid
, sw_inport
, 0);
641 rdev
->rswitch
->route_table
[port
->host_deviceid
] = sw_inport
;
643 destid
= rio_destid_first(net
);
644 while (destid
!= RIO_INVALID_DESTID
&& destid
< next_destid
) {
645 if (destid
!= port
->host_deviceid
) {
646 rio_route_add_entry(rdev
, RIO_GLOBAL_TABLE
,
647 destid
, sw_inport
, 0);
648 rdev
->rswitch
->route_table
[destid
] = sw_inport
;
650 destid
= rio_destid_next(net
, destid
+ 1);
653 "RIO: found %s (vid %4.4x did %4.4x) with %d ports\n",
654 rio_name(rdev
), rdev
->vid
, rdev
->did
,
655 RIO_GET_TOTAL_PORTS(rdev
->swpinfo
));
656 sw_destid
= next_destid
;
658 port_num
< RIO_GET_TOTAL_PORTS(rdev
->swpinfo
);
660 if (sw_inport
== port_num
) {
661 rio_enable_rx_tx_port(port
, 0,
662 RIO_ANY_DESTID(port
->sys_size
),
664 rdev
->rswitch
->port_ok
|= (1 << port_num
);
668 cur_destid
= next_destid
;
670 if (rio_sport_is_active
671 (port
, RIO_ANY_DESTID(port
->sys_size
), hopcount
,
674 "RIO: scanning device on port %d\n",
676 rio_enable_rx_tx_port(port
, 0,
677 RIO_ANY_DESTID(port
->sys_size
),
679 rdev
->rswitch
->port_ok
|= (1 << port_num
);
680 rio_route_add_entry(rdev
, RIO_GLOBAL_TABLE
,
681 RIO_ANY_DESTID(port
->sys_size
),
684 if (rio_enum_peer(net
, port
, hopcount
+ 1,
688 /* Update routing tables */
689 destid
= rio_destid_next(net
, cur_destid
+ 1);
690 if (destid
!= RIO_INVALID_DESTID
) {
691 for (destid
= cur_destid
;
692 destid
< next_destid
;) {
693 if (destid
!= port
->host_deviceid
) {
694 rio_route_add_entry(rdev
,
700 route_table
[destid
] =
703 destid
= rio_destid_next(net
,
708 /* If switch supports Error Management,
709 * set PORT_LOCKOUT bit for unused port
712 rio_set_port_lockout(rdev
, port_num
, 1);
714 rdev
->rswitch
->port_ok
&= ~(1 << port_num
);
718 /* Direct Port-write messages to the enumeratiing host */
719 if ((rdev
->src_ops
& RIO_SRC_OPS_PORT_WRITE
) &&
721 rio_write_config_32(rdev
,
722 rdev
->em_efptr
+ RIO_EM_PW_TGT_DEVID
,
723 (port
->host_deviceid
<< 16) |
724 (port
->sys_size
<< 15));
729 /* Check for empty switch */
730 if (next_destid
== sw_destid
)
731 next_destid
= rio_destid_alloc(net
);
733 rdev
->destid
= sw_destid
;
735 pr_debug("RIO: found %s (vid %4.4x did %4.4x)\n",
736 rio_name(rdev
), rdev
->vid
, rdev
->did
);
742 * rio_enum_complete- Tests if enumeration of a network is complete
743 * @port: Master port to send transaction
745 * Tests the PGCCSR discovered bit for non-zero value (enumeration
746 * complete flag). Return %1 if enumeration is complete or %0 if
747 * enumeration is incomplete.
749 static int rio_enum_complete(struct rio_mport
*port
)
753 rio_local_read_config_32(port
, port
->phys_efptr
+ RIO_PORT_GEN_CTL_CSR
,
755 return (regval
& RIO_PORT_GEN_DISCOVERED
) ? 1 : 0;
759 * rio_disc_peer- Recursively discovers a RIO network through a master port
760 * @net: RIO network being discovered
761 * @port: Master port to send transactions
762 * @destid: Current destination ID in network
763 * @hopcount: Number of hops into the network
764 * @prev: previous rio_dev
765 * @prev_port: previous port number
767 * Recursively discovers a RIO network. Transactions are sent via the
768 * master port passed in @port.
771 rio_disc_peer(struct rio_net
*net
, struct rio_mport
*port
, u16 destid
,
772 u8 hopcount
, struct rio_dev
*prev
, int prev_port
)
774 u8 port_num
, route_port
;
775 struct rio_dev
*rdev
;
778 /* Setup new RIO device */
779 if ((rdev
= rio_setup_device(net
, port
, destid
, hopcount
, 0))) {
780 /* Add device to the global and bus/net specific list. */
781 list_add_tail(&rdev
->net_list
, &net
->devices
);
783 if (prev
&& rio_is_switch(prev
))
784 prev
->rswitch
->nextdev
[prev_port
] = rdev
;
788 if (rio_is_switch(rdev
)) {
789 /* Associated destid is how we accessed this switch */
790 rdev
->destid
= destid
;
793 "RIO: found %s (vid %4.4x did %4.4x) with %d ports\n",
794 rio_name(rdev
), rdev
->vid
, rdev
->did
,
795 RIO_GET_TOTAL_PORTS(rdev
->swpinfo
));
797 port_num
< RIO_GET_TOTAL_PORTS(rdev
->swpinfo
);
799 if (RIO_GET_PORT_NUM(rdev
->swpinfo
) == port_num
)
802 if (rio_sport_is_active
803 (port
, destid
, hopcount
, port_num
)) {
805 "RIO: scanning device on port %d\n",
808 rio_lock_device(port
, destid
, hopcount
, 1000);
811 ndestid
< RIO_ANY_DESTID(port
->sys_size
);
813 rio_route_get_entry(rdev
,
817 if (route_port
== port_num
)
821 if (ndestid
== RIO_ANY_DESTID(port
->sys_size
))
823 rio_unlock_device(port
, destid
, hopcount
);
824 if (rio_disc_peer(net
, port
, ndestid
,
825 hopcount
+ 1, rdev
, port_num
) < 0)
830 pr_debug("RIO: found %s (vid %4.4x did %4.4x)\n",
831 rio_name(rdev
), rdev
->vid
, rdev
->did
);
837 * rio_mport_is_active- Tests if master port link is active
838 * @port: Master port to test
840 * Reads the port error status CSR for the master port to
841 * determine if the port has an active link. Returns
842 * %RIO_PORT_N_ERR_STS_PORT_OK if the master port is active
843 * or %0 if it is inactive.
845 static int rio_mport_is_active(struct rio_mport
*port
)
849 int *entry
= rio_mport_phys_table
;
853 rio_mport_get_feature(port
, 1, 0, 0, *entry
)))
855 } while (*++entry
>= 0);
858 rio_local_read_config_32(port
,
860 RIO_PORT_N_ERR_STS_CSR(port
->index
),
863 return result
& RIO_PORT_N_ERR_STS_PORT_OK
;
867 * rio_alloc_net- Allocate and configure a new RIO network
868 * @port: Master port associated with the RIO network
869 * @do_enum: Enumeration/Discovery mode flag
870 * @start: logical minimal start id for new net
872 * Allocates a RIO network structure, initializes per-network
873 * list heads, and adds the associated master port to the
874 * network list of associated master ports. Returns a
875 * RIO network pointer on success or %NULL on failure.
877 static struct rio_net
*rio_alloc_net(struct rio_mport
*port
,
878 int do_enum
, u16 start
)
882 net
= kzalloc(sizeof(struct rio_net
), GFP_KERNEL
);
883 if (net
&& do_enum
) {
884 net
->destid_table
.table
= kcalloc(
885 BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port
->sys_size
)),
889 if (net
->destid_table
.table
== NULL
) {
890 pr_err("RIO: failed to allocate destID table\n");
894 net
->destid_table
.start
= start
;
895 net
->destid_table
.max
=
896 RIO_MAX_ROUTE_ENTRIES(port
->sys_size
);
897 spin_lock_init(&net
->destid_table
.lock
);
902 INIT_LIST_HEAD(&net
->node
);
903 INIT_LIST_HEAD(&net
->devices
);
904 INIT_LIST_HEAD(&net
->switches
);
905 INIT_LIST_HEAD(&net
->mports
);
906 list_add_tail(&port
->nnode
, &net
->mports
);
914 * rio_update_route_tables- Updates route tables in switches
915 * @net: RIO network to run update on
917 * For each enumerated device, ensure that each switch in a system
918 * has correct routing entries. Add routes for devices that where
919 * unknown dirung the first enumeration pass through the switch.
921 static void rio_update_route_tables(struct rio_net
*net
)
923 struct rio_dev
*rdev
, *swrdev
;
924 struct rio_switch
*rswitch
;
928 list_for_each_entry(rdev
, &net
->devices
, net_list
) {
930 destid
= rdev
->destid
;
932 list_for_each_entry(rswitch
, &net
->switches
, node
) {
934 if (rio_is_switch(rdev
) && (rdev
->rswitch
== rswitch
))
937 if (RIO_INVALID_ROUTE
== rswitch
->route_table
[destid
]) {
938 swrdev
= sw_to_rio_dev(rswitch
);
940 /* Skip if destid ends in empty switch*/
941 if (swrdev
->destid
== destid
)
944 sport
= RIO_GET_PORT_NUM(swrdev
->swpinfo
);
946 rio_route_add_entry(swrdev
, RIO_GLOBAL_TABLE
,
948 rswitch
->route_table
[destid
] = sport
;
955 * rio_init_em - Initializes RIO Error Management (for switches)
958 * For each enumerated switch, call device-specific error management
959 * initialization routine (if supplied by the switch driver).
961 static void rio_init_em(struct rio_dev
*rdev
)
963 if (rio_is_switch(rdev
) && (rdev
->em_efptr
) &&
964 rdev
->rswitch
->ops
&& rdev
->rswitch
->ops
->em_init
) {
965 rdev
->rswitch
->ops
->em_init(rdev
);
970 * rio_pw_enable - Enables/disables port-write handling by a master port
971 * @port: Master port associated with port-write handling
972 * @enable: 1=enable, 0=disable
974 static void rio_pw_enable(struct rio_mport
*port
, int enable
)
976 if (port
->ops
->pwenable
)
977 port
->ops
->pwenable(port
, enable
);
981 * rio_enum_mport- Start enumeration through a master port
982 * @mport: Master port to send transactions
983 * @flags: Enumeration control flags
985 * Starts the enumeration process. If somebody has enumerated our
986 * master port device, then give up. If not and we have an active
987 * link, then start recursive peer enumeration. Returns %0 if
988 * enumeration succeeds or %-EBUSY if enumeration fails.
990 static int rio_enum_mport(struct rio_mport
*mport
, u32 flags
)
992 struct rio_net
*net
= NULL
;
995 printk(KERN_INFO
"RIO: enumerate master port %d, %s\n", mport
->id
,
999 * To avoid multiple start requests (repeat enumeration is not supported
1000 * by this method) check if enumeration/discovery was performed for this
1001 * mport: if mport was added into the list of mports for a net exit
1004 if (mport
->nnode
.next
|| mport
->nnode
.prev
)
1007 /* If somebody else enumerated our master port device, bail. */
1008 if (rio_enum_host(mport
) < 0) {
1010 "RIO: master port %d device has been enumerated by a remote host\n",
1016 /* If master port has an active link, allocate net and enum peers */
1017 if (rio_mport_is_active(mport
)) {
1018 net
= rio_alloc_net(mport
, 1, 0);
1020 printk(KERN_ERR
"RIO: failed to allocate new net\n");
1025 /* reserve mport destID in new net */
1026 rio_destid_reserve(net
, mport
->host_deviceid
);
1028 /* Enable Input Output Port (transmitter reviever) */
1029 rio_enable_rx_tx_port(mport
, 1, 0, 0, 0);
1031 /* Set component tag for host */
1032 rio_local_write_config_32(mport
, RIO_COMPONENT_TAG_CSR
,
1035 next_destid
= rio_destid_alloc(net
);
1037 if (rio_enum_peer(net
, mport
, 0, NULL
, 0) < 0) {
1038 /* A higher priority host won enumeration, bail. */
1040 "RIO: master port %d device has lost enumeration to a remote host\n",
1042 rio_clear_locks(net
);
1046 /* free the last allocated destID (unused) */
1047 rio_destid_free(net
, next_destid
);
1048 rio_update_route_tables(net
);
1049 rio_clear_locks(net
);
1050 rio_pw_enable(mport
, 1);
1052 printk(KERN_INFO
"RIO: master port %d link inactive\n",
1062 * rio_build_route_tables- Generate route tables from switch route entries
1063 * @net: RIO network to run route tables scan on
1065 * For each switch device, generate a route table by copying existing
1066 * route entries from the switch.
1068 static void rio_build_route_tables(struct rio_net
*net
)
1070 struct rio_switch
*rswitch
;
1071 struct rio_dev
*rdev
;
1075 list_for_each_entry(rswitch
, &net
->switches
, node
) {
1076 rdev
= sw_to_rio_dev(rswitch
);
1078 rio_lock_device(net
->hport
, rdev
->destid
,
1079 rdev
->hopcount
, 1000);
1081 i
< RIO_MAX_ROUTE_ENTRIES(net
->hport
->sys_size
);
1083 if (rio_route_get_entry(rdev
, RIO_GLOBAL_TABLE
,
1086 rswitch
->route_table
[i
] = sport
;
1089 rio_unlock_device(net
->hport
, rdev
->destid
, rdev
->hopcount
);
1094 * rio_disc_mport- Start discovery through a master port
1095 * @mport: Master port to send transactions
1096 * @flags: discovery control flags
1098 * Starts the discovery process. If we have an active link,
1099 * then wait for the signal that enumeration is complete (if wait
1101 * When enumeration completion is signaled, start recursive
1102 * peer discovery. Returns %0 if discovery succeeds or %-EBUSY
1105 static int rio_disc_mport(struct rio_mport
*mport
, u32 flags
)
1107 struct rio_net
*net
= NULL
;
1108 unsigned long to_end
;
1110 printk(KERN_INFO
"RIO: discover master port %d, %s\n", mport
->id
,
1113 /* If master port has an active link, allocate net and discover peers */
1114 if (rio_mport_is_active(mport
)) {
1115 if (rio_enum_complete(mport
))
1117 else if (flags
& RIO_SCAN_ENUM_NO_WAIT
)
1120 pr_debug("RIO: wait for enumeration to complete...\n");
1122 to_end
= jiffies
+ CONFIG_RAPIDIO_DISC_TIMEOUT
* HZ
;
1123 while (time_before(jiffies
, to_end
)) {
1124 if (rio_enum_complete(mport
))
1129 pr_debug("RIO: discovery timeout on mport %d %s\n",
1130 mport
->id
, mport
->name
);
1133 pr_debug("RIO: ... enumeration done\n");
1135 net
= rio_alloc_net(mport
, 0, 0);
1137 printk(KERN_ERR
"RIO: Failed to allocate new net\n");
1141 /* Read DestID assigned by enumerator */
1142 rio_local_read_config_32(mport
, RIO_DID_CSR
,
1143 &mport
->host_deviceid
);
1144 mport
->host_deviceid
= RIO_GET_DID(mport
->sys_size
,
1145 mport
->host_deviceid
);
1147 if (rio_disc_peer(net
, mport
, RIO_ANY_DESTID(mport
->sys_size
),
1150 "RIO: master port %d device has failed discovery\n",
1155 rio_build_route_tables(net
);
1163 static struct rio_scan rio_scan_ops
= {
1164 .owner
= THIS_MODULE
,
1165 .enumerate
= rio_enum_mport
,
1166 .discover
= rio_disc_mport
,
1170 module_param(scan
, bool, 0);
1171 MODULE_PARM_DESC(scan
, "Start RapidIO network enumeration/discovery "
1177 * When this enumeration/discovery method is loaded as a module this function
1178 * registers its specific enumeration and discover routines for all available
1179 * RapidIO mport devices. The "scan" command line parameter controls ability of
1180 * the module to start RapidIO enumeration/discovery automatically.
1182 * Returns 0 for success or -EIO if unable to register itself.
1184 * This enumeration/discovery method cannot be unloaded and therefore does not
1185 * provide a matching cleanup_module routine.
1188 static int __init
rio_basic_attach(void)
1190 if (rio_register_scan(RIO_MPORT_ANY
, &rio_scan_ops
))
1197 late_initcall(rio_basic_attach
);
1199 MODULE_DESCRIPTION("Basic RapidIO enumeration/discovery");
1200 MODULE_LICENSE("GPL");