1 /* 2 * RapidIO enumeration and discovery support 3 * 4 * Copyright 2005 MontaVista Software, Inc. 5 * Matt Porter <mporter@kernel.crashing.org> 6 * 7 * Copyright 2009 Integrated Device Technology, Inc. 8 * Alex Bounine <alexandre.bounine@idt.com> 9 * - Added Port-Write/Error Management initialization and handling 10 * 11 * Copyright 2009 Sysgo AG 12 * Thomas Moll <thomas.moll@sysgo.com> 13 * - Added Input- Output- enable functionality, to allow full communication 14 * 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. 19 */ 20 21 #include <linux/types.h> 22 #include <linux/kernel.h> 23 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> 37 38 #include "rio.h" 39 40 static void rio_init_em(struct rio_dev *rdev); 41 42 static int next_destid = 0; 43 static int next_comptag = 1; 44 45 static int rio_mport_phys_table[] = { 46 RIO_EFB_PAR_EP_ID, 47 RIO_EFB_PAR_EP_REC_ID, 48 RIO_EFB_SER_EP_ID, 49 RIO_EFB_SER_EP_REC_ID, 50 -1, 51 }; 52 53 54 /** 55 * rio_destid_alloc - Allocate next available destID for given network 56 * @net: RIO network 57 * 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. 61 */ 62 static u16 rio_destid_alloc(struct rio_net *net) 63 { 64 int destid; 65 struct rio_id_table *idtab = &net->destid_table; 66 67 spin_lock(&idtab->lock); 68 destid = find_first_zero_bit(idtab->table, idtab->max); 69 70 if (destid < idtab->max) { 71 set_bit(destid, idtab->table); 72 destid += idtab->start; 73 } else 74 destid = RIO_INVALID_DESTID; 75 76 spin_unlock(&idtab->lock); 77 return (u16)destid; 78 } 79 80 /** 81 * rio_destid_reserve - Reserve the specivied destID 82 * @net: RIO network 83 * @destid: destID to reserve 84 * 85 * Tries to reserve the specified destID. 86 * Returns 0 if successfull. 87 */ 88 static int rio_destid_reserve(struct rio_net *net, u16 destid) 89 { 90 int oldbit; 91 struct rio_id_table *idtab = &net->destid_table; 92 93 destid -= idtab->start; 94 spin_lock(&idtab->lock); 95 oldbit = test_and_set_bit(destid, idtab->table); 96 spin_unlock(&idtab->lock); 97 return oldbit; 98 } 99 100 /** 101 * rio_destid_free - free a previously allocated destID 102 * @net: RIO network 103 * @destid: destID to free 104 * 105 * Makes the specified destID available for use. 106 */ 107 static void rio_destid_free(struct rio_net *net, u16 destid) 108 { 109 struct rio_id_table *idtab = &net->destid_table; 110 111 destid -= idtab->start; 112 spin_lock(&idtab->lock); 113 clear_bit(destid, idtab->table); 114 spin_unlock(&idtab->lock); 115 } 116 117 /** 118 * rio_destid_first - return first destID in use 119 * @net: RIO network 120 */ 121 static u16 rio_destid_first(struct rio_net *net) 122 { 123 int destid; 124 struct rio_id_table *idtab = &net->destid_table; 125 126 spin_lock(&idtab->lock); 127 destid = find_first_bit(idtab->table, idtab->max); 128 if (destid >= idtab->max) 129 destid = RIO_INVALID_DESTID; 130 else 131 destid += idtab->start; 132 spin_unlock(&idtab->lock); 133 return (u16)destid; 134 } 135 136 /** 137 * rio_destid_next - return next destID in use 138 * @net: RIO network 139 * @from: destination ID from which search shall continue 140 */ 141 static u16 rio_destid_next(struct rio_net *net, u16 from) 142 { 143 int destid; 144 struct rio_id_table *idtab = &net->destid_table; 145 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; 150 else 151 destid += idtab->start; 152 spin_unlock(&idtab->lock); 153 return (u16)destid; 154 } 155 156 /** 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 161 * 162 * Reads the base/extended device id from a device. Returns the 163 * 8/16-bit device ID. 164 */ 165 static u16 rio_get_device_id(struct rio_mport *port, u16 destid, u8 hopcount) 166 { 167 u32 result; 168 169 rio_mport_read_config_32(port, destid, hopcount, RIO_DID_CSR, &result); 170 171 return RIO_GET_DID(port->sys_size, result); 172 } 173 174 /** 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 180 * 181 * Writes the base/extended device id from a device. 182 */ 183 static void rio_set_device_id(struct rio_mport *port, u16 destid, u8 hopcount, u16 did) 184 { 185 rio_mport_write_config_32(port, destid, hopcount, RIO_DID_CSR, 186 RIO_SET_DID(port->sys_size, did)); 187 } 188 189 /** 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 193 * 194 * Writes the base/extended device id from a device. 195 */ 196 static void rio_local_set_device_id(struct rio_mport *port, u16 did) 197 { 198 rio_local_write_config_32(port, RIO_DID_CSR, RIO_SET_DID(port->sys_size, 199 did)); 200 } 201 202 /** 203 * rio_clear_locks- Release all host locks and signal enumeration complete 204 * @net: RIO network to run on 205 * 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. 209 */ 210 static int rio_clear_locks(struct rio_net *net) 211 { 212 struct rio_mport *port = net->hport; 213 struct rio_dev *rdev; 214 u32 result; 215 int ret = 0; 216 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) { 222 printk(KERN_INFO 223 "RIO: badness when releasing host lock on master port, result %8.8x\n", 224 result); 225 ret = -EINVAL; 226 } 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) { 232 printk(KERN_INFO 233 "RIO: badness when releasing host lock on vid %4.4x did %4.4x\n", 234 rdev->vid, rdev->did); 235 ret = -EINVAL; 236 } 237 238 /* Mark device as discovered and enable master */ 239 rio_read_config_32(rdev, 240 rdev->phys_efptr + RIO_PORT_GEN_CTL_CSR, 241 &result); 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, 245 result); 246 } 247 248 return ret; 249 } 250 251 /** 252 * rio_enum_host- Set host lock and initialize host destination ID 253 * @port: Master port to issue transaction 254 * 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. 258 */ 259 static int rio_enum_host(struct rio_mport *port) 260 { 261 u32 result; 262 263 /* Set master port host device id lock */ 264 rio_local_write_config_32(port, RIO_HOST_DID_LOCK_CSR, 265 port->host_deviceid); 266 267 rio_local_read_config_32(port, RIO_HOST_DID_LOCK_CSR, &result); 268 if ((result & 0xffff) != port->host_deviceid) 269 return -1; 270 271 /* Set master port destid and init destid ctr */ 272 rio_local_set_device_id(port, port->host_deviceid); 273 return 0; 274 } 275 276 /** 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 281 * 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. 285 */ 286 static int rio_device_has_destid(struct rio_mport *port, int src_ops, 287 int dst_ops) 288 { 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; 290 291 return !!((src_ops | dst_ops) & mask); 292 } 293 294 /** 295 * rio_release_dev- Frees a RIO device struct 296 * @dev: LDM device associated with a RIO device struct 297 * 298 * Gets the RIO device struct associated a RIO device struct. 299 * The RIO device struct is freed. 300 */ 301 static void rio_release_dev(struct device *dev) 302 { 303 struct rio_dev *rdev; 304 305 rdev = to_rio_dev(dev); 306 kfree(rdev); 307 } 308 309 /** 310 * rio_is_switch- Tests if a RIO device has switch capabilities 311 * @rdev: RIO device 312 * 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. 317 */ 318 static int rio_is_switch(struct rio_dev *rdev) 319 { 320 if (rdev->pef & RIO_PEF_SWITCH) 321 return 1; 322 return 0; 323 } 324 325 /** 326 * rio_setup_device- Allocates and sets up a RIO device 327 * @net: RIO network 328 * @port: Master port to send transactions 329 * @destid: Current destination ID 330 * @hopcount: Current hopcount 331 * @do_enum: Enumeration/Discovery mode flag 332 * 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. 339 * 340 */ 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) 344 { 345 int ret = 0; 346 struct rio_dev *rdev; 347 struct rio_switch *rswitch = NULL; 348 int result, rdid; 349 size_t size; 350 u32 swpinfo = 0; 351 352 size = sizeof(struct rio_dev); 353 if (rio_mport_read_config_32(port, destid, hopcount, 354 RIO_PEF_CAR, &result)) 355 return NULL; 356 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); 363 } 364 } 365 366 rdev = kzalloc(size, GFP_KERNEL); 367 if (!rdev) 368 return NULL; 369 370 rdev->net = net; 371 rdev->pef = result; 372 rdev->swpinfo = swpinfo; 373 rio_mport_read_config_32(port, destid, hopcount, RIO_DEV_ID_CAR, 374 &result); 375 rdev->did = result >> 16; 376 rdev->vid = result & 0xffff; 377 rio_mport_read_config_32(port, destid, hopcount, RIO_DEV_INFO_CAR, 378 &rdev->device_rev); 379 rio_mport_read_config_32(port, destid, hopcount, RIO_ASM_ID_CAR, 380 &result); 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, 384 &result); 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, 389 hopcount); 390 391 rdev->em_efptr = rio_mport_get_feature(port, 0, destid, 392 hopcount, RIO_EFB_ERR_MGMNT); 393 } 394 395 rio_mport_read_config_32(port, destid, hopcount, RIO_SRC_OPS_CAR, 396 &rdev->src_ops); 397 rio_mport_read_config_32(port, destid, hopcount, RIO_DST_OPS_CAR, 398 &rdev->dst_ops); 399 400 if (do_enum) { 401 /* Assign component tag to device */ 402 if (next_comptag >= 0x10000) { 403 pr_err("RIO: Component Tag Counter Overflow\n"); 404 goto cleanup; 405 } 406 rio_mport_write_config_32(port, destid, hopcount, 407 RIO_COMPONENT_TAG_CSR, next_comptag); 408 rdev->comp_tag = next_comptag++; 409 } else { 410 rio_mport_read_config_32(port, destid, hopcount, 411 RIO_COMPONENT_TAG_CSR, 412 &rdev->comp_tag); 413 } 414 415 if (rio_device_has_destid(port, rdev->src_ops, rdev->dst_ops)) { 416 if (do_enum) { 417 rio_set_device_id(port, destid, hopcount, next_destid); 418 rdev->destid = next_destid; 419 next_destid = rio_destid_alloc(net); 420 } else 421 rdev->destid = rio_get_device_id(port, destid, hopcount); 422 423 rdev->hopcount = 0xff; 424 } else { 425 /* Switch device has an associated destID which 426 * will be adjusted later 427 */ 428 rdev->destid = destid; 429 rdev->hopcount = hopcount; 430 } 431 432 /* If a PE has both switch and other functions, show it as a switch */ 433 if (rio_is_switch(rdev)) { 434 rswitch = rdev->rswitch; 435 rswitch->switchid = rdev->comp_tag & RIO_CTAG_UDEVID; 436 rswitch->port_ok = 0; 437 rswitch->route_table = kzalloc(sizeof(u8)* 438 RIO_MAX_ROUTE_ENTRIES(port->sys_size), 439 GFP_KERNEL); 440 if (!rswitch->route_table) 441 goto cleanup; 442 /* Initialize switch route table */ 443 for (rdid = 0; rdid < RIO_MAX_ROUTE_ENTRIES(port->sys_size); 444 rdid++) 445 rswitch->route_table[rdid] = RIO_INVALID_ROUTE; 446 dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, 447 rswitch->switchid); 448 rio_switch_init(rdev, do_enum); 449 450 if (do_enum && rswitch->clr_table) 451 rswitch->clr_table(port, destid, hopcount, 452 RIO_GLOBAL_TABLE); 453 454 list_add_tail(&rswitch->node, &net->switches); 455 456 } else { 457 if (do_enum) 458 /*Enable Input Output Port (transmitter reviever)*/ 459 rio_enable_rx_tx_port(port, 0, destid, hopcount, 0); 460 461 dev_set_name(&rdev->dev, "%02x:e:%04x", rdev->net->id, 462 rdev->destid); 463 } 464 465 rio_attach_device(rdev); 466 467 device_initialize(&rdev->dev); 468 rdev->dev.release = rio_release_dev; 469 rio_dev_get(rdev); 470 471 rdev->dma_mask = DMA_BIT_MASK(32); 472 rdev->dev.dma_mask = &rdev->dma_mask; 473 rdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); 474 475 if (rdev->dst_ops & RIO_DST_OPS_DOORBELL) 476 rio_init_dbell_res(&rdev->riores[RIO_DOORBELL_RESOURCE], 477 0, 0xffff); 478 479 ret = rio_add_device(rdev); 480 if (ret) 481 goto cleanup; 482 483 return rdev; 484 485 cleanup: 486 if (rswitch) 487 kfree(rswitch->route_table); 488 489 kfree(rdev); 490 return NULL; 491 } 492 493 /** 494 * rio_sport_is_active- Tests if a switch port has an active connection. 495 * @port: Master port to send transaction 496 * @destid: Associated destination ID for switch 497 * @hopcount: Hopcount to reach switch 498 * @sport: Switch port number 499 * 500 * Reads the port error status CSR for a particular switch port to 501 * determine if the port has an active link. Returns 502 * %RIO_PORT_N_ERR_STS_PORT_OK if the port is active or %0 if it is 503 * inactive. 504 */ 505 static int 506 rio_sport_is_active(struct rio_mport *port, u16 destid, u8 hopcount, int sport) 507 { 508 u32 result = 0; 509 u32 ext_ftr_ptr; 510 511 ext_ftr_ptr = rio_mport_get_efb(port, 0, destid, hopcount, 0); 512 513 while (ext_ftr_ptr) { 514 rio_mport_read_config_32(port, destid, hopcount, 515 ext_ftr_ptr, &result); 516 result = RIO_GET_BLOCK_ID(result); 517 if ((result == RIO_EFB_SER_EP_FREE_ID) || 518 (result == RIO_EFB_SER_EP_FREE_ID_V13P) || 519 (result == RIO_EFB_SER_EP_FREC_ID)) 520 break; 521 522 ext_ftr_ptr = rio_mport_get_efb(port, 0, destid, hopcount, 523 ext_ftr_ptr); 524 } 525 526 if (ext_ftr_ptr) 527 rio_mport_read_config_32(port, destid, hopcount, 528 ext_ftr_ptr + 529 RIO_PORT_N_ERR_STS_CSR(sport), 530 &result); 531 532 return result & RIO_PORT_N_ERR_STS_PORT_OK; 533 } 534 535 /** 536 * rio_lock_device - Acquires host device lock for specified device 537 * @port: Master port to send transaction 538 * @destid: Destination ID for device/switch 539 * @hopcount: Hopcount to reach switch 540 * @wait_ms: Max wait time in msec (0 = no timeout) 541 * 542 * Attepts to acquire host device lock for specified device 543 * Returns 0 if device lock acquired or EINVAL if timeout expires. 544 */ 545 static int 546 rio_lock_device(struct rio_mport *port, u16 destid, u8 hopcount, int wait_ms) 547 { 548 u32 result; 549 int tcnt = 0; 550 551 /* Attempt to acquire device lock */ 552 rio_mport_write_config_32(port, destid, hopcount, 553 RIO_HOST_DID_LOCK_CSR, port->host_deviceid); 554 rio_mport_read_config_32(port, destid, hopcount, 555 RIO_HOST_DID_LOCK_CSR, &result); 556 557 while (result != port->host_deviceid) { 558 if (wait_ms != 0 && tcnt == wait_ms) { 559 pr_debug("RIO: timeout when locking device %x:%x\n", 560 destid, hopcount); 561 return -EINVAL; 562 } 563 564 /* Delay a bit */ 565 mdelay(1); 566 tcnt++; 567 /* Try to acquire device lock again */ 568 rio_mport_write_config_32(port, destid, 569 hopcount, 570 RIO_HOST_DID_LOCK_CSR, 571 port->host_deviceid); 572 rio_mport_read_config_32(port, destid, 573 hopcount, 574 RIO_HOST_DID_LOCK_CSR, &result); 575 } 576 577 return 0; 578 } 579 580 /** 581 * rio_unlock_device - Releases host device lock for specified device 582 * @port: Master port to send transaction 583 * @destid: Destination ID for device/switch 584 * @hopcount: Hopcount to reach switch 585 * 586 * Returns 0 if device lock released or EINVAL if fails. 587 */ 588 static int 589 rio_unlock_device(struct rio_mport *port, u16 destid, u8 hopcount) 590 { 591 u32 result; 592 593 /* Release device lock */ 594 rio_mport_write_config_32(port, destid, 595 hopcount, 596 RIO_HOST_DID_LOCK_CSR, 597 port->host_deviceid); 598 rio_mport_read_config_32(port, destid, hopcount, 599 RIO_HOST_DID_LOCK_CSR, &result); 600 if ((result & 0xffff) != 0xffff) { 601 pr_debug("RIO: badness when releasing device lock %x:%x\n", 602 destid, hopcount); 603 return -EINVAL; 604 } 605 606 return 0; 607 } 608 609 /** 610 * rio_route_add_entry- Add a route entry to a switch routing table 611 * @rdev: RIO device 612 * @table: Routing table ID 613 * @route_destid: Destination ID to be routed 614 * @route_port: Port number to be routed 615 * @lock: lock switch device flag 616 * 617 * Calls the switch specific add_entry() method to add a route entry 618 * on a switch. The route table can be specified using the @table 619 * argument if a switch has per port routing tables or the normal 620 * use is to specific all tables (or the global table) by passing 621 * %RIO_GLOBAL_TABLE in @table. Returns %0 on success or %-EINVAL 622 * on failure. 623 */ 624 static int 625 rio_route_add_entry(struct rio_dev *rdev, 626 u16 table, u16 route_destid, u8 route_port, int lock) 627 { 628 int rc; 629 630 if (lock) { 631 rc = rio_lock_device(rdev->net->hport, rdev->destid, 632 rdev->hopcount, 1000); 633 if (rc) 634 return rc; 635 } 636 637 rc = rdev->rswitch->add_entry(rdev->net->hport, rdev->destid, 638 rdev->hopcount, table, 639 route_destid, route_port); 640 if (lock) 641 rio_unlock_device(rdev->net->hport, rdev->destid, 642 rdev->hopcount); 643 644 return rc; 645 } 646 647 /** 648 * rio_route_get_entry- Read a route entry in a switch routing table 649 * @rdev: RIO device 650 * @table: Routing table ID 651 * @route_destid: Destination ID to be routed 652 * @route_port: Pointer to read port number into 653 * @lock: lock switch device flag 654 * 655 * Calls the switch specific get_entry() method to read a route entry 656 * in a switch. The route table can be specified using the @table 657 * argument if a switch has per port routing tables or the normal 658 * use is to specific all tables (or the global table) by passing 659 * %RIO_GLOBAL_TABLE in @table. Returns %0 on success or %-EINVAL 660 * on failure. 661 */ 662 static int 663 rio_route_get_entry(struct rio_dev *rdev, u16 table, 664 u16 route_destid, u8 *route_port, int lock) 665 { 666 int rc; 667 668 if (lock) { 669 rc = rio_lock_device(rdev->net->hport, rdev->destid, 670 rdev->hopcount, 1000); 671 if (rc) 672 return rc; 673 } 674 675 rc = rdev->rswitch->get_entry(rdev->net->hport, rdev->destid, 676 rdev->hopcount, table, 677 route_destid, route_port); 678 if (lock) 679 rio_unlock_device(rdev->net->hport, rdev->destid, 680 rdev->hopcount); 681 682 return rc; 683 } 684 685 /** 686 * rio_get_host_deviceid_lock- Reads the Host Device ID Lock CSR on a device 687 * @port: Master port to send transaction 688 * @hopcount: Number of hops to the device 689 * 690 * Used during enumeration to read the Host Device ID Lock CSR on a 691 * RIO device. Returns the value of the lock register. 692 */ 693 static u16 rio_get_host_deviceid_lock(struct rio_mport *port, u8 hopcount) 694 { 695 u32 result; 696 697 rio_mport_read_config_32(port, RIO_ANY_DESTID(port->sys_size), hopcount, 698 RIO_HOST_DID_LOCK_CSR, &result); 699 700 return (u16) (result & 0xffff); 701 } 702 703 /** 704 * rio_enum_peer- Recursively enumerate a RIO network through a master port 705 * @net: RIO network being enumerated 706 * @port: Master port to send transactions 707 * @hopcount: Number of hops into the network 708 * @prev: Previous RIO device connected to the enumerated one 709 * @prev_port: Port on previous RIO device 710 * 711 * Recursively enumerates a RIO network. Transactions are sent via the 712 * master port passed in @port. 713 */ 714 static int rio_enum_peer(struct rio_net *net, struct rio_mport *port, 715 u8 hopcount, struct rio_dev *prev, int prev_port) 716 { 717 struct rio_dev *rdev; 718 u32 regval; 719 int tmp; 720 721 if (rio_mport_chk_dev_access(port, 722 RIO_ANY_DESTID(port->sys_size), hopcount)) { 723 pr_debug("RIO: device access check failed\n"); 724 return -1; 725 } 726 727 if (rio_get_host_deviceid_lock(port, hopcount) == port->host_deviceid) { 728 pr_debug("RIO: PE already discovered by this host\n"); 729 /* 730 * Already discovered by this host. Add it as another 731 * link to the existing device. 732 */ 733 rio_mport_read_config_32(port, RIO_ANY_DESTID(port->sys_size), 734 hopcount, RIO_COMPONENT_TAG_CSR, ®val); 735 736 if (regval) { 737 rdev = rio_get_comptag((regval & 0xffff), NULL); 738 739 if (rdev && prev && rio_is_switch(prev)) { 740 pr_debug("RIO: redundant path to %s\n", 741 rio_name(rdev)); 742 prev->rswitch->nextdev[prev_port] = rdev; 743 } 744 } 745 746 return 0; 747 } 748 749 /* Attempt to acquire device lock */ 750 rio_mport_write_config_32(port, RIO_ANY_DESTID(port->sys_size), 751 hopcount, 752 RIO_HOST_DID_LOCK_CSR, port->host_deviceid); 753 while ((tmp = rio_get_host_deviceid_lock(port, hopcount)) 754 < port->host_deviceid) { 755 /* Delay a bit */ 756 mdelay(1); 757 /* Attempt to acquire device lock again */ 758 rio_mport_write_config_32(port, RIO_ANY_DESTID(port->sys_size), 759 hopcount, 760 RIO_HOST_DID_LOCK_CSR, 761 port->host_deviceid); 762 } 763 764 if (rio_get_host_deviceid_lock(port, hopcount) > port->host_deviceid) { 765 pr_debug( 766 "RIO: PE locked by a higher priority host...retreating\n"); 767 return -1; 768 } 769 770 /* Setup new RIO device */ 771 rdev = rio_setup_device(net, port, RIO_ANY_DESTID(port->sys_size), 772 hopcount, 1); 773 if (rdev) { 774 /* Add device to the global and bus/net specific list. */ 775 list_add_tail(&rdev->net_list, &net->devices); 776 rdev->prev = prev; 777 if (prev && rio_is_switch(prev)) 778 prev->rswitch->nextdev[prev_port] = rdev; 779 } else 780 return -1; 781 782 if (rio_is_switch(rdev)) { 783 int sw_destid; 784 int cur_destid; 785 int sw_inport; 786 u16 destid; 787 int port_num; 788 789 sw_inport = RIO_GET_PORT_NUM(rdev->swpinfo); 790 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, 791 port->host_deviceid, sw_inport, 0); 792 rdev->rswitch->route_table[port->host_deviceid] = sw_inport; 793 794 destid = rio_destid_first(net); 795 while (destid != RIO_INVALID_DESTID && destid < next_destid) { 796 if (destid != port->host_deviceid) { 797 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, 798 destid, sw_inport, 0); 799 rdev->rswitch->route_table[destid] = sw_inport; 800 } 801 destid = rio_destid_next(net, destid + 1); 802 } 803 pr_debug( 804 "RIO: found %s (vid %4.4x did %4.4x) with %d ports\n", 805 rio_name(rdev), rdev->vid, rdev->did, 806 RIO_GET_TOTAL_PORTS(rdev->swpinfo)); 807 sw_destid = next_destid; 808 for (port_num = 0; 809 port_num < RIO_GET_TOTAL_PORTS(rdev->swpinfo); 810 port_num++) { 811 if (sw_inport == port_num) { 812 rio_enable_rx_tx_port(port, 0, 813 RIO_ANY_DESTID(port->sys_size), 814 hopcount, port_num); 815 rdev->rswitch->port_ok |= (1 << port_num); 816 continue; 817 } 818 819 cur_destid = next_destid; 820 821 if (rio_sport_is_active 822 (port, RIO_ANY_DESTID(port->sys_size), hopcount, 823 port_num)) { 824 pr_debug( 825 "RIO: scanning device on port %d\n", 826 port_num); 827 rio_enable_rx_tx_port(port, 0, 828 RIO_ANY_DESTID(port->sys_size), 829 hopcount, port_num); 830 rdev->rswitch->port_ok |= (1 << port_num); 831 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, 832 RIO_ANY_DESTID(port->sys_size), 833 port_num, 0); 834 835 if (rio_enum_peer(net, port, hopcount + 1, 836 rdev, port_num) < 0) 837 return -1; 838 839 /* Update routing tables */ 840 destid = rio_destid_next(net, cur_destid + 1); 841 if (destid != RIO_INVALID_DESTID) { 842 for (destid = cur_destid; 843 destid < next_destid;) { 844 if (destid != port->host_deviceid) { 845 rio_route_add_entry(rdev, 846 RIO_GLOBAL_TABLE, 847 destid, 848 port_num, 849 0); 850 rdev->rswitch-> 851 route_table[destid] = 852 port_num; 853 } 854 destid = rio_destid_next(net, 855 destid + 1); 856 } 857 } 858 } else { 859 /* If switch supports Error Management, 860 * set PORT_LOCKOUT bit for unused port 861 */ 862 if (rdev->em_efptr) 863 rio_set_port_lockout(rdev, port_num, 1); 864 865 rdev->rswitch->port_ok &= ~(1 << port_num); 866 } 867 } 868 869 /* Direct Port-write messages to the enumeratiing host */ 870 if ((rdev->src_ops & RIO_SRC_OPS_PORT_WRITE) && 871 (rdev->em_efptr)) { 872 rio_write_config_32(rdev, 873 rdev->em_efptr + RIO_EM_PW_TGT_DEVID, 874 (port->host_deviceid << 16) | 875 (port->sys_size << 15)); 876 } 877 878 rio_init_em(rdev); 879 880 /* Check for empty switch */ 881 if (next_destid == sw_destid) 882 next_destid = rio_destid_alloc(net); 883 884 rdev->destid = sw_destid; 885 } else 886 pr_debug("RIO: found %s (vid %4.4x did %4.4x)\n", 887 rio_name(rdev), rdev->vid, rdev->did); 888 889 return 0; 890 } 891 892 /** 893 * rio_enum_complete- Tests if enumeration of a network is complete 894 * @port: Master port to send transaction 895 * 896 * Tests the PGCCSR discovered bit for non-zero value (enumeration 897 * complete flag). Return %1 if enumeration is complete or %0 if 898 * enumeration is incomplete. 899 */ 900 static int rio_enum_complete(struct rio_mport *port) 901 { 902 u32 regval; 903 904 rio_local_read_config_32(port, port->phys_efptr + RIO_PORT_GEN_CTL_CSR, 905 ®val); 906 return (regval & RIO_PORT_GEN_DISCOVERED) ? 1 : 0; 907 } 908 909 /** 910 * rio_disc_peer- Recursively discovers a RIO network through a master port 911 * @net: RIO network being discovered 912 * @port: Master port to send transactions 913 * @destid: Current destination ID in network 914 * @hopcount: Number of hops into the network 915 * @prev: previous rio_dev 916 * @prev_port: previous port number 917 * 918 * Recursively discovers a RIO network. Transactions are sent via the 919 * master port passed in @port. 920 */ 921 static int 922 rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, 923 u8 hopcount, struct rio_dev *prev, int prev_port) 924 { 925 u8 port_num, route_port; 926 struct rio_dev *rdev; 927 u16 ndestid; 928 929 /* Setup new RIO device */ 930 if ((rdev = rio_setup_device(net, port, destid, hopcount, 0))) { 931 /* Add device to the global and bus/net specific list. */ 932 list_add_tail(&rdev->net_list, &net->devices); 933 rdev->prev = prev; 934 if (prev && rio_is_switch(prev)) 935 prev->rswitch->nextdev[prev_port] = rdev; 936 } else 937 return -1; 938 939 if (rio_is_switch(rdev)) { 940 /* Associated destid is how we accessed this switch */ 941 rdev->destid = destid; 942 943 pr_debug( 944 "RIO: found %s (vid %4.4x did %4.4x) with %d ports\n", 945 rio_name(rdev), rdev->vid, rdev->did, 946 RIO_GET_TOTAL_PORTS(rdev->swpinfo)); 947 for (port_num = 0; 948 port_num < RIO_GET_TOTAL_PORTS(rdev->swpinfo); 949 port_num++) { 950 if (RIO_GET_PORT_NUM(rdev->swpinfo) == port_num) 951 continue; 952 953 if (rio_sport_is_active 954 (port, destid, hopcount, port_num)) { 955 pr_debug( 956 "RIO: scanning device on port %d\n", 957 port_num); 958 959 rio_lock_device(port, destid, hopcount, 1000); 960 961 for (ndestid = 0; 962 ndestid < RIO_ANY_DESTID(port->sys_size); 963 ndestid++) { 964 rio_route_get_entry(rdev, 965 RIO_GLOBAL_TABLE, 966 ndestid, 967 &route_port, 0); 968 if (route_port == port_num) 969 break; 970 } 971 972 if (ndestid == RIO_ANY_DESTID(port->sys_size)) 973 continue; 974 rio_unlock_device(port, destid, hopcount); 975 if (rio_disc_peer(net, port, ndestid, 976 hopcount + 1, rdev, port_num) < 0) 977 return -1; 978 } 979 } 980 } else 981 pr_debug("RIO: found %s (vid %4.4x did %4.4x)\n", 982 rio_name(rdev), rdev->vid, rdev->did); 983 984 return 0; 985 } 986 987 /** 988 * rio_mport_is_active- Tests if master port link is active 989 * @port: Master port to test 990 * 991 * Reads the port error status CSR for the master port to 992 * determine if the port has an active link. Returns 993 * %RIO_PORT_N_ERR_STS_PORT_OK if the master port is active 994 * or %0 if it is inactive. 995 */ 996 static int rio_mport_is_active(struct rio_mport *port) 997 { 998 u32 result = 0; 999 u32 ext_ftr_ptr; 1000 int *entry = rio_mport_phys_table; 1001 1002 do { 1003 if ((ext_ftr_ptr = 1004 rio_mport_get_feature(port, 1, 0, 0, *entry))) 1005 break; 1006 } while (*++entry >= 0); 1007 1008 if (ext_ftr_ptr) 1009 rio_local_read_config_32(port, 1010 ext_ftr_ptr + 1011 RIO_PORT_N_ERR_STS_CSR(port->index), 1012 &result); 1013 1014 return result & RIO_PORT_N_ERR_STS_PORT_OK; 1015 } 1016 1017 /** 1018 * rio_alloc_net- Allocate and configure a new RIO network 1019 * @port: Master port associated with the RIO network 1020 * @do_enum: Enumeration/Discovery mode flag 1021 * @start: logical minimal start id for new net 1022 * 1023 * Allocates a RIO network structure, initializes per-network 1024 * list heads, and adds the associated master port to the 1025 * network list of associated master ports. Returns a 1026 * RIO network pointer on success or %NULL on failure. 1027 */ 1028 static struct rio_net *rio_alloc_net(struct rio_mport *port, 1029 int do_enum, u16 start) 1030 { 1031 struct rio_net *net; 1032 1033 net = kzalloc(sizeof(struct rio_net), GFP_KERNEL); 1034 if (net && do_enum) { 1035 net->destid_table.table = kcalloc( 1036 BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port->sys_size)), 1037 sizeof(long), 1038 GFP_KERNEL); 1039 1040 if (net->destid_table.table == NULL) { 1041 pr_err("RIO: failed to allocate destID table\n"); 1042 kfree(net); 1043 net = NULL; 1044 } else { 1045 net->destid_table.start = start; 1046 net->destid_table.max = 1047 RIO_MAX_ROUTE_ENTRIES(port->sys_size); 1048 spin_lock_init(&net->destid_table.lock); 1049 } 1050 } 1051 1052 if (net) { 1053 INIT_LIST_HEAD(&net->node); 1054 INIT_LIST_HEAD(&net->devices); 1055 INIT_LIST_HEAD(&net->switches); 1056 INIT_LIST_HEAD(&net->mports); 1057 list_add_tail(&port->nnode, &net->mports); 1058 net->hport = port; 1059 net->id = port->id; 1060 } 1061 return net; 1062 } 1063 1064 /** 1065 * rio_update_route_tables- Updates route tables in switches 1066 * @net: RIO network to run update on 1067 * 1068 * For each enumerated device, ensure that each switch in a system 1069 * has correct routing entries. Add routes for devices that where 1070 * unknown dirung the first enumeration pass through the switch. 1071 */ 1072 static void rio_update_route_tables(struct rio_net *net) 1073 { 1074 struct rio_dev *rdev, *swrdev; 1075 struct rio_switch *rswitch; 1076 u8 sport; 1077 u16 destid; 1078 1079 list_for_each_entry(rdev, &net->devices, net_list) { 1080 1081 destid = rdev->destid; 1082 1083 list_for_each_entry(rswitch, &net->switches, node) { 1084 1085 if (rio_is_switch(rdev) && (rdev->rswitch == rswitch)) 1086 continue; 1087 1088 if (RIO_INVALID_ROUTE == rswitch->route_table[destid]) { 1089 swrdev = sw_to_rio_dev(rswitch); 1090 1091 /* Skip if destid ends in empty switch*/ 1092 if (swrdev->destid == destid) 1093 continue; 1094 1095 sport = RIO_GET_PORT_NUM(swrdev->swpinfo); 1096 1097 if (rswitch->add_entry) { 1098 rio_route_add_entry(swrdev, 1099 RIO_GLOBAL_TABLE, destid, 1100 sport, 0); 1101 rswitch->route_table[destid] = sport; 1102 } 1103 } 1104 } 1105 } 1106 } 1107 1108 /** 1109 * rio_init_em - Initializes RIO Error Management (for switches) 1110 * @rdev: RIO device 1111 * 1112 * For each enumerated switch, call device-specific error management 1113 * initialization routine (if supplied by the switch driver). 1114 */ 1115 static void rio_init_em(struct rio_dev *rdev) 1116 { 1117 if (rio_is_switch(rdev) && (rdev->em_efptr) && 1118 (rdev->rswitch->em_init)) { 1119 rdev->rswitch->em_init(rdev); 1120 } 1121 } 1122 1123 /** 1124 * rio_pw_enable - Enables/disables port-write handling by a master port 1125 * @port: Master port associated with port-write handling 1126 * @enable: 1=enable, 0=disable 1127 */ 1128 static void rio_pw_enable(struct rio_mport *port, int enable) 1129 { 1130 if (port->ops->pwenable) 1131 port->ops->pwenable(port, enable); 1132 } 1133 1134 /** 1135 * rio_enum_mport- Start enumeration through a master port 1136 * @mport: Master port to send transactions 1137 * @flags: Enumeration control flags 1138 * 1139 * Starts the enumeration process. If somebody has enumerated our 1140 * master port device, then give up. If not and we have an active 1141 * link, then start recursive peer enumeration. Returns %0 if 1142 * enumeration succeeds or %-EBUSY if enumeration fails. 1143 */ 1144 int rio_enum_mport(struct rio_mport *mport, u32 flags) 1145 { 1146 struct rio_net *net = NULL; 1147 int rc = 0; 1148 1149 printk(KERN_INFO "RIO: enumerate master port %d, %s\n", mport->id, 1150 mport->name); 1151 1152 /* 1153 * To avoid multiple start requests (repeat enumeration is not supported 1154 * by this method) check if enumeration/discovery was performed for this 1155 * mport: if mport was added into the list of mports for a net exit 1156 * with error. 1157 */ 1158 if (mport->nnode.next || mport->nnode.prev) 1159 return -EBUSY; 1160 1161 /* If somebody else enumerated our master port device, bail. */ 1162 if (rio_enum_host(mport) < 0) { 1163 printk(KERN_INFO 1164 "RIO: master port %d device has been enumerated by a remote host\n", 1165 mport->id); 1166 rc = -EBUSY; 1167 goto out; 1168 } 1169 1170 /* If master port has an active link, allocate net and enum peers */ 1171 if (rio_mport_is_active(mport)) { 1172 net = rio_alloc_net(mport, 1, 0); 1173 if (!net) { 1174 printk(KERN_ERR "RIO: failed to allocate new net\n"); 1175 rc = -ENOMEM; 1176 goto out; 1177 } 1178 1179 /* reserve mport destID in new net */ 1180 rio_destid_reserve(net, mport->host_deviceid); 1181 1182 /* Enable Input Output Port (transmitter reviever) */ 1183 rio_enable_rx_tx_port(mport, 1, 0, 0, 0); 1184 1185 /* Set component tag for host */ 1186 rio_local_write_config_32(mport, RIO_COMPONENT_TAG_CSR, 1187 next_comptag++); 1188 1189 next_destid = rio_destid_alloc(net); 1190 1191 if (rio_enum_peer(net, mport, 0, NULL, 0) < 0) { 1192 /* A higher priority host won enumeration, bail. */ 1193 printk(KERN_INFO 1194 "RIO: master port %d device has lost enumeration to a remote host\n", 1195 mport->id); 1196 rio_clear_locks(net); 1197 rc = -EBUSY; 1198 goto out; 1199 } 1200 /* free the last allocated destID (unused) */ 1201 rio_destid_free(net, next_destid); 1202 rio_update_route_tables(net); 1203 rio_clear_locks(net); 1204 rio_pw_enable(mport, 1); 1205 } else { 1206 printk(KERN_INFO "RIO: master port %d link inactive\n", 1207 mport->id); 1208 rc = -EINVAL; 1209 } 1210 1211 out: 1212 return rc; 1213 } 1214 1215 /** 1216 * rio_build_route_tables- Generate route tables from switch route entries 1217 * @net: RIO network to run route tables scan on 1218 * 1219 * For each switch device, generate a route table by copying existing 1220 * route entries from the switch. 1221 */ 1222 static void rio_build_route_tables(struct rio_net *net) 1223 { 1224 struct rio_switch *rswitch; 1225 struct rio_dev *rdev; 1226 int i; 1227 u8 sport; 1228 1229 list_for_each_entry(rswitch, &net->switches, node) { 1230 rdev = sw_to_rio_dev(rswitch); 1231 1232 rio_lock_device(net->hport, rdev->destid, 1233 rdev->hopcount, 1000); 1234 for (i = 0; 1235 i < RIO_MAX_ROUTE_ENTRIES(net->hport->sys_size); 1236 i++) { 1237 if (rio_route_get_entry(rdev, RIO_GLOBAL_TABLE, 1238 i, &sport, 0) < 0) 1239 continue; 1240 rswitch->route_table[i] = sport; 1241 } 1242 1243 rio_unlock_device(net->hport, rdev->destid, rdev->hopcount); 1244 } 1245 } 1246 1247 /** 1248 * rio_disc_mport- Start discovery through a master port 1249 * @mport: Master port to send transactions 1250 * @flags: discovery control flags 1251 * 1252 * Starts the discovery process. If we have an active link, 1253 * then wait for the signal that enumeration is complete (if wait 1254 * is allowed). 1255 * When enumeration completion is signaled, start recursive 1256 * peer discovery. Returns %0 if discovery succeeds or %-EBUSY 1257 * on failure. 1258 */ 1259 int rio_disc_mport(struct rio_mport *mport, u32 flags) 1260 { 1261 struct rio_net *net = NULL; 1262 unsigned long to_end; 1263 1264 printk(KERN_INFO "RIO: discover master port %d, %s\n", mport->id, 1265 mport->name); 1266 1267 /* If master port has an active link, allocate net and discover peers */ 1268 if (rio_mport_is_active(mport)) { 1269 if (rio_enum_complete(mport)) 1270 goto enum_done; 1271 else if (flags & RIO_SCAN_ENUM_NO_WAIT) 1272 return -EAGAIN; 1273 1274 pr_debug("RIO: wait for enumeration to complete...\n"); 1275 1276 to_end = jiffies + CONFIG_RAPIDIO_DISC_TIMEOUT * HZ; 1277 while (time_before(jiffies, to_end)) { 1278 if (rio_enum_complete(mport)) 1279 goto enum_done; 1280 msleep(10); 1281 } 1282 1283 pr_debug("RIO: discovery timeout on mport %d %s\n", 1284 mport->id, mport->name); 1285 goto bail; 1286 enum_done: 1287 pr_debug("RIO: ... enumeration done\n"); 1288 1289 net = rio_alloc_net(mport, 0, 0); 1290 if (!net) { 1291 printk(KERN_ERR "RIO: Failed to allocate new net\n"); 1292 goto bail; 1293 } 1294 1295 /* Read DestID assigned by enumerator */ 1296 rio_local_read_config_32(mport, RIO_DID_CSR, 1297 &mport->host_deviceid); 1298 mport->host_deviceid = RIO_GET_DID(mport->sys_size, 1299 mport->host_deviceid); 1300 1301 if (rio_disc_peer(net, mport, RIO_ANY_DESTID(mport->sys_size), 1302 0, NULL, 0) < 0) { 1303 printk(KERN_INFO 1304 "RIO: master port %d device has failed discovery\n", 1305 mport->id); 1306 goto bail; 1307 } 1308 1309 rio_build_route_tables(net); 1310 } 1311 1312 return 0; 1313 bail: 1314 return -EBUSY; 1315 } 1316 1317 static struct rio_scan rio_scan_ops = { 1318 .enumerate = rio_enum_mport, 1319 .discover = rio_disc_mport, 1320 }; 1321 1322 static bool scan; 1323 module_param(scan, bool, 0); 1324 MODULE_PARM_DESC(scan, "Start RapidIO network enumeration/discovery " 1325 "(default = 0)"); 1326 1327 /** 1328 * rio_basic_attach: 1329 * 1330 * When this enumeration/discovery method is loaded as a module this function 1331 * registers its specific enumeration and discover routines for all available 1332 * RapidIO mport devices. The "scan" command line parameter controls ability of 1333 * the module to start RapidIO enumeration/discovery automatically. 1334 * 1335 * Returns 0 for success or -EIO if unable to register itself. 1336 * 1337 * This enumeration/discovery method cannot be unloaded and therefore does not 1338 * provide a matching cleanup_module routine. 1339 */ 1340 1341 static int __init rio_basic_attach(void) 1342 { 1343 if (rio_register_scan(RIO_MPORT_ANY, &rio_scan_ops)) 1344 return -EIO; 1345 if (scan) 1346 rio_init_mports(); 1347 return 0; 1348 } 1349 1350 late_initcall(rio_basic_attach); 1351 1352 MODULE_DESCRIPTION("Basic RapidIO enumeration/discovery"); 1353 MODULE_LICENSE("GPL"); 1354