1 /* 2 * Copyright (c) 2014 Google, Inc 3 * Written by Simon Glass <sjg@chromium.org> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 #include <common.h> 9 #include <dm.h> 10 #include <errno.h> 11 #include <fdtdec.h> 12 #include <inttypes.h> 13 #include <pci.h> 14 #include <dm/lists.h> 15 #include <dm/root.h> 16 #include <dm/device-internal.h> 17 #if defined(CONFIG_X86) && defined(CONFIG_HAVE_FSP) 18 #include <asm/fsp/fsp_support.h> 19 #endif 20 21 DECLARE_GLOBAL_DATA_PTR; 22 23 static int pci_get_bus(int busnum, struct udevice **busp) 24 { 25 int ret; 26 27 ret = uclass_get_device_by_seq(UCLASS_PCI, busnum, busp); 28 29 /* Since buses may not be numbered yet try a little harder with bus 0 */ 30 if (ret == -ENODEV) { 31 ret = uclass_first_device(UCLASS_PCI, busp); 32 if (ret) 33 return ret; 34 else if (!*busp) 35 return -ENODEV; 36 ret = uclass_get_device_by_seq(UCLASS_PCI, busnum, busp); 37 } 38 39 return ret; 40 } 41 42 struct pci_controller *pci_bus_to_hose(int busnum) 43 { 44 struct udevice *bus; 45 int ret; 46 47 ret = pci_get_bus(busnum, &bus); 48 if (ret) { 49 debug("%s: Cannot get bus %d: ret=%d\n", __func__, busnum, ret); 50 return NULL; 51 } 52 53 return dev_get_uclass_priv(bus); 54 } 55 56 pci_dev_t pci_get_bdf(struct udevice *dev) 57 { 58 struct pci_child_platdata *pplat = dev_get_parent_platdata(dev); 59 struct udevice *bus = dev->parent; 60 61 return PCI_ADD_BUS(bus->seq, pplat->devfn); 62 } 63 64 /** 65 * pci_get_bus_max() - returns the bus number of the last active bus 66 * 67 * @return last bus number, or -1 if no active buses 68 */ 69 static int pci_get_bus_max(void) 70 { 71 struct udevice *bus; 72 struct uclass *uc; 73 int ret = -1; 74 75 ret = uclass_get(UCLASS_PCI, &uc); 76 uclass_foreach_dev(bus, uc) { 77 if (bus->seq > ret) 78 ret = bus->seq; 79 } 80 81 debug("%s: ret=%d\n", __func__, ret); 82 83 return ret; 84 } 85 86 int pci_last_busno(void) 87 { 88 struct pci_controller *hose; 89 struct udevice *bus; 90 struct uclass *uc; 91 int ret; 92 93 debug("pci_last_busno\n"); 94 ret = uclass_get(UCLASS_PCI, &uc); 95 if (ret || list_empty(&uc->dev_head)) 96 return -1; 97 98 /* Probe the last bus */ 99 bus = list_entry(uc->dev_head.prev, struct udevice, uclass_node); 100 debug("bus = %p, %s\n", bus, bus->name); 101 assert(bus); 102 ret = device_probe(bus); 103 if (ret) 104 return ret; 105 106 /* If that bus has bridges, we may have new buses now. Get the last */ 107 bus = list_entry(uc->dev_head.prev, struct udevice, uclass_node); 108 hose = dev_get_uclass_priv(bus); 109 debug("bus = %s, hose = %p\n", bus->name, hose); 110 111 return hose->last_busno; 112 } 113 114 int pci_get_ff(enum pci_size_t size) 115 { 116 switch (size) { 117 case PCI_SIZE_8: 118 return 0xff; 119 case PCI_SIZE_16: 120 return 0xffff; 121 default: 122 return 0xffffffff; 123 } 124 } 125 126 int pci_bus_find_devfn(struct udevice *bus, pci_dev_t find_devfn, 127 struct udevice **devp) 128 { 129 struct udevice *dev; 130 131 for (device_find_first_child(bus, &dev); 132 dev; 133 device_find_next_child(&dev)) { 134 struct pci_child_platdata *pplat; 135 136 pplat = dev_get_parent_platdata(dev); 137 if (pplat && pplat->devfn == find_devfn) { 138 *devp = dev; 139 return 0; 140 } 141 } 142 143 return -ENODEV; 144 } 145 146 int pci_bus_find_bdf(pci_dev_t bdf, struct udevice **devp) 147 { 148 struct udevice *bus; 149 int ret; 150 151 ret = pci_get_bus(PCI_BUS(bdf), &bus); 152 if (ret) 153 return ret; 154 return pci_bus_find_devfn(bus, PCI_MASK_BUS(bdf), devp); 155 } 156 157 static int pci_device_matches_ids(struct udevice *dev, 158 struct pci_device_id *ids) 159 { 160 struct pci_child_platdata *pplat; 161 int i; 162 163 pplat = dev_get_parent_platdata(dev); 164 if (!pplat) 165 return -EINVAL; 166 for (i = 0; ids[i].vendor != 0; i++) { 167 if (pplat->vendor == ids[i].vendor && 168 pplat->device == ids[i].device) 169 return i; 170 } 171 172 return -EINVAL; 173 } 174 175 int pci_bus_find_devices(struct udevice *bus, struct pci_device_id *ids, 176 int *indexp, struct udevice **devp) 177 { 178 struct udevice *dev; 179 180 /* Scan all devices on this bus */ 181 for (device_find_first_child(bus, &dev); 182 dev; 183 device_find_next_child(&dev)) { 184 if (pci_device_matches_ids(dev, ids) >= 0) { 185 if ((*indexp)-- <= 0) { 186 *devp = dev; 187 return 0; 188 } 189 } 190 } 191 192 return -ENODEV; 193 } 194 195 int pci_find_device_id(struct pci_device_id *ids, int index, 196 struct udevice **devp) 197 { 198 struct udevice *bus; 199 200 /* Scan all known buses */ 201 for (uclass_first_device(UCLASS_PCI, &bus); 202 bus; 203 uclass_next_device(&bus)) { 204 if (!pci_bus_find_devices(bus, ids, &index, devp)) 205 return 0; 206 } 207 *devp = NULL; 208 209 return -ENODEV; 210 } 211 212 int pci_bus_write_config(struct udevice *bus, pci_dev_t bdf, int offset, 213 unsigned long value, enum pci_size_t size) 214 { 215 struct dm_pci_ops *ops; 216 217 ops = pci_get_ops(bus); 218 if (!ops->write_config) 219 return -ENOSYS; 220 return ops->write_config(bus, bdf, offset, value, size); 221 } 222 223 int pci_write_config(pci_dev_t bdf, int offset, unsigned long value, 224 enum pci_size_t size) 225 { 226 struct udevice *bus; 227 int ret; 228 229 ret = pci_get_bus(PCI_BUS(bdf), &bus); 230 if (ret) 231 return ret; 232 233 return pci_bus_write_config(bus, bdf, offset, value, size); 234 } 235 236 int dm_pci_write_config(struct udevice *dev, int offset, unsigned long value, 237 enum pci_size_t size) 238 { 239 struct udevice *bus; 240 241 for (bus = dev; device_is_on_pci_bus(bus);) 242 bus = bus->parent; 243 return pci_bus_write_config(bus, pci_get_bdf(dev), offset, value, size); 244 } 245 246 247 int pci_write_config32(pci_dev_t bdf, int offset, u32 value) 248 { 249 return pci_write_config(bdf, offset, value, PCI_SIZE_32); 250 } 251 252 int pci_write_config16(pci_dev_t bdf, int offset, u16 value) 253 { 254 return pci_write_config(bdf, offset, value, PCI_SIZE_16); 255 } 256 257 int pci_write_config8(pci_dev_t bdf, int offset, u8 value) 258 { 259 return pci_write_config(bdf, offset, value, PCI_SIZE_8); 260 } 261 262 int dm_pci_write_config8(struct udevice *dev, int offset, u8 value) 263 { 264 return dm_pci_write_config(dev, offset, value, PCI_SIZE_8); 265 } 266 267 int dm_pci_write_config16(struct udevice *dev, int offset, u16 value) 268 { 269 return dm_pci_write_config(dev, offset, value, PCI_SIZE_16); 270 } 271 272 int dm_pci_write_config32(struct udevice *dev, int offset, u32 value) 273 { 274 return dm_pci_write_config(dev, offset, value, PCI_SIZE_32); 275 } 276 277 int pci_bus_read_config(struct udevice *bus, pci_dev_t bdf, int offset, 278 unsigned long *valuep, enum pci_size_t size) 279 { 280 struct dm_pci_ops *ops; 281 282 ops = pci_get_ops(bus); 283 if (!ops->read_config) 284 return -ENOSYS; 285 return ops->read_config(bus, bdf, offset, valuep, size); 286 } 287 288 int pci_read_config(pci_dev_t bdf, int offset, unsigned long *valuep, 289 enum pci_size_t size) 290 { 291 struct udevice *bus; 292 int ret; 293 294 ret = pci_get_bus(PCI_BUS(bdf), &bus); 295 if (ret) 296 return ret; 297 298 return pci_bus_read_config(bus, bdf, offset, valuep, size); 299 } 300 301 int dm_pci_read_config(struct udevice *dev, int offset, unsigned long *valuep, 302 enum pci_size_t size) 303 { 304 struct udevice *bus; 305 306 for (bus = dev; device_is_on_pci_bus(bus);) 307 bus = bus->parent; 308 return pci_bus_read_config(bus, pci_get_bdf(dev), offset, valuep, 309 size); 310 } 311 312 int pci_read_config32(pci_dev_t bdf, int offset, u32 *valuep) 313 { 314 unsigned long value; 315 int ret; 316 317 ret = pci_read_config(bdf, offset, &value, PCI_SIZE_32); 318 if (ret) 319 return ret; 320 *valuep = value; 321 322 return 0; 323 } 324 325 int pci_read_config16(pci_dev_t bdf, int offset, u16 *valuep) 326 { 327 unsigned long value; 328 int ret; 329 330 ret = pci_read_config(bdf, offset, &value, PCI_SIZE_16); 331 if (ret) 332 return ret; 333 *valuep = value; 334 335 return 0; 336 } 337 338 int pci_read_config8(pci_dev_t bdf, int offset, u8 *valuep) 339 { 340 unsigned long value; 341 int ret; 342 343 ret = pci_read_config(bdf, offset, &value, PCI_SIZE_8); 344 if (ret) 345 return ret; 346 *valuep = value; 347 348 return 0; 349 } 350 351 int dm_pci_read_config8(struct udevice *dev, int offset, u8 *valuep) 352 { 353 unsigned long value; 354 int ret; 355 356 ret = dm_pci_read_config(dev, offset, &value, PCI_SIZE_8); 357 if (ret) 358 return ret; 359 *valuep = value; 360 361 return 0; 362 } 363 364 int dm_pci_read_config16(struct udevice *dev, int offset, u16 *valuep) 365 { 366 unsigned long value; 367 int ret; 368 369 ret = dm_pci_read_config(dev, offset, &value, PCI_SIZE_16); 370 if (ret) 371 return ret; 372 *valuep = value; 373 374 return 0; 375 } 376 377 int dm_pci_read_config32(struct udevice *dev, int offset, u32 *valuep) 378 { 379 unsigned long value; 380 int ret; 381 382 ret = dm_pci_read_config(dev, offset, &value, PCI_SIZE_32); 383 if (ret) 384 return ret; 385 *valuep = value; 386 387 return 0; 388 } 389 390 int pci_auto_config_devices(struct udevice *bus) 391 { 392 struct pci_controller *hose = bus->uclass_priv; 393 unsigned int sub_bus; 394 struct udevice *dev; 395 int ret; 396 397 sub_bus = bus->seq; 398 debug("%s: start\n", __func__); 399 pciauto_config_init(hose); 400 for (ret = device_find_first_child(bus, &dev); 401 !ret && dev; 402 ret = device_find_next_child(&dev)) { 403 unsigned int max_bus; 404 int ret; 405 406 debug("%s: device %s\n", __func__, dev->name); 407 ret = pciauto_config_device(hose, pci_get_bdf(dev)); 408 if (ret < 0) 409 return ret; 410 max_bus = ret; 411 sub_bus = max(sub_bus, max_bus); 412 } 413 debug("%s: done\n", __func__); 414 415 return sub_bus; 416 } 417 418 int dm_pci_hose_probe_bus(struct pci_controller *hose, pci_dev_t bdf) 419 { 420 struct udevice *parent, *bus; 421 int sub_bus; 422 int ret; 423 424 debug("%s\n", __func__); 425 parent = hose->bus; 426 427 /* Find the bus within the parent */ 428 ret = pci_bus_find_devfn(parent, PCI_MASK_BUS(bdf), &bus); 429 if (ret) { 430 debug("%s: Cannot find device %x on bus %s: %d\n", __func__, 431 bdf, parent->name, ret); 432 return ret; 433 } 434 435 sub_bus = pci_get_bus_max() + 1; 436 debug("%s: bus = %d/%s\n", __func__, sub_bus, bus->name); 437 pciauto_prescan_setup_bridge(hose, bdf, sub_bus); 438 439 ret = device_probe(bus); 440 if (ret) { 441 debug("%s: Cannot probe bus %s: %d\n", __func__, bus->name, 442 ret); 443 return ret; 444 } 445 if (sub_bus != bus->seq) { 446 printf("%s: Internal error, bus '%s' got seq %d, expected %d\n", 447 __func__, bus->name, bus->seq, sub_bus); 448 return -EPIPE; 449 } 450 sub_bus = pci_get_bus_max(); 451 pciauto_postscan_setup_bridge(hose, bdf, sub_bus); 452 453 return sub_bus; 454 } 455 456 /** 457 * pci_match_one_device - Tell if a PCI device structure has a matching 458 * PCI device id structure 459 * @id: single PCI device id structure to match 460 * @dev: the PCI device structure to match against 461 * 462 * Returns the matching pci_device_id structure or %NULL if there is no match. 463 */ 464 static bool pci_match_one_id(const struct pci_device_id *id, 465 const struct pci_device_id *find) 466 { 467 if ((id->vendor == PCI_ANY_ID || id->vendor == find->vendor) && 468 (id->device == PCI_ANY_ID || id->device == find->device) && 469 (id->subvendor == PCI_ANY_ID || id->subvendor == find->subvendor) && 470 (id->subdevice == PCI_ANY_ID || id->subdevice == find->subdevice) && 471 !((id->class ^ find->class) & id->class_mask)) 472 return true; 473 474 return false; 475 } 476 477 /** 478 * pci_find_and_bind_driver() - Find and bind the right PCI driver 479 * 480 * This only looks at certain fields in the descriptor. 481 */ 482 static int pci_find_and_bind_driver(struct udevice *parent, 483 struct pci_device_id *find_id, pci_dev_t bdf, 484 struct udevice **devp) 485 { 486 struct pci_driver_entry *start, *entry; 487 const char *drv; 488 int n_ents; 489 int ret; 490 char name[30], *str; 491 bool bridge; 492 493 *devp = NULL; 494 495 debug("%s: Searching for driver: vendor=%x, device=%x\n", __func__, 496 find_id->vendor, find_id->device); 497 start = ll_entry_start(struct pci_driver_entry, pci_driver_entry); 498 n_ents = ll_entry_count(struct pci_driver_entry, pci_driver_entry); 499 for (entry = start; entry != start + n_ents; entry++) { 500 const struct pci_device_id *id; 501 struct udevice *dev; 502 const struct driver *drv; 503 504 for (id = entry->match; 505 id->vendor || id->subvendor || id->class_mask; 506 id++) { 507 if (!pci_match_one_id(id, find_id)) 508 continue; 509 510 drv = entry->driver; 511 512 /* 513 * In the pre-relocation phase, we only bind devices 514 * whose driver has the DM_FLAG_PRE_RELOC set, to save 515 * precious memory space as on some platforms as that 516 * space is pretty limited (ie: using Cache As RAM). 517 */ 518 if (!(gd->flags & GD_FLG_RELOC) && 519 !(drv->flags & DM_FLAG_PRE_RELOC)) 520 return 0; 521 522 /* 523 * We could pass the descriptor to the driver as 524 * platdata (instead of NULL) and allow its bind() 525 * method to return -ENOENT if it doesn't support this 526 * device. That way we could continue the search to 527 * find another driver. For now this doesn't seem 528 * necesssary, so just bind the first match. 529 */ 530 ret = device_bind(parent, drv, drv->name, NULL, -1, 531 &dev); 532 if (ret) 533 goto error; 534 debug("%s: Match found: %s\n", __func__, drv->name); 535 dev->driver_data = find_id->driver_data; 536 *devp = dev; 537 return 0; 538 } 539 } 540 541 bridge = (find_id->class >> 8) == PCI_CLASS_BRIDGE_PCI; 542 /* 543 * In the pre-relocation phase, we only bind bridge devices to save 544 * precious memory space as on some platforms as that space is pretty 545 * limited (ie: using Cache As RAM). 546 */ 547 if (!(gd->flags & GD_FLG_RELOC) && !bridge) 548 return 0; 549 550 /* Bind a generic driver so that the device can be used */ 551 sprintf(name, "pci_%x:%x.%x", parent->seq, PCI_DEV(bdf), 552 PCI_FUNC(bdf)); 553 str = strdup(name); 554 if (!str) 555 return -ENOMEM; 556 drv = bridge ? "pci_bridge_drv" : "pci_generic_drv"; 557 558 ret = device_bind_driver(parent, drv, str, devp); 559 if (ret) { 560 debug("%s: Failed to bind generic driver: %d\n", __func__, ret); 561 return ret; 562 } 563 debug("%s: No match found: bound generic driver instead\n", __func__); 564 565 return 0; 566 567 error: 568 debug("%s: No match found: error %d\n", __func__, ret); 569 return ret; 570 } 571 572 int pci_bind_bus_devices(struct udevice *bus) 573 { 574 ulong vendor, device; 575 ulong header_type; 576 pci_dev_t bdf, end; 577 bool found_multi; 578 int ret; 579 580 found_multi = false; 581 end = PCI_BDF(bus->seq, PCI_MAX_PCI_DEVICES - 1, 582 PCI_MAX_PCI_FUNCTIONS - 1); 583 for (bdf = PCI_BDF(bus->seq, 0, 0); bdf < end; 584 bdf += PCI_BDF(0, 0, 1)) { 585 struct pci_child_platdata *pplat; 586 struct udevice *dev; 587 ulong class; 588 589 if (PCI_FUNC(bdf) && !found_multi) 590 continue; 591 /* Check only the first access, we don't expect problems */ 592 ret = pci_bus_read_config(bus, bdf, PCI_HEADER_TYPE, 593 &header_type, PCI_SIZE_8); 594 if (ret) 595 goto error; 596 pci_bus_read_config(bus, bdf, PCI_VENDOR_ID, &vendor, 597 PCI_SIZE_16); 598 if (vendor == 0xffff || vendor == 0x0000) 599 continue; 600 601 if (!PCI_FUNC(bdf)) 602 found_multi = header_type & 0x80; 603 604 debug("%s: bus %d/%s: found device %x, function %d\n", __func__, 605 bus->seq, bus->name, PCI_DEV(bdf), PCI_FUNC(bdf)); 606 pci_bus_read_config(bus, bdf, PCI_DEVICE_ID, &device, 607 PCI_SIZE_16); 608 pci_bus_read_config(bus, bdf, PCI_CLASS_REVISION, &class, 609 PCI_SIZE_32); 610 class >>= 8; 611 612 /* Find this device in the device tree */ 613 ret = pci_bus_find_devfn(bus, PCI_MASK_BUS(bdf), &dev); 614 615 /* Search for a driver */ 616 617 /* If nothing in the device tree, bind a generic device */ 618 if (ret == -ENODEV) { 619 struct pci_device_id find_id; 620 ulong val; 621 622 memset(&find_id, '\0', sizeof(find_id)); 623 find_id.vendor = vendor; 624 find_id.device = device; 625 find_id.class = class; 626 if ((header_type & 0x7f) == PCI_HEADER_TYPE_NORMAL) { 627 pci_bus_read_config(bus, bdf, 628 PCI_SUBSYSTEM_VENDOR_ID, 629 &val, PCI_SIZE_32); 630 find_id.subvendor = val & 0xffff; 631 find_id.subdevice = val >> 16; 632 } 633 ret = pci_find_and_bind_driver(bus, &find_id, bdf, 634 &dev); 635 } 636 if (ret) 637 return ret; 638 639 /* Update the platform data */ 640 if (dev) { 641 pplat = dev_get_parent_platdata(dev); 642 pplat->devfn = PCI_MASK_BUS(bdf); 643 pplat->vendor = vendor; 644 pplat->device = device; 645 pplat->class = class; 646 } 647 } 648 649 return 0; 650 error: 651 printf("Cannot read bus configuration: %d\n", ret); 652 653 return ret; 654 } 655 656 static int pci_uclass_post_bind(struct udevice *bus) 657 { 658 /* 659 * If there is no pci device listed in the device tree, 660 * don't bother scanning the device tree. 661 */ 662 if (bus->of_offset == -1) 663 return 0; 664 665 /* 666 * Scan the device tree for devices. This does not probe the PCI bus, 667 * as this is not permitted while binding. It just finds devices 668 * mentioned in the device tree. 669 * 670 * Before relocation, only bind devices marked for pre-relocation 671 * use. 672 */ 673 return dm_scan_fdt_node(bus, gd->fdt_blob, bus->of_offset, 674 gd->flags & GD_FLG_RELOC ? false : true); 675 } 676 677 static int decode_regions(struct pci_controller *hose, const void *blob, 678 int parent_node, int node) 679 { 680 int pci_addr_cells, addr_cells, size_cells; 681 int cells_per_record; 682 phys_addr_t addr; 683 const u32 *prop; 684 int len; 685 int i; 686 687 prop = fdt_getprop(blob, node, "ranges", &len); 688 if (!prop) 689 return -EINVAL; 690 pci_addr_cells = fdt_address_cells(blob, node); 691 addr_cells = fdt_address_cells(blob, parent_node); 692 size_cells = fdt_size_cells(blob, node); 693 694 /* PCI addresses are always 3-cells */ 695 len /= sizeof(u32); 696 cells_per_record = pci_addr_cells + addr_cells + size_cells; 697 hose->region_count = 0; 698 debug("%s: len=%d, cells_per_record=%d\n", __func__, len, 699 cells_per_record); 700 for (i = 0; i < MAX_PCI_REGIONS; i++, len -= cells_per_record) { 701 u64 pci_addr, addr, size; 702 int space_code; 703 u32 flags; 704 int type; 705 706 if (len < cells_per_record) 707 break; 708 flags = fdt32_to_cpu(prop[0]); 709 space_code = (flags >> 24) & 3; 710 pci_addr = fdtdec_get_number(prop + 1, 2); 711 prop += pci_addr_cells; 712 addr = fdtdec_get_number(prop, addr_cells); 713 prop += addr_cells; 714 size = fdtdec_get_number(prop, size_cells); 715 prop += size_cells; 716 debug("%s: region %d, pci_addr=%" PRIx64 ", addr=%" PRIx64 717 ", size=%" PRIx64 ", space_code=%d\n", __func__, 718 hose->region_count, pci_addr, addr, size, space_code); 719 if (space_code & 2) { 720 type = flags & (1U << 30) ? PCI_REGION_PREFETCH : 721 PCI_REGION_MEM; 722 } else if (space_code & 1) { 723 type = PCI_REGION_IO; 724 } else { 725 continue; 726 } 727 debug(" - type=%d\n", type); 728 pci_set_region(hose->regions + hose->region_count++, pci_addr, 729 addr, size, type); 730 } 731 732 /* Add a region for our local memory */ 733 addr = gd->ram_size; 734 if (gd->pci_ram_top && gd->pci_ram_top < addr) 735 addr = gd->pci_ram_top; 736 pci_set_region(hose->regions + hose->region_count++, 0, 0, addr, 737 PCI_REGION_MEM | PCI_REGION_SYS_MEMORY); 738 739 return 0; 740 } 741 742 static int pci_uclass_pre_probe(struct udevice *bus) 743 { 744 struct pci_controller *hose; 745 int ret; 746 747 debug("%s, bus=%d/%s, parent=%s\n", __func__, bus->seq, bus->name, 748 bus->parent->name); 749 hose = bus->uclass_priv; 750 751 /* For bridges, use the top-level PCI controller */ 752 if (device_get_uclass_id(bus->parent) == UCLASS_ROOT) { 753 hose->ctlr = bus; 754 ret = decode_regions(hose, gd->fdt_blob, bus->parent->of_offset, 755 bus->of_offset); 756 if (ret) { 757 debug("%s: Cannot decode regions\n", __func__); 758 return ret; 759 } 760 } else { 761 struct pci_controller *parent_hose; 762 763 parent_hose = dev_get_uclass_priv(bus->parent); 764 hose->ctlr = parent_hose->bus; 765 } 766 hose->bus = bus; 767 hose->first_busno = bus->seq; 768 hose->last_busno = bus->seq; 769 770 return 0; 771 } 772 773 static int pci_uclass_post_probe(struct udevice *bus) 774 { 775 int ret; 776 777 debug("%s: probing bus %d\n", __func__, bus->seq); 778 ret = pci_bind_bus_devices(bus); 779 if (ret) 780 return ret; 781 782 #ifdef CONFIG_PCI_PNP 783 ret = pci_auto_config_devices(bus); 784 if (ret < 0) 785 return ret; 786 #endif 787 788 #if defined(CONFIG_X86) && defined(CONFIG_HAVE_FSP) 789 /* 790 * Per Intel FSP specification, we should call FSP notify API to 791 * inform FSP that PCI enumeration has been done so that FSP will 792 * do any necessary initialization as required by the chipset's 793 * BIOS Writer's Guide (BWG). 794 * 795 * Unfortunately we have to put this call here as with driver model, 796 * the enumeration is all done on a lazy basis as needed, so until 797 * something is touched on PCI it won't happen. 798 * 799 * Note we only call this 1) after U-Boot is relocated, and 2) 800 * root bus has finished probing. 801 */ 802 if ((gd->flags & GD_FLG_RELOC) && (bus->seq == 0)) { 803 ret = fsp_init_phase_pci(); 804 if (ret) 805 return ret; 806 } 807 #endif 808 809 return 0; 810 } 811 812 static int pci_uclass_child_post_bind(struct udevice *dev) 813 { 814 struct pci_child_platdata *pplat; 815 struct fdt_pci_addr addr; 816 int ret; 817 818 if (dev->of_offset == -1) 819 return 0; 820 821 /* 822 * We could read vendor, device, class if available. But for now we 823 * just check the address. 824 */ 825 pplat = dev_get_parent_platdata(dev); 826 ret = fdtdec_get_pci_addr(gd->fdt_blob, dev->of_offset, 827 FDT_PCI_SPACE_CONFIG, "reg", &addr); 828 829 if (ret) { 830 if (ret != -ENOENT) 831 return -EINVAL; 832 } else { 833 /* extract the devfn from fdt_pci_addr */ 834 pplat->devfn = addr.phys_hi & 0xff00; 835 } 836 837 return 0; 838 } 839 840 static int pci_bridge_read_config(struct udevice *bus, pci_dev_t bdf, 841 uint offset, ulong *valuep, 842 enum pci_size_t size) 843 { 844 struct pci_controller *hose = bus->uclass_priv; 845 846 return pci_bus_read_config(hose->ctlr, bdf, offset, valuep, size); 847 } 848 849 static int pci_bridge_write_config(struct udevice *bus, pci_dev_t bdf, 850 uint offset, ulong value, 851 enum pci_size_t size) 852 { 853 struct pci_controller *hose = bus->uclass_priv; 854 855 return pci_bus_write_config(hose->ctlr, bdf, offset, value, size); 856 } 857 858 static int skip_to_next_device(struct udevice *bus, struct udevice **devp) 859 { 860 struct udevice *dev; 861 int ret = 0; 862 863 /* 864 * Scan through all the PCI controllers. On x86 there will only be one 865 * but that is not necessarily true on other hardware. 866 */ 867 do { 868 device_find_first_child(bus, &dev); 869 if (dev) { 870 *devp = dev; 871 return 0; 872 } 873 ret = uclass_next_device(&bus); 874 if (ret) 875 return ret; 876 } while (bus); 877 878 return 0; 879 } 880 881 int pci_find_next_device(struct udevice **devp) 882 { 883 struct udevice *child = *devp; 884 struct udevice *bus = child->parent; 885 int ret; 886 887 /* First try all the siblings */ 888 *devp = NULL; 889 while (child) { 890 device_find_next_child(&child); 891 if (child) { 892 *devp = child; 893 return 0; 894 } 895 } 896 897 /* We ran out of siblings. Try the next bus */ 898 ret = uclass_next_device(&bus); 899 if (ret) 900 return ret; 901 902 return bus ? skip_to_next_device(bus, devp) : 0; 903 } 904 905 int pci_find_first_device(struct udevice **devp) 906 { 907 struct udevice *bus; 908 int ret; 909 910 *devp = NULL; 911 ret = uclass_first_device(UCLASS_PCI, &bus); 912 if (ret) 913 return ret; 914 915 return skip_to_next_device(bus, devp); 916 } 917 918 UCLASS_DRIVER(pci) = { 919 .id = UCLASS_PCI, 920 .name = "pci", 921 .flags = DM_UC_FLAG_SEQ_ALIAS, 922 .post_bind = pci_uclass_post_bind, 923 .pre_probe = pci_uclass_pre_probe, 924 .post_probe = pci_uclass_post_probe, 925 .child_post_bind = pci_uclass_child_post_bind, 926 .per_device_auto_alloc_size = sizeof(struct pci_controller), 927 .per_child_platdata_auto_alloc_size = 928 sizeof(struct pci_child_platdata), 929 }; 930 931 static const struct dm_pci_ops pci_bridge_ops = { 932 .read_config = pci_bridge_read_config, 933 .write_config = pci_bridge_write_config, 934 }; 935 936 static const struct udevice_id pci_bridge_ids[] = { 937 { .compatible = "pci-bridge" }, 938 { } 939 }; 940 941 U_BOOT_DRIVER(pci_bridge_drv) = { 942 .name = "pci_bridge_drv", 943 .id = UCLASS_PCI, 944 .of_match = pci_bridge_ids, 945 .ops = &pci_bridge_ops, 946 }; 947 948 UCLASS_DRIVER(pci_generic) = { 949 .id = UCLASS_PCI_GENERIC, 950 .name = "pci_generic", 951 }; 952 953 static const struct udevice_id pci_generic_ids[] = { 954 { .compatible = "pci-generic" }, 955 { } 956 }; 957 958 U_BOOT_DRIVER(pci_generic_drv) = { 959 .name = "pci_generic_drv", 960 .id = UCLASS_PCI_GENERIC, 961 .of_match = pci_generic_ids, 962 }; 963