linux/arch/s390/pci/pci.c
<<
>>
Prefs
   1/*
   2 * Copyright IBM Corp. 2012
   3 *
   4 * Author(s):
   5 *   Jan Glauber <jang@linux.vnet.ibm.com>
   6 *
   7 * The System z PCI code is a rewrite from a prototype by
   8 * the following people (Kudoz!):
   9 *   Alexander Schmidt
  10 *   Christoph Raisch
  11 *   Hannes Hering
  12 *   Hoang-Nam Nguyen
  13 *   Jan-Bernd Themann
  14 *   Stefan Roscher
  15 *   Thomas Klein
  16 */
  17
  18#define KMSG_COMPONENT "zpci"
  19#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
  20
  21#include <linux/kernel.h>
  22#include <linux/slab.h>
  23#include <linux/err.h>
  24#include <linux/export.h>
  25#include <linux/delay.h>
  26#include <linux/irq.h>
  27#include <linux/kernel_stat.h>
  28#include <linux/seq_file.h>
  29#include <linux/pci.h>
  30#include <linux/msi.h>
  31
  32#include <asm/isc.h>
  33#include <asm/airq.h>
  34#include <asm/facility.h>
  35#include <asm/pci_insn.h>
  36#include <asm/pci_clp.h>
  37#include <asm/pci_dma.h>
  38
  39#define DEBUG                           /* enable pr_debug */
  40
  41#define SIC_IRQ_MODE_ALL                0
  42#define SIC_IRQ_MODE_SINGLE             1
  43
  44#define ZPCI_NR_DMA_SPACES              1
  45#define ZPCI_NR_DEVICES                 CONFIG_PCI_NR_FUNCTIONS
  46
  47/* list of all detected zpci devices */
  48static LIST_HEAD(zpci_list);
  49static DEFINE_SPINLOCK(zpci_list_lock);
  50
  51static struct irq_chip zpci_irq_chip = {
  52        .name = "zPCI",
  53        .irq_unmask = pci_msi_unmask_irq,
  54        .irq_mask = pci_msi_mask_irq,
  55};
  56
  57static DECLARE_BITMAP(zpci_domain, ZPCI_NR_DEVICES);
  58static DEFINE_SPINLOCK(zpci_domain_lock);
  59
  60static struct airq_iv *zpci_aisb_iv;
  61static struct airq_iv *zpci_aibv[ZPCI_NR_DEVICES];
  62
  63#define ZPCI_IOMAP_ENTRIES                                              \
  64        min(((unsigned long) ZPCI_NR_DEVICES * PCI_BAR_COUNT / 2),      \
  65            ZPCI_IOMAP_MAX_ENTRIES)
  66
  67static DEFINE_SPINLOCK(zpci_iomap_lock);
  68static unsigned long *zpci_iomap_bitmap;
  69struct zpci_iomap_entry *zpci_iomap_start;
  70EXPORT_SYMBOL_GPL(zpci_iomap_start);
  71
  72static struct kmem_cache *zdev_fmb_cache;
  73
  74struct zpci_dev *get_zdev_by_fid(u32 fid)
  75{
  76        struct zpci_dev *tmp, *zdev = NULL;
  77
  78        spin_lock(&zpci_list_lock);
  79        list_for_each_entry(tmp, &zpci_list, entry) {
  80                if (tmp->fid == fid) {
  81                        zdev = tmp;
  82                        break;
  83                }
  84        }
  85        spin_unlock(&zpci_list_lock);
  86        return zdev;
  87}
  88
  89void zpci_remove_reserved_devices(void)
  90{
  91        struct zpci_dev *tmp, *zdev;
  92        enum zpci_state state;
  93        LIST_HEAD(remove);
  94
  95        spin_lock(&zpci_list_lock);
  96        list_for_each_entry_safe(zdev, tmp, &zpci_list, entry) {
  97                if (zdev->state == ZPCI_FN_STATE_STANDBY &&
  98                    !clp_get_state(zdev->fid, &state) &&
  99                    state == ZPCI_FN_STATE_RESERVED)
 100                        list_move_tail(&zdev->entry, &remove);
 101        }
 102        spin_unlock(&zpci_list_lock);
 103
 104        list_for_each_entry_safe(zdev, tmp, &remove, entry)
 105                zpci_remove_device(zdev);
 106}
 107
 108static struct zpci_dev *get_zdev_by_bus(struct pci_bus *bus)
 109{
 110        return (bus && bus->sysdata) ? (struct zpci_dev *) bus->sysdata : NULL;
 111}
 112
 113int pci_domain_nr(struct pci_bus *bus)
 114{
 115        return ((struct zpci_dev *) bus->sysdata)->domain;
 116}
 117EXPORT_SYMBOL_GPL(pci_domain_nr);
 118
 119int pci_proc_domain(struct pci_bus *bus)
 120{
 121        return pci_domain_nr(bus);
 122}
 123EXPORT_SYMBOL_GPL(pci_proc_domain);
 124
 125/* Modify PCI: Register adapter interruptions */
 126static int zpci_set_airq(struct zpci_dev *zdev)
 127{
 128        u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT);
 129        struct zpci_fib fib = {0};
 130        u8 status;
 131
 132        fib.isc = PCI_ISC;
 133        fib.sum = 1;            /* enable summary notifications */
 134        fib.noi = airq_iv_end(zdev->aibv);
 135        fib.aibv = (unsigned long) zdev->aibv->vector;
 136        fib.aibvo = 0;          /* each zdev has its own interrupt vector */
 137        fib.aisb = (unsigned long) zpci_aisb_iv->vector + (zdev->aisb/64)*8;
 138        fib.aisbo = zdev->aisb & 63;
 139
 140        return zpci_mod_fc(req, &fib, &status) ? -EIO : 0;
 141}
 142
 143/* Modify PCI: Unregister adapter interruptions */
 144static int zpci_clear_airq(struct zpci_dev *zdev)
 145{
 146        u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT);
 147        struct zpci_fib fib = {0};
 148        u8 cc, status;
 149
 150        cc = zpci_mod_fc(req, &fib, &status);
 151        if (cc == 3 || (cc == 1 && status == 24))
 152                /* Function already gone or IRQs already deregistered. */
 153                cc = 0;
 154
 155        return cc ? -EIO : 0;
 156}
 157
 158/* Modify PCI: Register I/O address translation parameters */
 159int zpci_register_ioat(struct zpci_dev *zdev, u8 dmaas,
 160                       u64 base, u64 limit, u64 iota)
 161{
 162        u64 req = ZPCI_CREATE_REQ(zdev->fh, dmaas, ZPCI_MOD_FC_REG_IOAT);
 163        struct zpci_fib fib = {0};
 164        u8 status;
 165
 166        WARN_ON_ONCE(iota & 0x3fff);
 167        fib.pba = base;
 168        fib.pal = limit;
 169        fib.iota = iota | ZPCI_IOTA_RTTO_FLAG;
 170        return zpci_mod_fc(req, &fib, &status) ? -EIO : 0;
 171}
 172
 173/* Modify PCI: Unregister I/O address translation parameters */
 174int zpci_unregister_ioat(struct zpci_dev *zdev, u8 dmaas)
 175{
 176        u64 req = ZPCI_CREATE_REQ(zdev->fh, dmaas, ZPCI_MOD_FC_DEREG_IOAT);
 177        struct zpci_fib fib = {0};
 178        u8 cc, status;
 179
 180        cc = zpci_mod_fc(req, &fib, &status);
 181        if (cc == 3) /* Function already gone. */
 182                cc = 0;
 183        return cc ? -EIO : 0;
 184}
 185
 186/* Modify PCI: Set PCI function measurement parameters */
 187int zpci_fmb_enable_device(struct zpci_dev *zdev)
 188{
 189        u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_SET_MEASURE);
 190        struct zpci_fib fib = {0};
 191        u8 cc, status;
 192
 193        if (zdev->fmb || sizeof(*zdev->fmb) < zdev->fmb_length)
 194                return -EINVAL;
 195
 196        zdev->fmb = kmem_cache_zalloc(zdev_fmb_cache, GFP_KERNEL);
 197        if (!zdev->fmb)
 198                return -ENOMEM;
 199        WARN_ON((u64) zdev->fmb & 0xf);
 200
 201        /* reset software counters */
 202        atomic64_set(&zdev->allocated_pages, 0);
 203        atomic64_set(&zdev->mapped_pages, 0);
 204        atomic64_set(&zdev->unmapped_pages, 0);
 205
 206        fib.fmb_addr = virt_to_phys(zdev->fmb);
 207        cc = zpci_mod_fc(req, &fib, &status);
 208        if (cc) {
 209                kmem_cache_free(zdev_fmb_cache, zdev->fmb);
 210                zdev->fmb = NULL;
 211        }
 212        return cc ? -EIO : 0;
 213}
 214
 215/* Modify PCI: Disable PCI function measurement */
 216int zpci_fmb_disable_device(struct zpci_dev *zdev)
 217{
 218        u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_SET_MEASURE);
 219        struct zpci_fib fib = {0};
 220        u8 cc, status;
 221
 222        if (!zdev->fmb)
 223                return -EINVAL;
 224
 225        /* Function measurement is disabled if fmb address is zero */
 226        cc = zpci_mod_fc(req, &fib, &status);
 227        if (cc == 3) /* Function already gone. */
 228                cc = 0;
 229
 230        if (!cc) {
 231                kmem_cache_free(zdev_fmb_cache, zdev->fmb);
 232                zdev->fmb = NULL;
 233        }
 234        return cc ? -EIO : 0;
 235}
 236
 237static int zpci_cfg_load(struct zpci_dev *zdev, int offset, u32 *val, u8 len)
 238{
 239        u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
 240        u64 data;
 241        int rc;
 242
 243        rc = zpci_load(&data, req, offset);
 244        if (!rc) {
 245                data = le64_to_cpu((__force __le64) data);
 246                data >>= (8 - len) * 8;
 247                *val = (u32) data;
 248        } else
 249                *val = 0xffffffff;
 250        return rc;
 251}
 252
 253static int zpci_cfg_store(struct zpci_dev *zdev, int offset, u32 val, u8 len)
 254{
 255        u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
 256        u64 data = val;
 257        int rc;
 258
 259        data <<= (8 - len) * 8;
 260        data = (__force u64) cpu_to_le64(data);
 261        rc = zpci_store(data, req, offset);
 262        return rc;
 263}
 264
 265resource_size_t pcibios_align_resource(void *data, const struct resource *res,
 266                                       resource_size_t size,
 267                                       resource_size_t align)
 268{
 269        return 0;
 270}
 271
 272/* combine single writes by using store-block insn */
 273void __iowrite64_copy(void __iomem *to, const void *from, size_t count)
 274{
 275       zpci_memcpy_toio(to, from, count);
 276}
 277
 278/* Create a virtual mapping cookie for a PCI BAR */
 279void __iomem *pci_iomap_range(struct pci_dev *pdev,
 280                              int bar,
 281                              unsigned long offset,
 282                              unsigned long max)
 283{
 284        struct zpci_dev *zdev = to_zpci(pdev);
 285        int idx;
 286
 287        if (!pci_resource_len(pdev, bar))
 288                return NULL;
 289
 290        idx = zdev->bars[bar].map_idx;
 291        spin_lock(&zpci_iomap_lock);
 292        /* Detect overrun */
 293        WARN_ON(!++zpci_iomap_start[idx].count);
 294        zpci_iomap_start[idx].fh = zdev->fh;
 295        zpci_iomap_start[idx].bar = bar;
 296        spin_unlock(&zpci_iomap_lock);
 297
 298        return (void __iomem *) ZPCI_ADDR(idx) + offset;
 299}
 300EXPORT_SYMBOL(pci_iomap_range);
 301
 302void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 303{
 304        return pci_iomap_range(dev, bar, 0, maxlen);
 305}
 306EXPORT_SYMBOL(pci_iomap);
 307
 308void pci_iounmap(struct pci_dev *pdev, void __iomem *addr)
 309{
 310        unsigned int idx = ZPCI_IDX(addr);
 311
 312        spin_lock(&zpci_iomap_lock);
 313        /* Detect underrun */
 314        WARN_ON(!zpci_iomap_start[idx].count);
 315        if (!--zpci_iomap_start[idx].count) {
 316                zpci_iomap_start[idx].fh = 0;
 317                zpci_iomap_start[idx].bar = 0;
 318        }
 319        spin_unlock(&zpci_iomap_lock);
 320}
 321EXPORT_SYMBOL(pci_iounmap);
 322
 323static int pci_read(struct pci_bus *bus, unsigned int devfn, int where,
 324                    int size, u32 *val)
 325{
 326        struct zpci_dev *zdev = get_zdev_by_bus(bus);
 327        int ret;
 328
 329        if (!zdev || devfn != ZPCI_DEVFN)
 330                ret = -ENODEV;
 331        else
 332                ret = zpci_cfg_load(zdev, where, val, size);
 333
 334        return ret;
 335}
 336
 337static int pci_write(struct pci_bus *bus, unsigned int devfn, int where,
 338                     int size, u32 val)
 339{
 340        struct zpci_dev *zdev = get_zdev_by_bus(bus);
 341        int ret;
 342
 343        if (!zdev || devfn != ZPCI_DEVFN)
 344                ret = -ENODEV;
 345        else
 346                ret = zpci_cfg_store(zdev, where, val, size);
 347
 348        return ret;
 349}
 350
 351static struct pci_ops pci_root_ops = {
 352        .read = pci_read,
 353        .write = pci_write,
 354};
 355
 356static void zpci_irq_handler(struct airq_struct *airq)
 357{
 358        unsigned long si, ai;
 359        struct airq_iv *aibv;
 360        int irqs_on = 0;
 361
 362        inc_irq_stat(IRQIO_PCI);
 363        for (si = 0;;) {
 364                /* Scan adapter summary indicator bit vector */
 365                si = airq_iv_scan(zpci_aisb_iv, si, airq_iv_end(zpci_aisb_iv));
 366                if (si == -1UL) {
 367                        if (irqs_on++)
 368                                /* End of second scan with interrupts on. */
 369                                break;
 370                        /* First scan complete, reenable interrupts. */
 371                        zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
 372                        si = 0;
 373                        continue;
 374                }
 375
 376                /* Scan the adapter interrupt vector for this device. */
 377                aibv = zpci_aibv[si];
 378                for (ai = 0;;) {
 379                        ai = airq_iv_scan(aibv, ai, airq_iv_end(aibv));
 380                        if (ai == -1UL)
 381                                break;
 382                        inc_irq_stat(IRQIO_MSI);
 383                        airq_iv_lock(aibv, ai);
 384                        generic_handle_irq(airq_iv_get_data(aibv, ai));
 385                        airq_iv_unlock(aibv, ai);
 386                }
 387        }
 388}
 389
 390int arch_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
 391{
 392        struct zpci_dev *zdev = to_zpci(pdev);
 393        unsigned int hwirq, msi_vecs;
 394        unsigned long aisb;
 395        struct msi_desc *msi;
 396        struct msi_msg msg;
 397        int rc, irq;
 398
 399        zdev->aisb = -1UL;
 400        if (type == PCI_CAP_ID_MSI && nvec > 1)
 401                return 1;
 402        msi_vecs = min_t(unsigned int, nvec, zdev->max_msi);
 403
 404        /* Allocate adapter summary indicator bit */
 405        aisb = airq_iv_alloc_bit(zpci_aisb_iv);
 406        if (aisb == -1UL)
 407                return -EIO;
 408        zdev->aisb = aisb;
 409
 410        /* Create adapter interrupt vector */
 411        zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA | AIRQ_IV_BITLOCK);
 412        if (!zdev->aibv)
 413                return -ENOMEM;
 414
 415        /* Wire up shortcut pointer */
 416        zpci_aibv[aisb] = zdev->aibv;
 417
 418        /* Request MSI interrupts */
 419        hwirq = 0;
 420        for_each_pci_msi_entry(msi, pdev) {
 421                rc = -EIO;
 422                irq = irq_alloc_desc(0);        /* Alloc irq on node 0 */
 423                if (irq < 0)
 424                        return -ENOMEM;
 425                rc = irq_set_msi_desc(irq, msi);
 426                if (rc)
 427                        return rc;
 428                irq_set_chip_and_handler(irq, &zpci_irq_chip,
 429                                         handle_simple_irq);
 430                msg.data = hwirq;
 431                msg.address_lo = zdev->msi_addr & 0xffffffff;
 432                msg.address_hi = zdev->msi_addr >> 32;
 433                pci_write_msi_msg(irq, &msg);
 434                airq_iv_set_data(zdev->aibv, hwirq, irq);
 435                hwirq++;
 436        }
 437
 438        /* Enable adapter interrupts */
 439        rc = zpci_set_airq(zdev);
 440        if (rc)
 441                return rc;
 442
 443        return (msi_vecs == nvec) ? 0 : msi_vecs;
 444}
 445
 446void arch_teardown_msi_irqs(struct pci_dev *pdev)
 447{
 448        struct zpci_dev *zdev = to_zpci(pdev);
 449        struct msi_desc *msi;
 450        int rc;
 451
 452        /* Disable adapter interrupts */
 453        rc = zpci_clear_airq(zdev);
 454        if (rc)
 455                return;
 456
 457        /* Release MSI interrupts */
 458        for_each_pci_msi_entry(msi, pdev) {
 459                if (!msi->irq)
 460                        continue;
 461                if (msi->msi_attrib.is_msix)
 462                        __pci_msix_desc_mask_irq(msi, 1);
 463                else
 464                        __pci_msi_desc_mask_irq(msi, 1, 1);
 465                irq_set_msi_desc(msi->irq, NULL);
 466                irq_free_desc(msi->irq);
 467                msi->msg.address_lo = 0;
 468                msi->msg.address_hi = 0;
 469                msi->msg.data = 0;
 470                msi->irq = 0;
 471        }
 472
 473        if (zdev->aisb != -1UL) {
 474                zpci_aibv[zdev->aisb] = NULL;
 475                airq_iv_free_bit(zpci_aisb_iv, zdev->aisb);
 476                zdev->aisb = -1UL;
 477        }
 478        if (zdev->aibv) {
 479                airq_iv_release(zdev->aibv);
 480                zdev->aibv = NULL;
 481        }
 482}
 483
 484static void zpci_map_resources(struct pci_dev *pdev)
 485{
 486        resource_size_t len;
 487        int i;
 488
 489        for (i = 0; i < PCI_BAR_COUNT; i++) {
 490                len = pci_resource_len(pdev, i);
 491                if (!len)
 492                        continue;
 493                pdev->resource[i].start =
 494                        (resource_size_t __force) pci_iomap(pdev, i, 0);
 495                pdev->resource[i].end = pdev->resource[i].start + len - 1;
 496        }
 497}
 498
 499static void zpci_unmap_resources(struct pci_dev *pdev)
 500{
 501        resource_size_t len;
 502        int i;
 503
 504        for (i = 0; i < PCI_BAR_COUNT; i++) {
 505                len = pci_resource_len(pdev, i);
 506                if (!len)
 507                        continue;
 508                pci_iounmap(pdev, (void __iomem __force *)
 509                            pdev->resource[i].start);
 510        }
 511}
 512
 513static struct airq_struct zpci_airq = {
 514        .handler = zpci_irq_handler,
 515        .isc = PCI_ISC,
 516};
 517
 518static int __init zpci_irq_init(void)
 519{
 520        int rc;
 521
 522        rc = register_adapter_interrupt(&zpci_airq);
 523        if (rc)
 524                goto out;
 525        /* Set summary to 1 to be called every time for the ISC. */
 526        *zpci_airq.lsi_ptr = 1;
 527
 528        rc = -ENOMEM;
 529        zpci_aisb_iv = airq_iv_create(ZPCI_NR_DEVICES, AIRQ_IV_ALLOC);
 530        if (!zpci_aisb_iv)
 531                goto out_airq;
 532
 533        zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
 534        return 0;
 535
 536out_airq:
 537        unregister_adapter_interrupt(&zpci_airq);
 538out:
 539        return rc;
 540}
 541
 542static void zpci_irq_exit(void)
 543{
 544        airq_iv_release(zpci_aisb_iv);
 545        unregister_adapter_interrupt(&zpci_airq);
 546}
 547
 548static int zpci_alloc_iomap(struct zpci_dev *zdev)
 549{
 550        unsigned long entry;
 551
 552        spin_lock(&zpci_iomap_lock);
 553        entry = find_first_zero_bit(zpci_iomap_bitmap, ZPCI_IOMAP_ENTRIES);
 554        if (entry == ZPCI_IOMAP_ENTRIES) {
 555                spin_unlock(&zpci_iomap_lock);
 556                return -ENOSPC;
 557        }
 558        set_bit(entry, zpci_iomap_bitmap);
 559        spin_unlock(&zpci_iomap_lock);
 560        return entry;
 561}
 562
 563static void zpci_free_iomap(struct zpci_dev *zdev, int entry)
 564{
 565        spin_lock(&zpci_iomap_lock);
 566        memset(&zpci_iomap_start[entry], 0, sizeof(struct zpci_iomap_entry));
 567        clear_bit(entry, zpci_iomap_bitmap);
 568        spin_unlock(&zpci_iomap_lock);
 569}
 570
 571static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,
 572                                    unsigned long size, unsigned long flags)
 573{
 574        struct resource *r;
 575
 576        r = kzalloc(sizeof(*r), GFP_KERNEL);
 577        if (!r)
 578                return NULL;
 579
 580        r->start = start;
 581        r->end = r->start + size - 1;
 582        r->flags = flags;
 583        r->name = zdev->res_name;
 584
 585        if (request_resource(&iomem_resource, r)) {
 586                kfree(r);
 587                return NULL;
 588        }
 589        return r;
 590}
 591
 592static int zpci_setup_bus_resources(struct zpci_dev *zdev,
 593                                    struct list_head *resources)
 594{
 595        unsigned long addr, size, flags;
 596        struct resource *res;
 597        int i, entry;
 598
 599        snprintf(zdev->res_name, sizeof(zdev->res_name),
 600                 "PCI Bus %04x:%02x", zdev->domain, ZPCI_BUS_NR);
 601
 602        for (i = 0; i < PCI_BAR_COUNT; i++) {
 603                if (!zdev->bars[i].size)
 604                        continue;
 605                entry = zpci_alloc_iomap(zdev);
 606                if (entry < 0)
 607                        return entry;
 608                zdev->bars[i].map_idx = entry;
 609
 610                /* only MMIO is supported */
 611                flags = IORESOURCE_MEM;
 612                if (zdev->bars[i].val & 8)
 613                        flags |= IORESOURCE_PREFETCH;
 614                if (zdev->bars[i].val & 4)
 615                        flags |= IORESOURCE_MEM_64;
 616
 617                addr = ZPCI_ADDR(entry);
 618                size = 1UL << zdev->bars[i].size;
 619
 620                res = __alloc_res(zdev, addr, size, flags);
 621                if (!res) {
 622                        zpci_free_iomap(zdev, entry);
 623                        return -ENOMEM;
 624                }
 625                zdev->bars[i].res = res;
 626                pci_add_resource(resources, res);
 627        }
 628
 629        return 0;
 630}
 631
 632static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
 633{
 634        int i;
 635
 636        for (i = 0; i < PCI_BAR_COUNT; i++) {
 637                if (!zdev->bars[i].size || !zdev->bars[i].res)
 638                        continue;
 639
 640                zpci_free_iomap(zdev, zdev->bars[i].map_idx);
 641                release_resource(zdev->bars[i].res);
 642                kfree(zdev->bars[i].res);
 643        }
 644}
 645
 646int pcibios_add_device(struct pci_dev *pdev)
 647{
 648        struct resource *res;
 649        int i;
 650
 651        pdev->dev.groups = zpci_attr_groups;
 652        pdev->dev.dma_ops = &s390_pci_dma_ops;
 653        zpci_map_resources(pdev);
 654
 655        for (i = 0; i < PCI_BAR_COUNT; i++) {
 656                res = &pdev->resource[i];
 657                if (res->parent || !res->flags)
 658                        continue;
 659                pci_claim_resource(pdev, i);
 660        }
 661
 662        return 0;
 663}
 664
 665void pcibios_release_device(struct pci_dev *pdev)
 666{
 667        zpci_unmap_resources(pdev);
 668}
 669
 670int pcibios_enable_device(struct pci_dev *pdev, int mask)
 671{
 672        struct zpci_dev *zdev = to_zpci(pdev);
 673
 674        zpci_debug_init_device(zdev, dev_name(&pdev->dev));
 675        zpci_fmb_enable_device(zdev);
 676
 677        return pci_enable_resources(pdev, mask);
 678}
 679
 680void pcibios_disable_device(struct pci_dev *pdev)
 681{
 682        struct zpci_dev *zdev = to_zpci(pdev);
 683
 684        zpci_fmb_disable_device(zdev);
 685        zpci_debug_exit_device(zdev);
 686}
 687
 688#ifdef CONFIG_HIBERNATE_CALLBACKS
 689static int zpci_restore(struct device *dev)
 690{
 691        struct pci_dev *pdev = to_pci_dev(dev);
 692        struct zpci_dev *zdev = to_zpci(pdev);
 693        int ret = 0;
 694
 695        if (zdev->state != ZPCI_FN_STATE_ONLINE)
 696                goto out;
 697
 698        ret = clp_enable_fh(zdev, ZPCI_NR_DMA_SPACES);
 699        if (ret)
 700                goto out;
 701
 702        zpci_map_resources(pdev);
 703        zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
 704                           (u64) zdev->dma_table);
 705
 706out:
 707        return ret;
 708}
 709
 710static int zpci_freeze(struct device *dev)
 711{
 712        struct pci_dev *pdev = to_pci_dev(dev);
 713        struct zpci_dev *zdev = to_zpci(pdev);
 714
 715        if (zdev->state != ZPCI_FN_STATE_ONLINE)
 716                return 0;
 717
 718        zpci_unregister_ioat(zdev, 0);
 719        zpci_unmap_resources(pdev);
 720        return clp_disable_fh(zdev);
 721}
 722
 723struct dev_pm_ops pcibios_pm_ops = {
 724        .thaw_noirq = zpci_restore,
 725        .freeze_noirq = zpci_freeze,
 726        .restore_noirq = zpci_restore,
 727        .poweroff_noirq = zpci_freeze,
 728};
 729#endif /* CONFIG_HIBERNATE_CALLBACKS */
 730
 731static int zpci_alloc_domain(struct zpci_dev *zdev)
 732{
 733        if (zpci_unique_uid) {
 734                zdev->domain = (u16) zdev->uid;
 735                if (zdev->domain >= ZPCI_NR_DEVICES)
 736                        return 0;
 737
 738                spin_lock(&zpci_domain_lock);
 739                if (test_bit(zdev->domain, zpci_domain)) {
 740                        spin_unlock(&zpci_domain_lock);
 741                        return -EEXIST;
 742                }
 743                set_bit(zdev->domain, zpci_domain);
 744                spin_unlock(&zpci_domain_lock);
 745                return 0;
 746        }
 747
 748        spin_lock(&zpci_domain_lock);
 749        zdev->domain = find_first_zero_bit(zpci_domain, ZPCI_NR_DEVICES);
 750        if (zdev->domain == ZPCI_NR_DEVICES) {
 751                spin_unlock(&zpci_domain_lock);
 752                return -ENOSPC;
 753        }
 754        set_bit(zdev->domain, zpci_domain);
 755        spin_unlock(&zpci_domain_lock);
 756        return 0;
 757}
 758
 759static void zpci_free_domain(struct zpci_dev *zdev)
 760{
 761        if (zdev->domain >= ZPCI_NR_DEVICES)
 762                return;
 763
 764        spin_lock(&zpci_domain_lock);
 765        clear_bit(zdev->domain, zpci_domain);
 766        spin_unlock(&zpci_domain_lock);
 767}
 768
 769void pcibios_remove_bus(struct pci_bus *bus)
 770{
 771        struct zpci_dev *zdev = get_zdev_by_bus(bus);
 772
 773        zpci_exit_slot(zdev);
 774        zpci_cleanup_bus_resources(zdev);
 775        zpci_destroy_iommu(zdev);
 776        zpci_free_domain(zdev);
 777
 778        spin_lock(&zpci_list_lock);
 779        list_del(&zdev->entry);
 780        spin_unlock(&zpci_list_lock);
 781
 782        zpci_dbg(3, "rem fid:%x\n", zdev->fid);
 783        kfree(zdev);
 784}
 785
 786static int zpci_scan_bus(struct zpci_dev *zdev)
 787{
 788        LIST_HEAD(resources);
 789        int ret;
 790
 791        ret = zpci_setup_bus_resources(zdev, &resources);
 792        if (ret)
 793                goto error;
 794
 795        zdev->bus = pci_scan_root_bus(NULL, ZPCI_BUS_NR, &pci_root_ops,
 796                                      zdev, &resources);
 797        if (!zdev->bus) {
 798                ret = -EIO;
 799                goto error;
 800        }
 801        zdev->bus->max_bus_speed = zdev->max_bus_speed;
 802        pci_bus_add_devices(zdev->bus);
 803        return 0;
 804
 805error:
 806        zpci_cleanup_bus_resources(zdev);
 807        pci_free_resource_list(&resources);
 808        return ret;
 809}
 810
 811int zpci_enable_device(struct zpci_dev *zdev)
 812{
 813        int rc;
 814
 815        rc = clp_enable_fh(zdev, ZPCI_NR_DMA_SPACES);
 816        if (rc)
 817                goto out;
 818
 819        rc = zpci_dma_init_device(zdev);
 820        if (rc)
 821                goto out_dma;
 822
 823        zdev->state = ZPCI_FN_STATE_ONLINE;
 824        return 0;
 825
 826out_dma:
 827        clp_disable_fh(zdev);
 828out:
 829        return rc;
 830}
 831EXPORT_SYMBOL_GPL(zpci_enable_device);
 832
 833int zpci_disable_device(struct zpci_dev *zdev)
 834{
 835        zpci_dma_exit_device(zdev);
 836        return clp_disable_fh(zdev);
 837}
 838EXPORT_SYMBOL_GPL(zpci_disable_device);
 839
 840int zpci_create_device(struct zpci_dev *zdev)
 841{
 842        int rc;
 843
 844        rc = zpci_alloc_domain(zdev);
 845        if (rc)
 846                goto out;
 847
 848        rc = zpci_init_iommu(zdev);
 849        if (rc)
 850                goto out_free;
 851
 852        mutex_init(&zdev->lock);
 853        if (zdev->state == ZPCI_FN_STATE_CONFIGURED) {
 854                rc = zpci_enable_device(zdev);
 855                if (rc)
 856                        goto out_destroy_iommu;
 857        }
 858        rc = zpci_scan_bus(zdev);
 859        if (rc)
 860                goto out_disable;
 861
 862        spin_lock(&zpci_list_lock);
 863        list_add_tail(&zdev->entry, &zpci_list);
 864        spin_unlock(&zpci_list_lock);
 865
 866        zpci_init_slot(zdev);
 867
 868        return 0;
 869
 870out_disable:
 871        if (zdev->state == ZPCI_FN_STATE_ONLINE)
 872                zpci_disable_device(zdev);
 873out_destroy_iommu:
 874        zpci_destroy_iommu(zdev);
 875out_free:
 876        zpci_free_domain(zdev);
 877out:
 878        return rc;
 879}
 880
 881void zpci_remove_device(struct zpci_dev *zdev)
 882{
 883        if (!zdev->bus)
 884                return;
 885
 886        pci_stop_root_bus(zdev->bus);
 887        pci_remove_root_bus(zdev->bus);
 888}
 889
 890int zpci_report_error(struct pci_dev *pdev,
 891                      struct zpci_report_error_header *report)
 892{
 893        struct zpci_dev *zdev = to_zpci(pdev);
 894
 895        return sclp_pci_report(report, zdev->fh, zdev->fid);
 896}
 897EXPORT_SYMBOL(zpci_report_error);
 898
 899static int zpci_mem_init(void)
 900{
 901        BUILD_BUG_ON(!is_power_of_2(__alignof__(struct zpci_fmb)) ||
 902                     __alignof__(struct zpci_fmb) < sizeof(struct zpci_fmb));
 903
 904        zdev_fmb_cache = kmem_cache_create("PCI_FMB_cache", sizeof(struct zpci_fmb),
 905                                           __alignof__(struct zpci_fmb), 0, NULL);
 906        if (!zdev_fmb_cache)
 907                goto error_fmb;
 908
 909        zpci_iomap_start = kcalloc(ZPCI_IOMAP_ENTRIES,
 910                                   sizeof(*zpci_iomap_start), GFP_KERNEL);
 911        if (!zpci_iomap_start)
 912                goto error_iomap;
 913
 914        zpci_iomap_bitmap = kcalloc(BITS_TO_LONGS(ZPCI_IOMAP_ENTRIES),
 915                                    sizeof(*zpci_iomap_bitmap), GFP_KERNEL);
 916        if (!zpci_iomap_bitmap)
 917                goto error_iomap_bitmap;
 918
 919        return 0;
 920error_iomap_bitmap:
 921        kfree(zpci_iomap_start);
 922error_iomap:
 923        kmem_cache_destroy(zdev_fmb_cache);
 924error_fmb:
 925        return -ENOMEM;
 926}
 927
 928static void zpci_mem_exit(void)
 929{
 930        kfree(zpci_iomap_bitmap);
 931        kfree(zpci_iomap_start);
 932        kmem_cache_destroy(zdev_fmb_cache);
 933}
 934
 935static unsigned int s390_pci_probe = 1;
 936static unsigned int s390_pci_initialized;
 937
 938char * __init pcibios_setup(char *str)
 939{
 940        if (!strcmp(str, "off")) {
 941                s390_pci_probe = 0;
 942                return NULL;
 943        }
 944        return str;
 945}
 946
 947bool zpci_is_enabled(void)
 948{
 949        return s390_pci_initialized;
 950}
 951
 952static int __init pci_base_init(void)
 953{
 954        int rc;
 955
 956        if (!s390_pci_probe)
 957                return 0;
 958
 959        if (!test_facility(69) || !test_facility(71) || !test_facility(72))
 960                return 0;
 961
 962        rc = zpci_debug_init();
 963        if (rc)
 964                goto out;
 965
 966        rc = zpci_mem_init();
 967        if (rc)
 968                goto out_mem;
 969
 970        rc = zpci_irq_init();
 971        if (rc)
 972                goto out_irq;
 973
 974        rc = zpci_dma_init();
 975        if (rc)
 976                goto out_dma;
 977
 978        rc = clp_scan_pci_devices();
 979        if (rc)
 980                goto out_find;
 981
 982        s390_pci_initialized = 1;
 983        return 0;
 984
 985out_find:
 986        zpci_dma_exit();
 987out_dma:
 988        zpci_irq_exit();
 989out_irq:
 990        zpci_mem_exit();
 991out_mem:
 992        zpci_debug_exit();
 993out:
 994        return rc;
 995}
 996subsys_initcall_sync(pci_base_init);
 997
 998void zpci_rescan(void)
 999{
1000        if (zpci_is_enabled())
1001                clp_rescan_pci_devices_simple();
1002}
1003