1 /* 2 * Sonics Silicon Backplane 3 * Subsystem core 4 * 5 * Copyright 2005, Broadcom Corporation 6 * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de> 7 * 8 * Licensed under the GNU/GPL. See COPYING for details. 9 */ 10 11 #include "ssb_private.h" 12 13 #include <linux/delay.h> 14 #include <linux/io.h> 15 #include <linux/ssb/ssb.h> 16 #include <linux/ssb/ssb_regs.h> 17 #include <linux/ssb/ssb_driver_gige.h> 18 #include <linux/dma-mapping.h> 19 #include <linux/pci.h> 20 #include <linux/mmc/sdio_func.h> 21 #include <linux/slab.h> 22 23 #include <pcmcia/cistpl.h> 24 #include <pcmcia/ds.h> 25 26 27 MODULE_DESCRIPTION("Sonics Silicon Backplane driver"); 28 MODULE_LICENSE("GPL"); 29 30 31 /* Temporary list of yet-to-be-attached buses */ 32 static LIST_HEAD(attach_queue); 33 /* List if running buses */ 34 static LIST_HEAD(buses); 35 /* Software ID counter */ 36 static unsigned int next_busnumber; 37 /* buses_mutes locks the two buslists and the next_busnumber. 38 * Don't lock this directly, but use ssb_buses_[un]lock() below. */ 39 static DEFINE_MUTEX(buses_mutex); 40 41 /* There are differences in the codeflow, if the bus is 42 * initialized from early boot, as various needed services 43 * are not available early. This is a mechanism to delay 44 * these initializations to after early boot has finished. 45 * It's also used to avoid mutex locking, as that's not 46 * available and needed early. */ 47 static bool ssb_is_early_boot = 1; 48 49 static void ssb_buses_lock(void); 50 static void ssb_buses_unlock(void); 51 52 53 #ifdef CONFIG_SSB_PCIHOST 54 struct ssb_bus *ssb_pci_dev_to_bus(struct pci_dev *pdev) 55 { 56 struct ssb_bus *bus; 57 58 ssb_buses_lock(); 59 list_for_each_entry(bus, &buses, list) { 60 if (bus->bustype == SSB_BUSTYPE_PCI && 61 bus->host_pci == pdev) 62 goto found; 63 } 64 bus = NULL; 65 found: 66 ssb_buses_unlock(); 67 68 return bus; 69 } 70 #endif /* CONFIG_SSB_PCIHOST */ 71 72 #ifdef CONFIG_SSB_PCMCIAHOST 73 struct ssb_bus *ssb_pcmcia_dev_to_bus(struct pcmcia_device *pdev) 74 { 75 struct ssb_bus *bus; 76 77 ssb_buses_lock(); 78 list_for_each_entry(bus, &buses, list) { 79 if (bus->bustype == SSB_BUSTYPE_PCMCIA && 80 bus->host_pcmcia == pdev) 81 goto found; 82 } 83 bus = NULL; 84 found: 85 ssb_buses_unlock(); 86 87 return bus; 88 } 89 #endif /* CONFIG_SSB_PCMCIAHOST */ 90 91 #ifdef CONFIG_SSB_SDIOHOST 92 struct ssb_bus *ssb_sdio_func_to_bus(struct sdio_func *func) 93 { 94 struct ssb_bus *bus; 95 96 ssb_buses_lock(); 97 list_for_each_entry(bus, &buses, list) { 98 if (bus->bustype == SSB_BUSTYPE_SDIO && 99 bus->host_sdio == func) 100 goto found; 101 } 102 bus = NULL; 103 found: 104 ssb_buses_unlock(); 105 106 return bus; 107 } 108 #endif /* CONFIG_SSB_SDIOHOST */ 109 110 int ssb_for_each_bus_call(unsigned long data, 111 int (*func)(struct ssb_bus *bus, unsigned long data)) 112 { 113 struct ssb_bus *bus; 114 int res; 115 116 ssb_buses_lock(); 117 list_for_each_entry(bus, &buses, list) { 118 res = func(bus, data); 119 if (res >= 0) { 120 ssb_buses_unlock(); 121 return res; 122 } 123 } 124 ssb_buses_unlock(); 125 126 return -ENODEV; 127 } 128 129 static struct ssb_device *ssb_device_get(struct ssb_device *dev) 130 { 131 if (dev) 132 get_device(dev->dev); 133 return dev; 134 } 135 136 static void ssb_device_put(struct ssb_device *dev) 137 { 138 if (dev) 139 put_device(dev->dev); 140 } 141 142 static inline struct ssb_driver *ssb_driver_get(struct ssb_driver *drv) 143 { 144 if (drv) 145 get_driver(&drv->drv); 146 return drv; 147 } 148 149 static inline void ssb_driver_put(struct ssb_driver *drv) 150 { 151 if (drv) 152 put_driver(&drv->drv); 153 } 154 155 static int ssb_device_resume(struct device *dev) 156 { 157 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 158 struct ssb_driver *ssb_drv; 159 int err = 0; 160 161 if (dev->driver) { 162 ssb_drv = drv_to_ssb_drv(dev->driver); 163 if (ssb_drv && ssb_drv->resume) 164 err = ssb_drv->resume(ssb_dev); 165 if (err) 166 goto out; 167 } 168 out: 169 return err; 170 } 171 172 static int ssb_device_suspend(struct device *dev, pm_message_t state) 173 { 174 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 175 struct ssb_driver *ssb_drv; 176 int err = 0; 177 178 if (dev->driver) { 179 ssb_drv = drv_to_ssb_drv(dev->driver); 180 if (ssb_drv && ssb_drv->suspend) 181 err = ssb_drv->suspend(ssb_dev, state); 182 if (err) 183 goto out; 184 } 185 out: 186 return err; 187 } 188 189 int ssb_bus_resume(struct ssb_bus *bus) 190 { 191 int err; 192 193 /* Reset HW state information in memory, so that HW is 194 * completely reinitialized. */ 195 bus->mapped_device = NULL; 196 #ifdef CONFIG_SSB_DRIVER_PCICORE 197 bus->pcicore.setup_done = 0; 198 #endif 199 200 err = ssb_bus_powerup(bus, 0); 201 if (err) 202 return err; 203 err = ssb_pcmcia_hardware_setup(bus); 204 if (err) { 205 ssb_bus_may_powerdown(bus); 206 return err; 207 } 208 ssb_chipco_resume(&bus->chipco); 209 ssb_bus_may_powerdown(bus); 210 211 return 0; 212 } 213 EXPORT_SYMBOL(ssb_bus_resume); 214 215 int ssb_bus_suspend(struct ssb_bus *bus) 216 { 217 ssb_chipco_suspend(&bus->chipco); 218 ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0); 219 220 return 0; 221 } 222 EXPORT_SYMBOL(ssb_bus_suspend); 223 224 #ifdef CONFIG_SSB_SPROM 225 /** ssb_devices_freeze - Freeze all devices on the bus. 226 * 227 * After freezing no device driver will be handling a device 228 * on this bus anymore. ssb_devices_thaw() must be called after 229 * a successful freeze to reactivate the devices. 230 * 231 * @bus: The bus. 232 * @ctx: Context structure. Pass this to ssb_devices_thaw(). 233 */ 234 int ssb_devices_freeze(struct ssb_bus *bus, struct ssb_freeze_context *ctx) 235 { 236 struct ssb_device *sdev; 237 struct ssb_driver *sdrv; 238 unsigned int i; 239 240 memset(ctx, 0, sizeof(*ctx)); 241 ctx->bus = bus; 242 SSB_WARN_ON(bus->nr_devices > ARRAY_SIZE(ctx->device_frozen)); 243 244 for (i = 0; i < bus->nr_devices; i++) { 245 sdev = ssb_device_get(&bus->devices[i]); 246 247 if (!sdev->dev || !sdev->dev->driver || 248 !device_is_registered(sdev->dev)) { 249 ssb_device_put(sdev); 250 continue; 251 } 252 sdrv = ssb_driver_get(drv_to_ssb_drv(sdev->dev->driver)); 253 if (!sdrv || SSB_WARN_ON(!sdrv->remove)) { 254 ssb_device_put(sdev); 255 continue; 256 } 257 sdrv->remove(sdev); 258 ctx->device_frozen[i] = 1; 259 } 260 261 return 0; 262 } 263 264 /** ssb_devices_thaw - Unfreeze all devices on the bus. 265 * 266 * This will re-attach the device drivers and re-init the devices. 267 * 268 * @ctx: The context structure from ssb_devices_freeze() 269 */ 270 int ssb_devices_thaw(struct ssb_freeze_context *ctx) 271 { 272 struct ssb_bus *bus = ctx->bus; 273 struct ssb_device *sdev; 274 struct ssb_driver *sdrv; 275 unsigned int i; 276 int err, result = 0; 277 278 for (i = 0; i < bus->nr_devices; i++) { 279 if (!ctx->device_frozen[i]) 280 continue; 281 sdev = &bus->devices[i]; 282 283 if (SSB_WARN_ON(!sdev->dev || !sdev->dev->driver)) 284 continue; 285 sdrv = drv_to_ssb_drv(sdev->dev->driver); 286 if (SSB_WARN_ON(!sdrv || !sdrv->probe)) 287 continue; 288 289 err = sdrv->probe(sdev, &sdev->id); 290 if (err) { 291 ssb_printk(KERN_ERR PFX "Failed to thaw device %s\n", 292 dev_name(sdev->dev)); 293 result = err; 294 } 295 ssb_driver_put(sdrv); 296 ssb_device_put(sdev); 297 } 298 299 return result; 300 } 301 #endif /* CONFIG_SSB_SPROM */ 302 303 static void ssb_device_shutdown(struct device *dev) 304 { 305 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 306 struct ssb_driver *ssb_drv; 307 308 if (!dev->driver) 309 return; 310 ssb_drv = drv_to_ssb_drv(dev->driver); 311 if (ssb_drv && ssb_drv->shutdown) 312 ssb_drv->shutdown(ssb_dev); 313 } 314 315 static int ssb_device_remove(struct device *dev) 316 { 317 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 318 struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver); 319 320 if (ssb_drv && ssb_drv->remove) 321 ssb_drv->remove(ssb_dev); 322 ssb_device_put(ssb_dev); 323 324 return 0; 325 } 326 327 static int ssb_device_probe(struct device *dev) 328 { 329 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 330 struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver); 331 int err = 0; 332 333 ssb_device_get(ssb_dev); 334 if (ssb_drv && ssb_drv->probe) 335 err = ssb_drv->probe(ssb_dev, &ssb_dev->id); 336 if (err) 337 ssb_device_put(ssb_dev); 338 339 return err; 340 } 341 342 static int ssb_match_devid(const struct ssb_device_id *tabid, 343 const struct ssb_device_id *devid) 344 { 345 if ((tabid->vendor != devid->vendor) && 346 tabid->vendor != SSB_ANY_VENDOR) 347 return 0; 348 if ((tabid->coreid != devid->coreid) && 349 tabid->coreid != SSB_ANY_ID) 350 return 0; 351 if ((tabid->revision != devid->revision) && 352 tabid->revision != SSB_ANY_REV) 353 return 0; 354 return 1; 355 } 356 357 static int ssb_bus_match(struct device *dev, struct device_driver *drv) 358 { 359 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 360 struct ssb_driver *ssb_drv = drv_to_ssb_drv(drv); 361 const struct ssb_device_id *id; 362 363 for (id = ssb_drv->id_table; 364 id->vendor || id->coreid || id->revision; 365 id++) { 366 if (ssb_match_devid(id, &ssb_dev->id)) 367 return 1; /* found */ 368 } 369 370 return 0; 371 } 372 373 static int ssb_device_uevent(struct device *dev, struct kobj_uevent_env *env) 374 { 375 struct ssb_device *ssb_dev = dev_to_ssb_dev(dev); 376 377 if (!dev) 378 return -ENODEV; 379 380 return add_uevent_var(env, 381 "MODALIAS=ssb:v%04Xid%04Xrev%02X", 382 ssb_dev->id.vendor, ssb_dev->id.coreid, 383 ssb_dev->id.revision); 384 } 385 386 #define ssb_config_attr(attrib, field, format_string) \ 387 static ssize_t \ 388 attrib##_show(struct device *dev, struct device_attribute *attr, char *buf) \ 389 { \ 390 return sprintf(buf, format_string, dev_to_ssb_dev(dev)->field); \ 391 } 392 393 ssb_config_attr(core_num, core_index, "%u\n") 394 ssb_config_attr(coreid, id.coreid, "0x%04x\n") 395 ssb_config_attr(vendor, id.vendor, "0x%04x\n") 396 ssb_config_attr(revision, id.revision, "%u\n") 397 ssb_config_attr(irq, irq, "%u\n") 398 static ssize_t 399 name_show(struct device *dev, struct device_attribute *attr, char *buf) 400 { 401 return sprintf(buf, "%s\n", 402 ssb_core_name(dev_to_ssb_dev(dev)->id.coreid)); 403 } 404 405 static struct device_attribute ssb_device_attrs[] = { 406 __ATTR_RO(name), 407 __ATTR_RO(core_num), 408 __ATTR_RO(coreid), 409 __ATTR_RO(vendor), 410 __ATTR_RO(revision), 411 __ATTR_RO(irq), 412 __ATTR_NULL, 413 }; 414 415 static struct bus_type ssb_bustype = { 416 .name = "ssb", 417 .match = ssb_bus_match, 418 .probe = ssb_device_probe, 419 .remove = ssb_device_remove, 420 .shutdown = ssb_device_shutdown, 421 .suspend = ssb_device_suspend, 422 .resume = ssb_device_resume, 423 .uevent = ssb_device_uevent, 424 .dev_attrs = ssb_device_attrs, 425 }; 426 427 static void ssb_buses_lock(void) 428 { 429 /* See the comment at the ssb_is_early_boot definition */ 430 if (!ssb_is_early_boot) 431 mutex_lock(&buses_mutex); 432 } 433 434 static void ssb_buses_unlock(void) 435 { 436 /* See the comment at the ssb_is_early_boot definition */ 437 if (!ssb_is_early_boot) 438 mutex_unlock(&buses_mutex); 439 } 440 441 static void ssb_devices_unregister(struct ssb_bus *bus) 442 { 443 struct ssb_device *sdev; 444 int i; 445 446 for (i = bus->nr_devices - 1; i >= 0; i--) { 447 sdev = &(bus->devices[i]); 448 if (sdev->dev) 449 device_unregister(sdev->dev); 450 } 451 } 452 453 void ssb_bus_unregister(struct ssb_bus *bus) 454 { 455 ssb_buses_lock(); 456 ssb_devices_unregister(bus); 457 list_del(&bus->list); 458 ssb_buses_unlock(); 459 460 ssb_pcmcia_exit(bus); 461 ssb_pci_exit(bus); 462 ssb_iounmap(bus); 463 } 464 EXPORT_SYMBOL(ssb_bus_unregister); 465 466 static void ssb_release_dev(struct device *dev) 467 { 468 struct __ssb_dev_wrapper *devwrap; 469 470 devwrap = container_of(dev, struct __ssb_dev_wrapper, dev); 471 kfree(devwrap); 472 } 473 474 static int ssb_devices_register(struct ssb_bus *bus) 475 { 476 struct ssb_device *sdev; 477 struct device *dev; 478 struct __ssb_dev_wrapper *devwrap; 479 int i, err = 0; 480 int dev_idx = 0; 481 482 for (i = 0; i < bus->nr_devices; i++) { 483 sdev = &(bus->devices[i]); 484 485 /* We don't register SSB-system devices to the kernel, 486 * as the drivers for them are built into SSB. */ 487 switch (sdev->id.coreid) { 488 case SSB_DEV_CHIPCOMMON: 489 case SSB_DEV_PCI: 490 case SSB_DEV_PCIE: 491 case SSB_DEV_PCMCIA: 492 case SSB_DEV_MIPS: 493 case SSB_DEV_MIPS_3302: 494 case SSB_DEV_EXTIF: 495 continue; 496 } 497 498 devwrap = kzalloc(sizeof(*devwrap), GFP_KERNEL); 499 if (!devwrap) { 500 ssb_printk(KERN_ERR PFX 501 "Could not allocate device\n"); 502 err = -ENOMEM; 503 goto error; 504 } 505 dev = &devwrap->dev; 506 devwrap->sdev = sdev; 507 508 dev->release = ssb_release_dev; 509 dev->bus = &ssb_bustype; 510 dev_set_name(dev, "ssb%u:%d", bus->busnumber, dev_idx); 511 512 switch (bus->bustype) { 513 case SSB_BUSTYPE_PCI: 514 #ifdef CONFIG_SSB_PCIHOST 515 sdev->irq = bus->host_pci->irq; 516 dev->parent = &bus->host_pci->dev; 517 sdev->dma_dev = dev->parent; 518 #endif 519 break; 520 case SSB_BUSTYPE_PCMCIA: 521 #ifdef CONFIG_SSB_PCMCIAHOST 522 sdev->irq = bus->host_pcmcia->irq; 523 dev->parent = &bus->host_pcmcia->dev; 524 #endif 525 break; 526 case SSB_BUSTYPE_SDIO: 527 #ifdef CONFIG_SSB_SDIOHOST 528 dev->parent = &bus->host_sdio->dev; 529 #endif 530 break; 531 case SSB_BUSTYPE_SSB: 532 dev->dma_mask = &dev->coherent_dma_mask; 533 sdev->dma_dev = dev; 534 break; 535 } 536 537 sdev->dev = dev; 538 err = device_register(dev); 539 if (err) { 540 ssb_printk(KERN_ERR PFX 541 "Could not register %s\n", 542 dev_name(dev)); 543 /* Set dev to NULL to not unregister 544 * dev on error unwinding. */ 545 sdev->dev = NULL; 546 kfree(devwrap); 547 goto error; 548 } 549 dev_idx++; 550 } 551 552 return 0; 553 error: 554 /* Unwind the already registered devices. */ 555 ssb_devices_unregister(bus); 556 return err; 557 } 558 559 /* Needs ssb_buses_lock() */ 560 static int ssb_attach_queued_buses(void) 561 { 562 struct ssb_bus *bus, *n; 563 int err = 0; 564 int drop_them_all = 0; 565 566 list_for_each_entry_safe(bus, n, &attach_queue, list) { 567 if (drop_them_all) { 568 list_del(&bus->list); 569 continue; 570 } 571 /* Can't init the PCIcore in ssb_bus_register(), as that 572 * is too early in boot for embedded systems 573 * (no udelay() available). So do it here in attach stage. 574 */ 575 err = ssb_bus_powerup(bus, 0); 576 if (err) 577 goto error; 578 ssb_pcicore_init(&bus->pcicore); 579 ssb_bus_may_powerdown(bus); 580 581 err = ssb_devices_register(bus); 582 error: 583 if (err) { 584 drop_them_all = 1; 585 list_del(&bus->list); 586 continue; 587 } 588 list_move_tail(&bus->list, &buses); 589 } 590 591 return err; 592 } 593 594 static u8 ssb_ssb_read8(struct ssb_device *dev, u16 offset) 595 { 596 struct ssb_bus *bus = dev->bus; 597 598 offset += dev->core_index * SSB_CORE_SIZE; 599 return readb(bus->mmio + offset); 600 } 601 602 static u16 ssb_ssb_read16(struct ssb_device *dev, u16 offset) 603 { 604 struct ssb_bus *bus = dev->bus; 605 606 offset += dev->core_index * SSB_CORE_SIZE; 607 return readw(bus->mmio + offset); 608 } 609 610 static u32 ssb_ssb_read32(struct ssb_device *dev, u16 offset) 611 { 612 struct ssb_bus *bus = dev->bus; 613 614 offset += dev->core_index * SSB_CORE_SIZE; 615 return readl(bus->mmio + offset); 616 } 617 618 #ifdef CONFIG_SSB_BLOCKIO 619 static void ssb_ssb_block_read(struct ssb_device *dev, void *buffer, 620 size_t count, u16 offset, u8 reg_width) 621 { 622 struct ssb_bus *bus = dev->bus; 623 void __iomem *addr; 624 625 offset += dev->core_index * SSB_CORE_SIZE; 626 addr = bus->mmio + offset; 627 628 switch (reg_width) { 629 case sizeof(u8): { 630 u8 *buf = buffer; 631 632 while (count) { 633 *buf = __raw_readb(addr); 634 buf++; 635 count--; 636 } 637 break; 638 } 639 case sizeof(u16): { 640 __le16 *buf = buffer; 641 642 SSB_WARN_ON(count & 1); 643 while (count) { 644 *buf = (__force __le16)__raw_readw(addr); 645 buf++; 646 count -= 2; 647 } 648 break; 649 } 650 case sizeof(u32): { 651 __le32 *buf = buffer; 652 653 SSB_WARN_ON(count & 3); 654 while (count) { 655 *buf = (__force __le32)__raw_readl(addr); 656 buf++; 657 count -= 4; 658 } 659 break; 660 } 661 default: 662 SSB_WARN_ON(1); 663 } 664 } 665 #endif /* CONFIG_SSB_BLOCKIO */ 666 667 static void ssb_ssb_write8(struct ssb_device *dev, u16 offset, u8 value) 668 { 669 struct ssb_bus *bus = dev->bus; 670 671 offset += dev->core_index * SSB_CORE_SIZE; 672 writeb(value, bus->mmio + offset); 673 } 674 675 static void ssb_ssb_write16(struct ssb_device *dev, u16 offset, u16 value) 676 { 677 struct ssb_bus *bus = dev->bus; 678 679 offset += dev->core_index * SSB_CORE_SIZE; 680 writew(value, bus->mmio + offset); 681 } 682 683 static void ssb_ssb_write32(struct ssb_device *dev, u16 offset, u32 value) 684 { 685 struct ssb_bus *bus = dev->bus; 686 687 offset += dev->core_index * SSB_CORE_SIZE; 688 writel(value, bus->mmio + offset); 689 } 690 691 #ifdef CONFIG_SSB_BLOCKIO 692 static void ssb_ssb_block_write(struct ssb_device *dev, const void *buffer, 693 size_t count, u16 offset, u8 reg_width) 694 { 695 struct ssb_bus *bus = dev->bus; 696 void __iomem *addr; 697 698 offset += dev->core_index * SSB_CORE_SIZE; 699 addr = bus->mmio + offset; 700 701 switch (reg_width) { 702 case sizeof(u8): { 703 const u8 *buf = buffer; 704 705 while (count) { 706 __raw_writeb(*buf, addr); 707 buf++; 708 count--; 709 } 710 break; 711 } 712 case sizeof(u16): { 713 const __le16 *buf = buffer; 714 715 SSB_WARN_ON(count & 1); 716 while (count) { 717 __raw_writew((__force u16)(*buf), addr); 718 buf++; 719 count -= 2; 720 } 721 break; 722 } 723 case sizeof(u32): { 724 const __le32 *buf = buffer; 725 726 SSB_WARN_ON(count & 3); 727 while (count) { 728 __raw_writel((__force u32)(*buf), addr); 729 buf++; 730 count -= 4; 731 } 732 break; 733 } 734 default: 735 SSB_WARN_ON(1); 736 } 737 } 738 #endif /* CONFIG_SSB_BLOCKIO */ 739 740 /* Ops for the plain SSB bus without a host-device (no PCI or PCMCIA). */ 741 static const struct ssb_bus_ops ssb_ssb_ops = { 742 .read8 = ssb_ssb_read8, 743 .read16 = ssb_ssb_read16, 744 .read32 = ssb_ssb_read32, 745 .write8 = ssb_ssb_write8, 746 .write16 = ssb_ssb_write16, 747 .write32 = ssb_ssb_write32, 748 #ifdef CONFIG_SSB_BLOCKIO 749 .block_read = ssb_ssb_block_read, 750 .block_write = ssb_ssb_block_write, 751 #endif 752 }; 753 754 static int ssb_fetch_invariants(struct ssb_bus *bus, 755 ssb_invariants_func_t get_invariants) 756 { 757 struct ssb_init_invariants iv; 758 int err; 759 760 memset(&iv, 0, sizeof(iv)); 761 err = get_invariants(bus, &iv); 762 if (err) 763 goto out; 764 memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo)); 765 memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom)); 766 bus->has_cardbus_slot = iv.has_cardbus_slot; 767 out: 768 return err; 769 } 770 771 static int ssb_bus_register(struct ssb_bus *bus, 772 ssb_invariants_func_t get_invariants, 773 unsigned long baseaddr) 774 { 775 int err; 776 777 spin_lock_init(&bus->bar_lock); 778 INIT_LIST_HEAD(&bus->list); 779 #ifdef CONFIG_SSB_EMBEDDED 780 spin_lock_init(&bus->gpio_lock); 781 #endif 782 783 /* Powerup the bus */ 784 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1); 785 if (err) 786 goto out; 787 788 /* Init SDIO-host device (if any), before the scan */ 789 err = ssb_sdio_init(bus); 790 if (err) 791 goto err_disable_xtal; 792 793 ssb_buses_lock(); 794 bus->busnumber = next_busnumber; 795 /* Scan for devices (cores) */ 796 err = ssb_bus_scan(bus, baseaddr); 797 if (err) 798 goto err_sdio_exit; 799 800 /* Init PCI-host device (if any) */ 801 err = ssb_pci_init(bus); 802 if (err) 803 goto err_unmap; 804 /* Init PCMCIA-host device (if any) */ 805 err = ssb_pcmcia_init(bus); 806 if (err) 807 goto err_pci_exit; 808 809 /* Initialize basic system devices (if available) */ 810 err = ssb_bus_powerup(bus, 0); 811 if (err) 812 goto err_pcmcia_exit; 813 ssb_chipcommon_init(&bus->chipco); 814 ssb_mipscore_init(&bus->mipscore); 815 err = ssb_fetch_invariants(bus, get_invariants); 816 if (err) { 817 ssb_bus_may_powerdown(bus); 818 goto err_pcmcia_exit; 819 } 820 ssb_bus_may_powerdown(bus); 821 822 /* Queue it for attach. 823 * See the comment at the ssb_is_early_boot definition. */ 824 list_add_tail(&bus->list, &attach_queue); 825 if (!ssb_is_early_boot) { 826 /* This is not early boot, so we must attach the bus now */ 827 err = ssb_attach_queued_buses(); 828 if (err) 829 goto err_dequeue; 830 } 831 next_busnumber++; 832 ssb_buses_unlock(); 833 834 out: 835 return err; 836 837 err_dequeue: 838 list_del(&bus->list); 839 err_pcmcia_exit: 840 ssb_pcmcia_exit(bus); 841 err_pci_exit: 842 ssb_pci_exit(bus); 843 err_unmap: 844 ssb_iounmap(bus); 845 err_sdio_exit: 846 ssb_sdio_exit(bus); 847 err_disable_xtal: 848 ssb_buses_unlock(); 849 ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0); 850 return err; 851 } 852 853 #ifdef CONFIG_SSB_PCIHOST 854 int ssb_bus_pcibus_register(struct ssb_bus *bus, 855 struct pci_dev *host_pci) 856 { 857 int err; 858 859 bus->bustype = SSB_BUSTYPE_PCI; 860 bus->host_pci = host_pci; 861 bus->ops = &ssb_pci_ops; 862 863 err = ssb_bus_register(bus, ssb_pci_get_invariants, 0); 864 if (!err) { 865 ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 866 "PCI device %s\n", dev_name(&host_pci->dev)); 867 } else { 868 ssb_printk(KERN_ERR PFX "Failed to register PCI version" 869 " of SSB with error %d\n", err); 870 } 871 872 return err; 873 } 874 EXPORT_SYMBOL(ssb_bus_pcibus_register); 875 #endif /* CONFIG_SSB_PCIHOST */ 876 877 #ifdef CONFIG_SSB_PCMCIAHOST 878 int ssb_bus_pcmciabus_register(struct ssb_bus *bus, 879 struct pcmcia_device *pcmcia_dev, 880 unsigned long baseaddr) 881 { 882 int err; 883 884 bus->bustype = SSB_BUSTYPE_PCMCIA; 885 bus->host_pcmcia = pcmcia_dev; 886 bus->ops = &ssb_pcmcia_ops; 887 888 err = ssb_bus_register(bus, ssb_pcmcia_get_invariants, baseaddr); 889 if (!err) { 890 ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 891 "PCMCIA device %s\n", pcmcia_dev->devname); 892 } 893 894 return err; 895 } 896 EXPORT_SYMBOL(ssb_bus_pcmciabus_register); 897 #endif /* CONFIG_SSB_PCMCIAHOST */ 898 899 #ifdef CONFIG_SSB_SDIOHOST 900 int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func, 901 unsigned int quirks) 902 { 903 int err; 904 905 bus->bustype = SSB_BUSTYPE_SDIO; 906 bus->host_sdio = func; 907 bus->ops = &ssb_sdio_ops; 908 bus->quirks = quirks; 909 910 err = ssb_bus_register(bus, ssb_sdio_get_invariants, ~0); 911 if (!err) { 912 ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 913 "SDIO device %s\n", sdio_func_id(func)); 914 } 915 916 return err; 917 } 918 EXPORT_SYMBOL(ssb_bus_sdiobus_register); 919 #endif /* CONFIG_SSB_PCMCIAHOST */ 920 921 int ssb_bus_ssbbus_register(struct ssb_bus *bus, 922 unsigned long baseaddr, 923 ssb_invariants_func_t get_invariants) 924 { 925 int err; 926 927 bus->bustype = SSB_BUSTYPE_SSB; 928 bus->ops = &ssb_ssb_ops; 929 930 err = ssb_bus_register(bus, get_invariants, baseaddr); 931 if (!err) { 932 ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found at " 933 "address 0x%08lX\n", baseaddr); 934 } 935 936 return err; 937 } 938 939 int __ssb_driver_register(struct ssb_driver *drv, struct module *owner) 940 { 941 drv->drv.name = drv->name; 942 drv->drv.bus = &ssb_bustype; 943 drv->drv.owner = owner; 944 945 return driver_register(&drv->drv); 946 } 947 EXPORT_SYMBOL(__ssb_driver_register); 948 949 void ssb_driver_unregister(struct ssb_driver *drv) 950 { 951 driver_unregister(&drv->drv); 952 } 953 EXPORT_SYMBOL(ssb_driver_unregister); 954 955 void ssb_set_devtypedata(struct ssb_device *dev, void *data) 956 { 957 struct ssb_bus *bus = dev->bus; 958 struct ssb_device *ent; 959 int i; 960 961 for (i = 0; i < bus->nr_devices; i++) { 962 ent = &(bus->devices[i]); 963 if (ent->id.vendor != dev->id.vendor) 964 continue; 965 if (ent->id.coreid != dev->id.coreid) 966 continue; 967 968 ent->devtypedata = data; 969 } 970 } 971 EXPORT_SYMBOL(ssb_set_devtypedata); 972 973 static u32 clkfactor_f6_resolve(u32 v) 974 { 975 /* map the magic values */ 976 switch (v) { 977 case SSB_CHIPCO_CLK_F6_2: 978 return 2; 979 case SSB_CHIPCO_CLK_F6_3: 980 return 3; 981 case SSB_CHIPCO_CLK_F6_4: 982 return 4; 983 case SSB_CHIPCO_CLK_F6_5: 984 return 5; 985 case SSB_CHIPCO_CLK_F6_6: 986 return 6; 987 case SSB_CHIPCO_CLK_F6_7: 988 return 7; 989 } 990 return 0; 991 } 992 993 /* Calculate the speed the backplane would run at a given set of clockcontrol values */ 994 u32 ssb_calc_clock_rate(u32 plltype, u32 n, u32 m) 995 { 996 u32 n1, n2, clock, m1, m2, m3, mc; 997 998 n1 = (n & SSB_CHIPCO_CLK_N1); 999 n2 = ((n & SSB_CHIPCO_CLK_N2) >> SSB_CHIPCO_CLK_N2_SHIFT); 1000 1001 switch (plltype) { 1002 case SSB_PLLTYPE_6: /* 100/200 or 120/240 only */ 1003 if (m & SSB_CHIPCO_CLK_T6_MMASK) 1004 return SSB_CHIPCO_CLK_T6_M0; 1005 return SSB_CHIPCO_CLK_T6_M1; 1006 case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */ 1007 case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */ 1008 case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */ 1009 case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */ 1010 n1 = clkfactor_f6_resolve(n1); 1011 n2 += SSB_CHIPCO_CLK_F5_BIAS; 1012 break; 1013 case SSB_PLLTYPE_2: /* 48Mhz, 4 dividers */ 1014 n1 += SSB_CHIPCO_CLK_T2_BIAS; 1015 n2 += SSB_CHIPCO_CLK_T2_BIAS; 1016 SSB_WARN_ON(!((n1 >= 2) && (n1 <= 7))); 1017 SSB_WARN_ON(!((n2 >= 5) && (n2 <= 23))); 1018 break; 1019 case SSB_PLLTYPE_5: /* 25Mhz, 4 dividers */ 1020 return 100000000; 1021 default: 1022 SSB_WARN_ON(1); 1023 } 1024 1025 switch (plltype) { 1026 case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */ 1027 case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */ 1028 clock = SSB_CHIPCO_CLK_BASE2 * n1 * n2; 1029 break; 1030 default: 1031 clock = SSB_CHIPCO_CLK_BASE1 * n1 * n2; 1032 } 1033 if (!clock) 1034 return 0; 1035 1036 m1 = (m & SSB_CHIPCO_CLK_M1); 1037 m2 = ((m & SSB_CHIPCO_CLK_M2) >> SSB_CHIPCO_CLK_M2_SHIFT); 1038 m3 = ((m & SSB_CHIPCO_CLK_M3) >> SSB_CHIPCO_CLK_M3_SHIFT); 1039 mc = ((m & SSB_CHIPCO_CLK_MC) >> SSB_CHIPCO_CLK_MC_SHIFT); 1040 1041 switch (plltype) { 1042 case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */ 1043 case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */ 1044 case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */ 1045 case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */ 1046 m1 = clkfactor_f6_resolve(m1); 1047 if ((plltype == SSB_PLLTYPE_1) || 1048 (plltype == SSB_PLLTYPE_3)) 1049 m2 += SSB_CHIPCO_CLK_F5_BIAS; 1050 else 1051 m2 = clkfactor_f6_resolve(m2); 1052 m3 = clkfactor_f6_resolve(m3); 1053 1054 switch (mc) { 1055 case SSB_CHIPCO_CLK_MC_BYPASS: 1056 return clock; 1057 case SSB_CHIPCO_CLK_MC_M1: 1058 return (clock / m1); 1059 case SSB_CHIPCO_CLK_MC_M1M2: 1060 return (clock / (m1 * m2)); 1061 case SSB_CHIPCO_CLK_MC_M1M2M3: 1062 return (clock / (m1 * m2 * m3)); 1063 case SSB_CHIPCO_CLK_MC_M1M3: 1064 return (clock / (m1 * m3)); 1065 } 1066 return 0; 1067 case SSB_PLLTYPE_2: 1068 m1 += SSB_CHIPCO_CLK_T2_BIAS; 1069 m2 += SSB_CHIPCO_CLK_T2M2_BIAS; 1070 m3 += SSB_CHIPCO_CLK_T2_BIAS; 1071 SSB_WARN_ON(!((m1 >= 2) && (m1 <= 7))); 1072 SSB_WARN_ON(!((m2 >= 3) && (m2 <= 10))); 1073 SSB_WARN_ON(!((m3 >= 2) && (m3 <= 7))); 1074 1075 if (!(mc & SSB_CHIPCO_CLK_T2MC_M1BYP)) 1076 clock /= m1; 1077 if (!(mc & SSB_CHIPCO_CLK_T2MC_M2BYP)) 1078 clock /= m2; 1079 if (!(mc & SSB_CHIPCO_CLK_T2MC_M3BYP)) 1080 clock /= m3; 1081 return clock; 1082 default: 1083 SSB_WARN_ON(1); 1084 } 1085 return 0; 1086 } 1087 1088 /* Get the current speed the backplane is running at */ 1089 u32 ssb_clockspeed(struct ssb_bus *bus) 1090 { 1091 u32 rate; 1092 u32 plltype; 1093 u32 clkctl_n, clkctl_m; 1094 1095 if (ssb_extif_available(&bus->extif)) 1096 ssb_extif_get_clockcontrol(&bus->extif, &plltype, 1097 &clkctl_n, &clkctl_m); 1098 else if (bus->chipco.dev) 1099 ssb_chipco_get_clockcontrol(&bus->chipco, &plltype, 1100 &clkctl_n, &clkctl_m); 1101 else 1102 return 0; 1103 1104 if (bus->chip_id == 0x5365) { 1105 rate = 100000000; 1106 } else { 1107 rate = ssb_calc_clock_rate(plltype, clkctl_n, clkctl_m); 1108 if (plltype == SSB_PLLTYPE_3) /* 25Mhz, 2 dividers */ 1109 rate /= 2; 1110 } 1111 1112 return rate; 1113 } 1114 EXPORT_SYMBOL(ssb_clockspeed); 1115 1116 static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev) 1117 { 1118 u32 rev = ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV; 1119 1120 /* The REJECT bit changed position in TMSLOW between 1121 * Backplane revisions. */ 1122 switch (rev) { 1123 case SSB_IDLOW_SSBREV_22: 1124 return SSB_TMSLOW_REJECT_22; 1125 case SSB_IDLOW_SSBREV_23: 1126 return SSB_TMSLOW_REJECT_23; 1127 case SSB_IDLOW_SSBREV_24: /* TODO - find the proper REJECT bits */ 1128 case SSB_IDLOW_SSBREV_25: /* same here */ 1129 case SSB_IDLOW_SSBREV_26: /* same here */ 1130 case SSB_IDLOW_SSBREV_27: /* same here */ 1131 return SSB_TMSLOW_REJECT_23; /* this is a guess */ 1132 default: 1133 printk(KERN_INFO "ssb: Backplane Revision 0x%.8X\n", rev); 1134 WARN_ON(1); 1135 } 1136 return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23); 1137 } 1138 1139 int ssb_device_is_enabled(struct ssb_device *dev) 1140 { 1141 u32 val; 1142 u32 reject; 1143 1144 reject = ssb_tmslow_reject_bitmask(dev); 1145 val = ssb_read32(dev, SSB_TMSLOW); 1146 val &= SSB_TMSLOW_CLOCK | SSB_TMSLOW_RESET | reject; 1147 1148 return (val == SSB_TMSLOW_CLOCK); 1149 } 1150 EXPORT_SYMBOL(ssb_device_is_enabled); 1151 1152 static void ssb_flush_tmslow(struct ssb_device *dev) 1153 { 1154 /* Make _really_ sure the device has finished the TMSLOW 1155 * register write transaction, as we risk running into 1156 * a machine check exception otherwise. 1157 * Do this by reading the register back to commit the 1158 * PCI write and delay an additional usec for the device 1159 * to react to the change. */ 1160 ssb_read32(dev, SSB_TMSLOW); 1161 udelay(1); 1162 } 1163 1164 void ssb_device_enable(struct ssb_device *dev, u32 core_specific_flags) 1165 { 1166 u32 val; 1167 1168 ssb_device_disable(dev, core_specific_flags); 1169 ssb_write32(dev, SSB_TMSLOW, 1170 SSB_TMSLOW_RESET | SSB_TMSLOW_CLOCK | 1171 SSB_TMSLOW_FGC | core_specific_flags); 1172 ssb_flush_tmslow(dev); 1173 1174 /* Clear SERR if set. This is a hw bug workaround. */ 1175 if (ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_SERR) 1176 ssb_write32(dev, SSB_TMSHIGH, 0); 1177 1178 val = ssb_read32(dev, SSB_IMSTATE); 1179 if (val & (SSB_IMSTATE_IBE | SSB_IMSTATE_TO)) { 1180 val &= ~(SSB_IMSTATE_IBE | SSB_IMSTATE_TO); 1181 ssb_write32(dev, SSB_IMSTATE, val); 1182 } 1183 1184 ssb_write32(dev, SSB_TMSLOW, 1185 SSB_TMSLOW_CLOCK | SSB_TMSLOW_FGC | 1186 core_specific_flags); 1187 ssb_flush_tmslow(dev); 1188 1189 ssb_write32(dev, SSB_TMSLOW, SSB_TMSLOW_CLOCK | 1190 core_specific_flags); 1191 ssb_flush_tmslow(dev); 1192 } 1193 EXPORT_SYMBOL(ssb_device_enable); 1194 1195 /* Wait for bitmask in a register to get set or cleared. 1196 * timeout is in units of ten-microseconds */ 1197 static int ssb_wait_bits(struct ssb_device *dev, u16 reg, u32 bitmask, 1198 int timeout, int set) 1199 { 1200 int i; 1201 u32 val; 1202 1203 for (i = 0; i < timeout; i++) { 1204 val = ssb_read32(dev, reg); 1205 if (set) { 1206 if ((val & bitmask) == bitmask) 1207 return 0; 1208 } else { 1209 if (!(val & bitmask)) 1210 return 0; 1211 } 1212 udelay(10); 1213 } 1214 printk(KERN_ERR PFX "Timeout waiting for bitmask %08X on " 1215 "register %04X to %s.\n", 1216 bitmask, reg, (set ? "set" : "clear")); 1217 1218 return -ETIMEDOUT; 1219 } 1220 1221 void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags) 1222 { 1223 u32 reject, val; 1224 1225 if (ssb_read32(dev, SSB_TMSLOW) & SSB_TMSLOW_RESET) 1226 return; 1227 1228 reject = ssb_tmslow_reject_bitmask(dev); 1229 1230 if (ssb_read32(dev, SSB_TMSLOW) & SSB_TMSLOW_CLOCK) { 1231 ssb_write32(dev, SSB_TMSLOW, reject | SSB_TMSLOW_CLOCK); 1232 ssb_wait_bits(dev, SSB_TMSLOW, reject, 1000, 1); 1233 ssb_wait_bits(dev, SSB_TMSHIGH, SSB_TMSHIGH_BUSY, 1000, 0); 1234 1235 if (ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_INITIATOR) { 1236 val = ssb_read32(dev, SSB_IMSTATE); 1237 val |= SSB_IMSTATE_REJECT; 1238 ssb_write32(dev, SSB_IMSTATE, val); 1239 ssb_wait_bits(dev, SSB_IMSTATE, SSB_IMSTATE_BUSY, 1000, 1240 0); 1241 } 1242 1243 ssb_write32(dev, SSB_TMSLOW, 1244 SSB_TMSLOW_FGC | SSB_TMSLOW_CLOCK | 1245 reject | SSB_TMSLOW_RESET | 1246 core_specific_flags); 1247 ssb_flush_tmslow(dev); 1248 1249 if (ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_INITIATOR) { 1250 val = ssb_read32(dev, SSB_IMSTATE); 1251 val &= ~SSB_IMSTATE_REJECT; 1252 ssb_write32(dev, SSB_IMSTATE, val); 1253 } 1254 } 1255 1256 ssb_write32(dev, SSB_TMSLOW, 1257 reject | SSB_TMSLOW_RESET | 1258 core_specific_flags); 1259 ssb_flush_tmslow(dev); 1260 } 1261 EXPORT_SYMBOL(ssb_device_disable); 1262 1263 u32 ssb_dma_translation(struct ssb_device *dev) 1264 { 1265 switch (dev->bus->bustype) { 1266 case SSB_BUSTYPE_SSB: 1267 return 0; 1268 case SSB_BUSTYPE_PCI: 1269 return SSB_PCI_DMA; 1270 default: 1271 __ssb_dma_not_implemented(dev); 1272 } 1273 return 0; 1274 } 1275 EXPORT_SYMBOL(ssb_dma_translation); 1276 1277 int ssb_bus_may_powerdown(struct ssb_bus *bus) 1278 { 1279 struct ssb_chipcommon *cc; 1280 int err = 0; 1281 1282 /* On buses where more than one core may be working 1283 * at a time, we must not powerdown stuff if there are 1284 * still cores that may want to run. */ 1285 if (bus->bustype == SSB_BUSTYPE_SSB) 1286 goto out; 1287 1288 cc = &bus->chipco; 1289 1290 if (!cc->dev) 1291 goto out; 1292 if (cc->dev->id.revision < 5) 1293 goto out; 1294 1295 ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW); 1296 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0); 1297 if (err) 1298 goto error; 1299 out: 1300 #ifdef CONFIG_SSB_DEBUG 1301 bus->powered_up = 0; 1302 #endif 1303 return err; 1304 error: 1305 ssb_printk(KERN_ERR PFX "Bus powerdown failed\n"); 1306 goto out; 1307 } 1308 EXPORT_SYMBOL(ssb_bus_may_powerdown); 1309 1310 int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl) 1311 { 1312 struct ssb_chipcommon *cc; 1313 int err; 1314 enum ssb_clkmode mode; 1315 1316 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1); 1317 if (err) 1318 goto error; 1319 cc = &bus->chipco; 1320 mode = dynamic_pctl ? SSB_CLKMODE_DYNAMIC : SSB_CLKMODE_FAST; 1321 ssb_chipco_set_clockmode(cc, mode); 1322 1323 #ifdef CONFIG_SSB_DEBUG 1324 bus->powered_up = 1; 1325 #endif 1326 return 0; 1327 error: 1328 ssb_printk(KERN_ERR PFX "Bus powerup failed\n"); 1329 return err; 1330 } 1331 EXPORT_SYMBOL(ssb_bus_powerup); 1332 1333 u32 ssb_admatch_base(u32 adm) 1334 { 1335 u32 base = 0; 1336 1337 switch (adm & SSB_ADM_TYPE) { 1338 case SSB_ADM_TYPE0: 1339 base = (adm & SSB_ADM_BASE0); 1340 break; 1341 case SSB_ADM_TYPE1: 1342 SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */ 1343 base = (adm & SSB_ADM_BASE1); 1344 break; 1345 case SSB_ADM_TYPE2: 1346 SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */ 1347 base = (adm & SSB_ADM_BASE2); 1348 break; 1349 default: 1350 SSB_WARN_ON(1); 1351 } 1352 1353 return base; 1354 } 1355 EXPORT_SYMBOL(ssb_admatch_base); 1356 1357 u32 ssb_admatch_size(u32 adm) 1358 { 1359 u32 size = 0; 1360 1361 switch (adm & SSB_ADM_TYPE) { 1362 case SSB_ADM_TYPE0: 1363 size = ((adm & SSB_ADM_SZ0) >> SSB_ADM_SZ0_SHIFT); 1364 break; 1365 case SSB_ADM_TYPE1: 1366 SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */ 1367 size = ((adm & SSB_ADM_SZ1) >> SSB_ADM_SZ1_SHIFT); 1368 break; 1369 case SSB_ADM_TYPE2: 1370 SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */ 1371 size = ((adm & SSB_ADM_SZ2) >> SSB_ADM_SZ2_SHIFT); 1372 break; 1373 default: 1374 SSB_WARN_ON(1); 1375 } 1376 size = (1 << (size + 1)); 1377 1378 return size; 1379 } 1380 EXPORT_SYMBOL(ssb_admatch_size); 1381 1382 static int __init ssb_modinit(void) 1383 { 1384 int err; 1385 1386 /* See the comment at the ssb_is_early_boot definition */ 1387 ssb_is_early_boot = 0; 1388 err = bus_register(&ssb_bustype); 1389 if (err) 1390 return err; 1391 1392 /* Maybe we already registered some buses at early boot. 1393 * Check for this and attach them 1394 */ 1395 ssb_buses_lock(); 1396 err = ssb_attach_queued_buses(); 1397 ssb_buses_unlock(); 1398 if (err) { 1399 bus_unregister(&ssb_bustype); 1400 goto out; 1401 } 1402 1403 err = b43_pci_ssb_bridge_init(); 1404 if (err) { 1405 ssb_printk(KERN_ERR "Broadcom 43xx PCI-SSB-bridge " 1406 "initialization failed\n"); 1407 /* don't fail SSB init because of this */ 1408 err = 0; 1409 } 1410 err = ssb_gige_init(); 1411 if (err) { 1412 ssb_printk(KERN_ERR "SSB Broadcom Gigabit Ethernet " 1413 "driver initialization failed\n"); 1414 /* don't fail SSB init because of this */ 1415 err = 0; 1416 } 1417 out: 1418 return err; 1419 } 1420 /* ssb must be initialized after PCI but before the ssb drivers. 1421 * That means we must use some initcall between subsys_initcall 1422 * and device_initcall. */ 1423 fs_initcall(ssb_modinit); 1424 1425 static void __exit ssb_modexit(void) 1426 { 1427 ssb_gige_exit(); 1428 b43_pci_ssb_bridge_exit(); 1429 bus_unregister(&ssb_bustype); 1430 } 1431 module_exit(ssb_modexit) 1432