linux/drivers/mmc/host/sdhci-pci.c
<<
>>
Prefs
   1/*  linux/drivers/mmc/host/sdhci-pci.c - SDHCI on PCI bus interface
   2 *
   3 *  Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or (at
   8 * your option) any later version.
   9 *
  10 * Thanks to the following companies for their support:
  11 *
  12 *     - JMicron (hardware and technical support)
  13 */
  14
  15#include <linux/delay.h>
  16#include <linux/highmem.h>
  17#include <linux/module.h>
  18#include <linux/pci.h>
  19#include <linux/dma-mapping.h>
  20#include <linux/slab.h>
  21#include <linux/device.h>
  22#include <linux/mmc/host.h>
  23#include <linux/scatterlist.h>
  24#include <linux/io.h>
  25#include <linux/gpio.h>
  26#include <linux/pm_runtime.h>
  27#include <linux/mmc/sdhci-pci-data.h>
  28
  29#include "sdhci.h"
  30
  31/*
  32 * PCI device IDs
  33 */
  34#define PCI_DEVICE_ID_INTEL_PCH_SDIO0   0x8809
  35#define PCI_DEVICE_ID_INTEL_PCH_SDIO1   0x880a
  36#define PCI_DEVICE_ID_INTEL_BYT_EMMC    0x0f14
  37#define PCI_DEVICE_ID_INTEL_BYT_SDIO    0x0f15
  38#define PCI_DEVICE_ID_INTEL_BYT_SD      0x0f16
  39
  40/*
  41 * PCI registers
  42 */
  43
  44#define PCI_SDHCI_IFPIO                 0x00
  45#define PCI_SDHCI_IFDMA                 0x01
  46#define PCI_SDHCI_IFVENDOR              0x02
  47
  48#define PCI_SLOT_INFO                   0x40    /* 8 bits */
  49#define  PCI_SLOT_INFO_SLOTS(x)         ((x >> 4) & 7)
  50#define  PCI_SLOT_INFO_FIRST_BAR_MASK   0x07
  51
  52#define MAX_SLOTS                       8
  53
  54struct sdhci_pci_chip;
  55struct sdhci_pci_slot;
  56
  57struct sdhci_pci_fixes {
  58        unsigned int            quirks;
  59        unsigned int            quirks2;
  60        bool                    allow_runtime_pm;
  61
  62        int                     (*probe) (struct sdhci_pci_chip *);
  63
  64        int                     (*probe_slot) (struct sdhci_pci_slot *);
  65        void                    (*remove_slot) (struct sdhci_pci_slot *, int);
  66
  67        int                     (*suspend) (struct sdhci_pci_chip *);
  68        int                     (*resume) (struct sdhci_pci_chip *);
  69};
  70
  71struct sdhci_pci_slot {
  72        struct sdhci_pci_chip   *chip;
  73        struct sdhci_host       *host;
  74        struct sdhci_pci_data   *data;
  75
  76        int                     pci_bar;
  77        int                     rst_n_gpio;
  78        int                     cd_gpio;
  79        int                     cd_irq;
  80};
  81
  82struct sdhci_pci_chip {
  83        struct pci_dev          *pdev;
  84
  85        unsigned int            quirks;
  86        unsigned int            quirks2;
  87        bool                    allow_runtime_pm;
  88        const struct sdhci_pci_fixes *fixes;
  89
  90        int                     num_slots;      /* Slots on controller */
  91        struct sdhci_pci_slot   *slots[MAX_SLOTS]; /* Pointers to host slots */
  92};
  93
  94
  95/*****************************************************************************\
  96 *                                                                           *
  97 * Hardware specific quirk handling                                          *
  98 *                                                                           *
  99\*****************************************************************************/
 100
 101static int ricoh_probe(struct sdhci_pci_chip *chip)
 102{
 103        if (chip->pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG ||
 104            chip->pdev->subsystem_vendor == PCI_VENDOR_ID_SONY)
 105                chip->quirks |= SDHCI_QUIRK_NO_CARD_NO_RESET;
 106        return 0;
 107}
 108
 109static int ricoh_mmc_probe_slot(struct sdhci_pci_slot *slot)
 110{
 111        slot->host->caps =
 112                ((0x21 << SDHCI_TIMEOUT_CLK_SHIFT)
 113                        & SDHCI_TIMEOUT_CLK_MASK) |
 114
 115                ((0x21 << SDHCI_CLOCK_BASE_SHIFT)
 116                        & SDHCI_CLOCK_BASE_MASK) |
 117
 118                SDHCI_TIMEOUT_CLK_UNIT |
 119                SDHCI_CAN_VDD_330 |
 120                SDHCI_CAN_DO_HISPD |
 121                SDHCI_CAN_DO_SDMA;
 122        return 0;
 123}
 124
 125static int ricoh_mmc_resume(struct sdhci_pci_chip *chip)
 126{
 127        /* Apply a delay to allow controller to settle */
 128        /* Otherwise it becomes confused if card state changed
 129                during suspend */
 130        msleep(500);
 131        return 0;
 132}
 133
 134static const struct sdhci_pci_fixes sdhci_ricoh = {
 135        .probe          = ricoh_probe,
 136        .quirks         = SDHCI_QUIRK_32BIT_DMA_ADDR |
 137                          SDHCI_QUIRK_FORCE_DMA |
 138                          SDHCI_QUIRK_CLOCK_BEFORE_RESET,
 139};
 140
 141static const struct sdhci_pci_fixes sdhci_ricoh_mmc = {
 142        .probe_slot     = ricoh_mmc_probe_slot,
 143        .resume         = ricoh_mmc_resume,
 144        .quirks         = SDHCI_QUIRK_32BIT_DMA_ADDR |
 145                          SDHCI_QUIRK_CLOCK_BEFORE_RESET |
 146                          SDHCI_QUIRK_NO_CARD_NO_RESET |
 147                          SDHCI_QUIRK_MISSING_CAPS
 148};
 149
 150static const struct sdhci_pci_fixes sdhci_ene_712 = {
 151        .quirks         = SDHCI_QUIRK_SINGLE_POWER_WRITE |
 152                          SDHCI_QUIRK_BROKEN_DMA,
 153};
 154
 155static const struct sdhci_pci_fixes sdhci_ene_714 = {
 156        .quirks         = SDHCI_QUIRK_SINGLE_POWER_WRITE |
 157                          SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS |
 158                          SDHCI_QUIRK_BROKEN_DMA,
 159};
 160
 161static const struct sdhci_pci_fixes sdhci_cafe = {
 162        .quirks         = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER |
 163                          SDHCI_QUIRK_NO_BUSY_IRQ |
 164                          SDHCI_QUIRK_BROKEN_CARD_DETECTION |
 165                          SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
 166};
 167
 168static int mrst_hc_probe_slot(struct sdhci_pci_slot *slot)
 169{
 170        slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA;
 171        return 0;
 172}
 173
 174/*
 175 * ADMA operation is disabled for Moorestown platform due to
 176 * hardware bugs.
 177 */
 178static int mrst_hc_probe(struct sdhci_pci_chip *chip)
 179{
 180        /*
 181         * slots number is fixed here for MRST as SDIO3/5 are never used and
 182         * have hardware bugs.
 183         */
 184        chip->num_slots = 1;
 185        return 0;
 186}
 187
 188static int pch_hc_probe_slot(struct sdhci_pci_slot *slot)
 189{
 190        slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA;
 191        return 0;
 192}
 193
 194#ifdef CONFIG_PM_RUNTIME
 195
 196static irqreturn_t sdhci_pci_sd_cd(int irq, void *dev_id)
 197{
 198        struct sdhci_pci_slot *slot = dev_id;
 199        struct sdhci_host *host = slot->host;
 200
 201        mmc_detect_change(host->mmc, msecs_to_jiffies(200));
 202        return IRQ_HANDLED;
 203}
 204
 205static void sdhci_pci_add_own_cd(struct sdhci_pci_slot *slot)
 206{
 207        int err, irq, gpio = slot->cd_gpio;
 208
 209        slot->cd_gpio = -EINVAL;
 210        slot->cd_irq = -EINVAL;
 211
 212        if (!gpio_is_valid(gpio))
 213                return;
 214
 215        err = gpio_request(gpio, "sd_cd");
 216        if (err < 0)
 217                goto out;
 218
 219        err = gpio_direction_input(gpio);
 220        if (err < 0)
 221                goto out_free;
 222
 223        irq = gpio_to_irq(gpio);
 224        if (irq < 0)
 225                goto out_free;
 226
 227        err = request_irq(irq, sdhci_pci_sd_cd, IRQF_TRIGGER_RISING |
 228                          IRQF_TRIGGER_FALLING, "sd_cd", slot);
 229        if (err)
 230                goto out_free;
 231
 232        slot->cd_gpio = gpio;
 233        slot->cd_irq = irq;
 234
 235        return;
 236
 237out_free:
 238        gpio_free(gpio);
 239out:
 240        dev_warn(&slot->chip->pdev->dev, "failed to setup card detect wake up\n");
 241}
 242
 243static void sdhci_pci_remove_own_cd(struct sdhci_pci_slot *slot)
 244{
 245        if (slot->cd_irq >= 0)
 246                free_irq(slot->cd_irq, slot);
 247        if (gpio_is_valid(slot->cd_gpio))
 248                gpio_free(slot->cd_gpio);
 249}
 250
 251#else
 252
 253static inline void sdhci_pci_add_own_cd(struct sdhci_pci_slot *slot)
 254{
 255}
 256
 257static inline void sdhci_pci_remove_own_cd(struct sdhci_pci_slot *slot)
 258{
 259}
 260
 261#endif
 262
 263static int mfd_emmc_probe_slot(struct sdhci_pci_slot *slot)
 264{
 265        slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE;
 266        slot->host->mmc->caps2 |= MMC_CAP2_BOOTPART_NOACC |
 267                                  MMC_CAP2_HC_ERASE_SZ;
 268        return 0;
 269}
 270
 271static int mfd_sdio_probe_slot(struct sdhci_pci_slot *slot)
 272{
 273        slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE;
 274        return 0;
 275}
 276
 277static const struct sdhci_pci_fixes sdhci_intel_mrst_hc0 = {
 278        .quirks         = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
 279        .probe_slot     = mrst_hc_probe_slot,
 280};
 281
 282static const struct sdhci_pci_fixes sdhci_intel_mrst_hc1_hc2 = {
 283        .quirks         = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
 284        .probe          = mrst_hc_probe,
 285};
 286
 287static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = {
 288        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
 289        .allow_runtime_pm = true,
 290};
 291
 292static const struct sdhci_pci_fixes sdhci_intel_mfd_sdio = {
 293        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
 294        .quirks2        = SDHCI_QUIRK2_HOST_OFF_CARD_ON,
 295        .allow_runtime_pm = true,
 296        .probe_slot     = mfd_sdio_probe_slot,
 297};
 298
 299static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc = {
 300        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
 301        .allow_runtime_pm = true,
 302        .probe_slot     = mfd_emmc_probe_slot,
 303};
 304
 305static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = {
 306        .quirks         = SDHCI_QUIRK_BROKEN_ADMA,
 307        .probe_slot     = pch_hc_probe_slot,
 308};
 309
 310static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
 311{
 312        slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE;
 313        slot->host->mmc->caps2 |= MMC_CAP2_HC_ERASE_SZ;
 314        return 0;
 315}
 316
 317static int byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
 318{
 319        slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE;
 320        return 0;
 321}
 322
 323static const struct sdhci_pci_fixes sdhci_intel_byt_emmc = {
 324        .allow_runtime_pm = true,
 325        .probe_slot     = byt_emmc_probe_slot,
 326};
 327
 328static const struct sdhci_pci_fixes sdhci_intel_byt_sdio = {
 329        .quirks2        = SDHCI_QUIRK2_HOST_OFF_CARD_ON,
 330        .allow_runtime_pm = true,
 331        .probe_slot     = byt_sdio_probe_slot,
 332};
 333
 334static const struct sdhci_pci_fixes sdhci_intel_byt_sd = {
 335};
 336
 337/* O2Micro extra registers */
 338#define O2_SD_LOCK_WP           0xD3
 339#define O2_SD_MULTI_VCC3V       0xEE
 340#define O2_SD_CLKREQ            0xEC
 341#define O2_SD_CAPS              0xE0
 342#define O2_SD_ADMA1             0xE2
 343#define O2_SD_ADMA2             0xE7
 344#define O2_SD_INF_MOD           0xF1
 345
 346static int o2_probe(struct sdhci_pci_chip *chip)
 347{
 348        int ret;
 349        u8 scratch;
 350
 351        switch (chip->pdev->device) {
 352        case PCI_DEVICE_ID_O2_8220:
 353        case PCI_DEVICE_ID_O2_8221:
 354        case PCI_DEVICE_ID_O2_8320:
 355        case PCI_DEVICE_ID_O2_8321:
 356                /* This extra setup is required due to broken ADMA. */
 357                ret = pci_read_config_byte(chip->pdev, O2_SD_LOCK_WP, &scratch);
 358                if (ret)
 359                        return ret;
 360                scratch &= 0x7f;
 361                pci_write_config_byte(chip->pdev, O2_SD_LOCK_WP, scratch);
 362
 363                /* Set Multi 3 to VCC3V# */
 364                pci_write_config_byte(chip->pdev, O2_SD_MULTI_VCC3V, 0x08);
 365
 366                /* Disable CLK_REQ# support after media DET */
 367                ret = pci_read_config_byte(chip->pdev, O2_SD_CLKREQ, &scratch);
 368                if (ret)
 369                        return ret;
 370                scratch |= 0x20;
 371                pci_write_config_byte(chip->pdev, O2_SD_CLKREQ, scratch);
 372
 373                /* Choose capabilities, enable SDMA.  We have to write 0x01
 374                 * to the capabilities register first to unlock it.
 375                 */
 376                ret = pci_read_config_byte(chip->pdev, O2_SD_CAPS, &scratch);
 377                if (ret)
 378                        return ret;
 379                scratch |= 0x01;
 380                pci_write_config_byte(chip->pdev, O2_SD_CAPS, scratch);
 381                pci_write_config_byte(chip->pdev, O2_SD_CAPS, 0x73);
 382
 383                /* Disable ADMA1/2 */
 384                pci_write_config_byte(chip->pdev, O2_SD_ADMA1, 0x39);
 385                pci_write_config_byte(chip->pdev, O2_SD_ADMA2, 0x08);
 386
 387                /* Disable the infinite transfer mode */
 388                ret = pci_read_config_byte(chip->pdev, O2_SD_INF_MOD, &scratch);
 389                if (ret)
 390                        return ret;
 391                scratch |= 0x08;
 392                pci_write_config_byte(chip->pdev, O2_SD_INF_MOD, scratch);
 393
 394                /* Lock WP */
 395                ret = pci_read_config_byte(chip->pdev, O2_SD_LOCK_WP, &scratch);
 396                if (ret)
 397                        return ret;
 398                scratch |= 0x80;
 399                pci_write_config_byte(chip->pdev, O2_SD_LOCK_WP, scratch);
 400        }
 401
 402        return 0;
 403}
 404
 405static int jmicron_pmos(struct sdhci_pci_chip *chip, int on)
 406{
 407        u8 scratch;
 408        int ret;
 409
 410        ret = pci_read_config_byte(chip->pdev, 0xAE, &scratch);
 411        if (ret)
 412                return ret;
 413
 414        /*
 415         * Turn PMOS on [bit 0], set over current detection to 2.4 V
 416         * [bit 1:2] and enable over current debouncing [bit 6].
 417         */
 418        if (on)
 419                scratch |= 0x47;
 420        else
 421                scratch &= ~0x47;
 422
 423        ret = pci_write_config_byte(chip->pdev, 0xAE, scratch);
 424        if (ret)
 425                return ret;
 426
 427        return 0;
 428}
 429
 430static int jmicron_probe(struct sdhci_pci_chip *chip)
 431{
 432        int ret;
 433        u16 mmcdev = 0;
 434
 435        if (chip->pdev->revision == 0) {
 436                chip->quirks |= SDHCI_QUIRK_32BIT_DMA_ADDR |
 437                          SDHCI_QUIRK_32BIT_DMA_SIZE |
 438                          SDHCI_QUIRK_32BIT_ADMA_SIZE |
 439                          SDHCI_QUIRK_RESET_AFTER_REQUEST |
 440                          SDHCI_QUIRK_BROKEN_SMALL_PIO;
 441        }
 442
 443        /*
 444         * JMicron chips can have two interfaces to the same hardware
 445         * in order to work around limitations in Microsoft's driver.
 446         * We need to make sure we only bind to one of them.
 447         *
 448         * This code assumes two things:
 449         *
 450         * 1. The PCI code adds subfunctions in order.
 451         *
 452         * 2. The MMC interface has a lower subfunction number
 453         *    than the SD interface.
 454         */
 455        if (chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB38X_SD)
 456                mmcdev = PCI_DEVICE_ID_JMICRON_JMB38X_MMC;
 457        else if (chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_SD)
 458                mmcdev = PCI_DEVICE_ID_JMICRON_JMB388_ESD;
 459
 460        if (mmcdev) {
 461                struct pci_dev *sd_dev;
 462
 463                sd_dev = NULL;
 464                while ((sd_dev = pci_get_device(PCI_VENDOR_ID_JMICRON,
 465                                                mmcdev, sd_dev)) != NULL) {
 466                        if ((PCI_SLOT(chip->pdev->devfn) ==
 467                                PCI_SLOT(sd_dev->devfn)) &&
 468                                (chip->pdev->bus == sd_dev->bus))
 469                                break;
 470                }
 471
 472                if (sd_dev) {
 473                        pci_dev_put(sd_dev);
 474                        dev_info(&chip->pdev->dev, "Refusing to bind to "
 475                                "secondary interface.\n");
 476                        return -ENODEV;
 477                }
 478        }
 479
 480        /*
 481         * JMicron chips need a bit of a nudge to enable the power
 482         * output pins.
 483         */
 484        ret = jmicron_pmos(chip, 1);
 485        if (ret) {
 486                dev_err(&chip->pdev->dev, "Failure enabling card power\n");
 487                return ret;
 488        }
 489
 490        /* quirk for unsable RO-detection on JM388 chips */
 491        if (chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_SD ||
 492            chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD)
 493                chip->quirks |= SDHCI_QUIRK_UNSTABLE_RO_DETECT;
 494
 495        return 0;
 496}
 497
 498static void jmicron_enable_mmc(struct sdhci_host *host, int on)
 499{
 500        u8 scratch;
 501
 502        scratch = readb(host->ioaddr + 0xC0);
 503
 504        if (on)
 505                scratch |= 0x01;
 506        else
 507                scratch &= ~0x01;
 508
 509        writeb(scratch, host->ioaddr + 0xC0);
 510}
 511
 512static int jmicron_probe_slot(struct sdhci_pci_slot *slot)
 513{
 514        if (slot->chip->pdev->revision == 0) {
 515                u16 version;
 516
 517                version = readl(slot->host->ioaddr + SDHCI_HOST_VERSION);
 518                version = (version & SDHCI_VENDOR_VER_MASK) >>
 519                        SDHCI_VENDOR_VER_SHIFT;
 520
 521                /*
 522                 * Older versions of the chip have lots of nasty glitches
 523                 * in the ADMA engine. It's best just to avoid it
 524                 * completely.
 525                 */
 526                if (version < 0xAC)
 527                        slot->host->quirks |= SDHCI_QUIRK_BROKEN_ADMA;
 528        }
 529
 530        /* JM388 MMC doesn't support 1.8V while SD supports it */
 531        if (slot->chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD) {
 532                slot->host->ocr_avail_sd = MMC_VDD_32_33 | MMC_VDD_33_34 |
 533                        MMC_VDD_29_30 | MMC_VDD_30_31 |
 534                        MMC_VDD_165_195; /* allow 1.8V */
 535                slot->host->ocr_avail_mmc = MMC_VDD_32_33 | MMC_VDD_33_34 |
 536                        MMC_VDD_29_30 | MMC_VDD_30_31; /* no 1.8V for MMC */
 537        }
 538
 539        /*
 540         * The secondary interface requires a bit set to get the
 541         * interrupts.
 542         */
 543        if (slot->chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB38X_MMC ||
 544            slot->chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD)
 545                jmicron_enable_mmc(slot->host, 1);
 546
 547        slot->host->mmc->caps |= MMC_CAP_BUS_WIDTH_TEST;
 548
 549        return 0;
 550}
 551
 552static void jmicron_remove_slot(struct sdhci_pci_slot *slot, int dead)
 553{
 554        if (dead)
 555                return;
 556
 557        if (slot->chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB38X_MMC ||
 558            slot->chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD)
 559                jmicron_enable_mmc(slot->host, 0);
 560}
 561
 562static int jmicron_suspend(struct sdhci_pci_chip *chip)
 563{
 564        int i;
 565
 566        if (chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB38X_MMC ||
 567            chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD) {
 568                for (i = 0; i < chip->num_slots; i++)
 569                        jmicron_enable_mmc(chip->slots[i]->host, 0);
 570        }
 571
 572        return 0;
 573}
 574
 575static int jmicron_resume(struct sdhci_pci_chip *chip)
 576{
 577        int ret, i;
 578
 579        if (chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB38X_MMC ||
 580            chip->pdev->device == PCI_DEVICE_ID_JMICRON_JMB388_ESD) {
 581                for (i = 0; i < chip->num_slots; i++)
 582                        jmicron_enable_mmc(chip->slots[i]->host, 1);
 583        }
 584
 585        ret = jmicron_pmos(chip, 1);
 586        if (ret) {
 587                dev_err(&chip->pdev->dev, "Failure enabling card power\n");
 588                return ret;
 589        }
 590
 591        return 0;
 592}
 593
 594static const struct sdhci_pci_fixes sdhci_o2 = {
 595        .probe          = o2_probe,
 596};
 597
 598static const struct sdhci_pci_fixes sdhci_jmicron = {
 599        .probe          = jmicron_probe,
 600
 601        .probe_slot     = jmicron_probe_slot,
 602        .remove_slot    = jmicron_remove_slot,
 603
 604        .suspend        = jmicron_suspend,
 605        .resume         = jmicron_resume,
 606};
 607
 608/* SysKonnect CardBus2SDIO extra registers */
 609#define SYSKT_CTRL              0x200
 610#define SYSKT_RDFIFO_STAT       0x204
 611#define SYSKT_WRFIFO_STAT       0x208
 612#define SYSKT_POWER_DATA        0x20c
 613#define   SYSKT_POWER_330       0xef
 614#define   SYSKT_POWER_300       0xf8
 615#define   SYSKT_POWER_184       0xcc
 616#define SYSKT_POWER_CMD         0x20d
 617#define   SYSKT_POWER_START     (1 << 7)
 618#define SYSKT_POWER_STATUS      0x20e
 619#define   SYSKT_POWER_STATUS_OK (1 << 0)
 620#define SYSKT_BOARD_REV         0x210
 621#define SYSKT_CHIP_REV          0x211
 622#define SYSKT_CONF_DATA         0x212
 623#define   SYSKT_CONF_DATA_1V8   (1 << 2)
 624#define   SYSKT_CONF_DATA_2V5   (1 << 1)
 625#define   SYSKT_CONF_DATA_3V3   (1 << 0)
 626
 627static int syskt_probe(struct sdhci_pci_chip *chip)
 628{
 629        if ((chip->pdev->class & 0x0000FF) == PCI_SDHCI_IFVENDOR) {
 630                chip->pdev->class &= ~0x0000FF;
 631                chip->pdev->class |= PCI_SDHCI_IFDMA;
 632        }
 633        return 0;
 634}
 635
 636static int syskt_probe_slot(struct sdhci_pci_slot *slot)
 637{
 638        int tm, ps;
 639
 640        u8 board_rev = readb(slot->host->ioaddr + SYSKT_BOARD_REV);
 641        u8  chip_rev = readb(slot->host->ioaddr + SYSKT_CHIP_REV);
 642        dev_info(&slot->chip->pdev->dev, "SysKonnect CardBus2SDIO, "
 643                                         "board rev %d.%d, chip rev %d.%d\n",
 644                                         board_rev >> 4, board_rev & 0xf,
 645                                         chip_rev >> 4,  chip_rev & 0xf);
 646        if (chip_rev >= 0x20)
 647                slot->host->quirks |= SDHCI_QUIRK_FORCE_DMA;
 648
 649        writeb(SYSKT_POWER_330, slot->host->ioaddr + SYSKT_POWER_DATA);
 650        writeb(SYSKT_POWER_START, slot->host->ioaddr + SYSKT_POWER_CMD);
 651        udelay(50);
 652        tm = 10;  /* Wait max 1 ms */
 653        do {
 654                ps = readw(slot->host->ioaddr + SYSKT_POWER_STATUS);
 655                if (ps & SYSKT_POWER_STATUS_OK)
 656                        break;
 657                udelay(100);
 658        } while (--tm);
 659        if (!tm) {
 660                dev_err(&slot->chip->pdev->dev,
 661                        "power regulator never stabilized");
 662                writeb(0, slot->host->ioaddr + SYSKT_POWER_CMD);
 663                return -ENODEV;
 664        }
 665
 666        return 0;
 667}
 668
 669static const struct sdhci_pci_fixes sdhci_syskt = {
 670        .quirks         = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER,
 671        .probe          = syskt_probe,
 672        .probe_slot     = syskt_probe_slot,
 673};
 674
 675static int via_probe(struct sdhci_pci_chip *chip)
 676{
 677        if (chip->pdev->revision == 0x10)
 678                chip->quirks |= SDHCI_QUIRK_DELAY_AFTER_POWER;
 679
 680        return 0;
 681}
 682
 683static const struct sdhci_pci_fixes sdhci_via = {
 684        .probe          = via_probe,
 685};
 686
 687static const struct pci_device_id pci_ids[] = {
 688        {
 689                .vendor         = PCI_VENDOR_ID_RICOH,
 690                .device         = PCI_DEVICE_ID_RICOH_R5C822,
 691                .subvendor      = PCI_ANY_ID,
 692                .subdevice      = PCI_ANY_ID,
 693                .driver_data    = (kernel_ulong_t)&sdhci_ricoh,
 694        },
 695
 696        {
 697                .vendor         = PCI_VENDOR_ID_RICOH,
 698                .device         = 0x843,
 699                .subvendor      = PCI_ANY_ID,
 700                .subdevice      = PCI_ANY_ID,
 701                .driver_data    = (kernel_ulong_t)&sdhci_ricoh_mmc,
 702        },
 703
 704        {
 705                .vendor         = PCI_VENDOR_ID_RICOH,
 706                .device         = 0xe822,
 707                .subvendor      = PCI_ANY_ID,
 708                .subdevice      = PCI_ANY_ID,
 709                .driver_data    = (kernel_ulong_t)&sdhci_ricoh_mmc,
 710        },
 711
 712        {
 713                .vendor         = PCI_VENDOR_ID_RICOH,
 714                .device         = 0xe823,
 715                .subvendor      = PCI_ANY_ID,
 716                .subdevice      = PCI_ANY_ID,
 717                .driver_data    = (kernel_ulong_t)&sdhci_ricoh_mmc,
 718        },
 719
 720        {
 721                .vendor         = PCI_VENDOR_ID_ENE,
 722                .device         = PCI_DEVICE_ID_ENE_CB712_SD,
 723                .subvendor      = PCI_ANY_ID,
 724                .subdevice      = PCI_ANY_ID,
 725                .driver_data    = (kernel_ulong_t)&sdhci_ene_712,
 726        },
 727
 728        {
 729                .vendor         = PCI_VENDOR_ID_ENE,
 730                .device         = PCI_DEVICE_ID_ENE_CB712_SD_2,
 731                .subvendor      = PCI_ANY_ID,
 732                .subdevice      = PCI_ANY_ID,
 733                .driver_data    = (kernel_ulong_t)&sdhci_ene_712,
 734        },
 735
 736        {
 737                .vendor         = PCI_VENDOR_ID_ENE,
 738                .device         = PCI_DEVICE_ID_ENE_CB714_SD,
 739                .subvendor      = PCI_ANY_ID,
 740                .subdevice      = PCI_ANY_ID,
 741                .driver_data    = (kernel_ulong_t)&sdhci_ene_714,
 742        },
 743
 744        {
 745                .vendor         = PCI_VENDOR_ID_ENE,
 746                .device         = PCI_DEVICE_ID_ENE_CB714_SD_2,
 747                .subvendor      = PCI_ANY_ID,
 748                .subdevice      = PCI_ANY_ID,
 749                .driver_data    = (kernel_ulong_t)&sdhci_ene_714,
 750        },
 751
 752        {
 753                .vendor         = PCI_VENDOR_ID_MARVELL,
 754                .device         = PCI_DEVICE_ID_MARVELL_88ALP01_SD,
 755                .subvendor      = PCI_ANY_ID,
 756                .subdevice      = PCI_ANY_ID,
 757                .driver_data    = (kernel_ulong_t)&sdhci_cafe,
 758        },
 759
 760        {
 761                .vendor         = PCI_VENDOR_ID_JMICRON,
 762                .device         = PCI_DEVICE_ID_JMICRON_JMB38X_SD,
 763                .subvendor      = PCI_ANY_ID,
 764                .subdevice      = PCI_ANY_ID,
 765                .driver_data    = (kernel_ulong_t)&sdhci_jmicron,
 766        },
 767
 768        {
 769                .vendor         = PCI_VENDOR_ID_JMICRON,
 770                .device         = PCI_DEVICE_ID_JMICRON_JMB38X_MMC,
 771                .subvendor      = PCI_ANY_ID,
 772                .subdevice      = PCI_ANY_ID,
 773                .driver_data    = (kernel_ulong_t)&sdhci_jmicron,
 774        },
 775
 776        {
 777                .vendor         = PCI_VENDOR_ID_JMICRON,
 778                .device         = PCI_DEVICE_ID_JMICRON_JMB388_SD,
 779                .subvendor      = PCI_ANY_ID,
 780                .subdevice      = PCI_ANY_ID,
 781                .driver_data    = (kernel_ulong_t)&sdhci_jmicron,
 782        },
 783
 784        {
 785                .vendor         = PCI_VENDOR_ID_JMICRON,
 786                .device         = PCI_DEVICE_ID_JMICRON_JMB388_ESD,
 787                .subvendor      = PCI_ANY_ID,
 788                .subdevice      = PCI_ANY_ID,
 789                .driver_data    = (kernel_ulong_t)&sdhci_jmicron,
 790        },
 791
 792        {
 793                .vendor         = PCI_VENDOR_ID_SYSKONNECT,
 794                .device         = 0x8000,
 795                .subvendor      = PCI_ANY_ID,
 796                .subdevice      = PCI_ANY_ID,
 797                .driver_data    = (kernel_ulong_t)&sdhci_syskt,
 798        },
 799
 800        {
 801                .vendor         = PCI_VENDOR_ID_VIA,
 802                .device         = 0x95d0,
 803                .subvendor      = PCI_ANY_ID,
 804                .subdevice      = PCI_ANY_ID,
 805                .driver_data    = (kernel_ulong_t)&sdhci_via,
 806        },
 807
 808        {
 809                .vendor         = PCI_VENDOR_ID_INTEL,
 810                .device         = PCI_DEVICE_ID_INTEL_MRST_SD0,
 811                .subvendor      = PCI_ANY_ID,
 812                .subdevice      = PCI_ANY_ID,
 813                .driver_data    = (kernel_ulong_t)&sdhci_intel_mrst_hc0,
 814        },
 815
 816        {
 817                .vendor         = PCI_VENDOR_ID_INTEL,
 818                .device         = PCI_DEVICE_ID_INTEL_MRST_SD1,
 819                .subvendor      = PCI_ANY_ID,
 820                .subdevice      = PCI_ANY_ID,
 821                .driver_data    = (kernel_ulong_t)&sdhci_intel_mrst_hc1_hc2,
 822        },
 823
 824        {
 825                .vendor         = PCI_VENDOR_ID_INTEL,
 826                .device         = PCI_DEVICE_ID_INTEL_MRST_SD2,
 827                .subvendor      = PCI_ANY_ID,
 828                .subdevice      = PCI_ANY_ID,
 829                .driver_data    = (kernel_ulong_t)&sdhci_intel_mrst_hc1_hc2,
 830        },
 831
 832        {
 833                .vendor         = PCI_VENDOR_ID_INTEL,
 834                .device         = PCI_DEVICE_ID_INTEL_MFD_SD,
 835                .subvendor      = PCI_ANY_ID,
 836                .subdevice      = PCI_ANY_ID,
 837                .driver_data    = (kernel_ulong_t)&sdhci_intel_mfd_sd,
 838        },
 839
 840        {
 841                .vendor         = PCI_VENDOR_ID_INTEL,
 842                .device         = PCI_DEVICE_ID_INTEL_MFD_SDIO1,
 843                .subvendor      = PCI_ANY_ID,
 844                .subdevice      = PCI_ANY_ID,
 845                .driver_data    = (kernel_ulong_t)&sdhci_intel_mfd_sdio,
 846        },
 847
 848        {
 849                .vendor         = PCI_VENDOR_ID_INTEL,
 850                .device         = PCI_DEVICE_ID_INTEL_MFD_SDIO2,
 851                .subvendor      = PCI_ANY_ID,
 852                .subdevice      = PCI_ANY_ID,
 853                .driver_data    = (kernel_ulong_t)&sdhci_intel_mfd_sdio,
 854        },
 855
 856        {
 857                .vendor         = PCI_VENDOR_ID_INTEL,
 858                .device         = PCI_DEVICE_ID_INTEL_MFD_EMMC0,
 859                .subvendor      = PCI_ANY_ID,
 860                .subdevice      = PCI_ANY_ID,
 861                .driver_data    = (kernel_ulong_t)&sdhci_intel_mfd_emmc,
 862        },
 863
 864        {
 865                .vendor         = PCI_VENDOR_ID_INTEL,
 866                .device         = PCI_DEVICE_ID_INTEL_MFD_EMMC1,
 867                .subvendor      = PCI_ANY_ID,
 868                .subdevice      = PCI_ANY_ID,
 869                .driver_data    = (kernel_ulong_t)&sdhci_intel_mfd_emmc,
 870        },
 871
 872        {
 873                .vendor         = PCI_VENDOR_ID_INTEL,
 874                .device         = PCI_DEVICE_ID_INTEL_PCH_SDIO0,
 875                .subvendor      = PCI_ANY_ID,
 876                .subdevice      = PCI_ANY_ID,
 877                .driver_data    = (kernel_ulong_t)&sdhci_intel_pch_sdio,
 878        },
 879
 880        {
 881                .vendor         = PCI_VENDOR_ID_INTEL,
 882                .device         = PCI_DEVICE_ID_INTEL_PCH_SDIO1,
 883                .subvendor      = PCI_ANY_ID,
 884                .subdevice      = PCI_ANY_ID,
 885                .driver_data    = (kernel_ulong_t)&sdhci_intel_pch_sdio,
 886        },
 887
 888        {
 889                .vendor         = PCI_VENDOR_ID_INTEL,
 890                .device         = PCI_DEVICE_ID_INTEL_BYT_EMMC,
 891                .subvendor      = PCI_ANY_ID,
 892                .subdevice      = PCI_ANY_ID,
 893                .driver_data    = (kernel_ulong_t)&sdhci_intel_byt_emmc,
 894        },
 895
 896        {
 897                .vendor         = PCI_VENDOR_ID_INTEL,
 898                .device         = PCI_DEVICE_ID_INTEL_BYT_SDIO,
 899                .subvendor      = PCI_ANY_ID,
 900                .subdevice      = PCI_ANY_ID,
 901                .driver_data    = (kernel_ulong_t)&sdhci_intel_byt_sdio,
 902        },
 903
 904        {
 905                .vendor         = PCI_VENDOR_ID_INTEL,
 906                .device         = PCI_DEVICE_ID_INTEL_BYT_SD,
 907                .subvendor      = PCI_ANY_ID,
 908                .subdevice      = PCI_ANY_ID,
 909                .driver_data    = (kernel_ulong_t)&sdhci_intel_byt_sd,
 910        },
 911
 912        {
 913                .vendor         = PCI_VENDOR_ID_O2,
 914                .device         = PCI_DEVICE_ID_O2_8120,
 915                .subvendor      = PCI_ANY_ID,
 916                .subdevice      = PCI_ANY_ID,
 917                .driver_data    = (kernel_ulong_t)&sdhci_o2,
 918        },
 919
 920        {
 921                .vendor         = PCI_VENDOR_ID_O2,
 922                .device         = PCI_DEVICE_ID_O2_8220,
 923                .subvendor      = PCI_ANY_ID,
 924                .subdevice      = PCI_ANY_ID,
 925                .driver_data    = (kernel_ulong_t)&sdhci_o2,
 926        },
 927
 928        {
 929                .vendor         = PCI_VENDOR_ID_O2,
 930                .device         = PCI_DEVICE_ID_O2_8221,
 931                .subvendor      = PCI_ANY_ID,
 932                .subdevice      = PCI_ANY_ID,
 933                .driver_data    = (kernel_ulong_t)&sdhci_o2,
 934        },
 935
 936        {
 937                .vendor         = PCI_VENDOR_ID_O2,
 938                .device         = PCI_DEVICE_ID_O2_8320,
 939                .subvendor      = PCI_ANY_ID,
 940                .subdevice      = PCI_ANY_ID,
 941                .driver_data    = (kernel_ulong_t)&sdhci_o2,
 942        },
 943
 944        {
 945                .vendor         = PCI_VENDOR_ID_O2,
 946                .device         = PCI_DEVICE_ID_O2_8321,
 947                .subvendor      = PCI_ANY_ID,
 948                .subdevice      = PCI_ANY_ID,
 949                .driver_data    = (kernel_ulong_t)&sdhci_o2,
 950        },
 951
 952        {       /* Generic SD host controller */
 953                PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00)
 954        },
 955
 956        { /* end: all zeroes */ },
 957};
 958
 959MODULE_DEVICE_TABLE(pci, pci_ids);
 960
 961/*****************************************************************************\
 962 *                                                                           *
 963 * SDHCI core callbacks                                                      *
 964 *                                                                           *
 965\*****************************************************************************/
 966
 967static int sdhci_pci_enable_dma(struct sdhci_host *host)
 968{
 969        struct sdhci_pci_slot *slot;
 970        struct pci_dev *pdev;
 971        int ret;
 972
 973        slot = sdhci_priv(host);
 974        pdev = slot->chip->pdev;
 975
 976        if (((pdev->class & 0xFFFF00) == (PCI_CLASS_SYSTEM_SDHCI << 8)) &&
 977                ((pdev->class & 0x0000FF) != PCI_SDHCI_IFDMA) &&
 978                (host->flags & SDHCI_USE_SDMA)) {
 979                dev_warn(&pdev->dev, "Will use DMA mode even though HW "
 980                        "doesn't fully claim to support it.\n");
 981        }
 982
 983        ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
 984        if (ret)
 985                return ret;
 986
 987        pci_set_master(pdev);
 988
 989        return 0;
 990}
 991
 992static int sdhci_pci_bus_width(struct sdhci_host *host, int width)
 993{
 994        u8 ctrl;
 995
 996        ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
 997
 998        switch (width) {
 999        case MMC_BUS_WIDTH_8:
1000                ctrl |= SDHCI_CTRL_8BITBUS;
1001                ctrl &= ~SDHCI_CTRL_4BITBUS;
1002                break;
1003        case MMC_BUS_WIDTH_4:
1004                ctrl |= SDHCI_CTRL_4BITBUS;
1005                ctrl &= ~SDHCI_CTRL_8BITBUS;
1006                break;
1007        default:
1008                ctrl &= ~(SDHCI_CTRL_8BITBUS | SDHCI_CTRL_4BITBUS);
1009                break;
1010        }
1011
1012        sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
1013
1014        return 0;
1015}
1016
1017static void sdhci_pci_hw_reset(struct sdhci_host *host)
1018{
1019        struct sdhci_pci_slot *slot = sdhci_priv(host);
1020        int rst_n_gpio = slot->rst_n_gpio;
1021
1022        if (!gpio_is_valid(rst_n_gpio))
1023                return;
1024        gpio_set_value_cansleep(rst_n_gpio, 0);
1025        /* For eMMC, minimum is 1us but give it 10us for good measure */
1026        udelay(10);
1027        gpio_set_value_cansleep(rst_n_gpio, 1);
1028        /* For eMMC, minimum is 200us but give it 300us for good measure */
1029        usleep_range(300, 1000);
1030}
1031
1032static const struct sdhci_ops sdhci_pci_ops = {
1033        .enable_dma     = sdhci_pci_enable_dma,
1034        .platform_bus_width     = sdhci_pci_bus_width,
1035        .hw_reset               = sdhci_pci_hw_reset,
1036};
1037
1038/*****************************************************************************\
1039 *                                                                           *
1040 * Suspend/resume                                                            *
1041 *                                                                           *
1042\*****************************************************************************/
1043
1044#ifdef CONFIG_PM
1045
1046static int sdhci_pci_suspend(struct device *dev)
1047{
1048        struct pci_dev *pdev = to_pci_dev(dev);
1049        struct sdhci_pci_chip *chip;
1050        struct sdhci_pci_slot *slot;
1051        mmc_pm_flag_t slot_pm_flags;
1052        mmc_pm_flag_t pm_flags = 0;
1053        int i, ret;
1054
1055        chip = pci_get_drvdata(pdev);
1056        if (!chip)
1057                return 0;
1058
1059        for (i = 0; i < chip->num_slots; i++) {
1060                slot = chip->slots[i];
1061                if (!slot)
1062                        continue;
1063
1064                ret = sdhci_suspend_host(slot->host);
1065
1066                if (ret)
1067                        goto err_pci_suspend;
1068
1069                slot_pm_flags = slot->host->mmc->pm_flags;
1070                if (slot_pm_flags & MMC_PM_WAKE_SDIO_IRQ)
1071                        sdhci_enable_irq_wakeups(slot->host);
1072
1073                pm_flags |= slot_pm_flags;
1074        }
1075
1076        if (chip->fixes && chip->fixes->suspend) {
1077                ret = chip->fixes->suspend(chip);
1078                if (ret)
1079                        goto err_pci_suspend;
1080        }
1081
1082        pci_save_state(pdev);
1083        if (pm_flags & MMC_PM_KEEP_POWER) {
1084                if (pm_flags & MMC_PM_WAKE_SDIO_IRQ) {
1085                        pci_pme_active(pdev, true);
1086                        pci_enable_wake(pdev, PCI_D3hot, 1);
1087                }
1088                pci_set_power_state(pdev, PCI_D3hot);
1089        } else {
1090                pci_enable_wake(pdev, PCI_D3hot, 0);
1091                pci_disable_device(pdev);
1092                pci_set_power_state(pdev, PCI_D3hot);
1093        }
1094
1095        return 0;
1096
1097err_pci_suspend:
1098        while (--i >= 0)
1099                sdhci_resume_host(chip->slots[i]->host);
1100        return ret;
1101}
1102
1103static int sdhci_pci_resume(struct device *dev)
1104{
1105        struct pci_dev *pdev = to_pci_dev(dev);
1106        struct sdhci_pci_chip *chip;
1107        struct sdhci_pci_slot *slot;
1108        int i, ret;
1109
1110        chip = pci_get_drvdata(pdev);
1111        if (!chip)
1112                return 0;
1113
1114        pci_set_power_state(pdev, PCI_D0);
1115        pci_restore_state(pdev);
1116        ret = pci_enable_device(pdev);
1117        if (ret)
1118                return ret;
1119
1120        if (chip->fixes && chip->fixes->resume) {
1121                ret = chip->fixes->resume(chip);
1122                if (ret)
1123                        return ret;
1124        }
1125
1126        for (i = 0; i < chip->num_slots; i++) {
1127                slot = chip->slots[i];
1128                if (!slot)
1129                        continue;
1130
1131                ret = sdhci_resume_host(slot->host);
1132                if (ret)
1133                        return ret;
1134        }
1135
1136        return 0;
1137}
1138
1139#else /* CONFIG_PM */
1140
1141#define sdhci_pci_suspend NULL
1142#define sdhci_pci_resume NULL
1143
1144#endif /* CONFIG_PM */
1145
1146#ifdef CONFIG_PM_RUNTIME
1147
1148static int sdhci_pci_runtime_suspend(struct device *dev)
1149{
1150        struct pci_dev *pdev = container_of(dev, struct pci_dev, dev);
1151        struct sdhci_pci_chip *chip;
1152        struct sdhci_pci_slot *slot;
1153        int i, ret;
1154
1155        chip = pci_get_drvdata(pdev);
1156        if (!chip)
1157                return 0;
1158
1159        for (i = 0; i < chip->num_slots; i++) {
1160                slot = chip->slots[i];
1161                if (!slot)
1162                        continue;
1163
1164                ret = sdhci_runtime_suspend_host(slot->host);
1165
1166                if (ret)
1167                        goto err_pci_runtime_suspend;
1168        }
1169
1170        if (chip->fixes && chip->fixes->suspend) {
1171                ret = chip->fixes->suspend(chip);
1172                if (ret)
1173                        goto err_pci_runtime_suspend;
1174        }
1175
1176        return 0;
1177
1178err_pci_runtime_suspend:
1179        while (--i >= 0)
1180                sdhci_runtime_resume_host(chip->slots[i]->host);
1181        return ret;
1182}
1183
1184static int sdhci_pci_runtime_resume(struct device *dev)
1185{
1186        struct pci_dev *pdev = container_of(dev, struct pci_dev, dev);
1187        struct sdhci_pci_chip *chip;
1188        struct sdhci_pci_slot *slot;
1189        int i, ret;
1190
1191        chip = pci_get_drvdata(pdev);
1192        if (!chip)
1193                return 0;
1194
1195        if (chip->fixes && chip->fixes->resume) {
1196                ret = chip->fixes->resume(chip);
1197                if (ret)
1198                        return ret;
1199        }
1200
1201        for (i = 0; i < chip->num_slots; i++) {
1202                slot = chip->slots[i];
1203                if (!slot)
1204                        continue;
1205
1206                ret = sdhci_runtime_resume_host(slot->host);
1207                if (ret)
1208                        return ret;
1209        }
1210
1211        return 0;
1212}
1213
1214static int sdhci_pci_runtime_idle(struct device *dev)
1215{
1216        return 0;
1217}
1218
1219#else
1220
1221#define sdhci_pci_runtime_suspend       NULL
1222#define sdhci_pci_runtime_resume        NULL
1223#define sdhci_pci_runtime_idle          NULL
1224
1225#endif
1226
1227static const struct dev_pm_ops sdhci_pci_pm_ops = {
1228        .suspend = sdhci_pci_suspend,
1229        .resume = sdhci_pci_resume,
1230        .runtime_suspend = sdhci_pci_runtime_suspend,
1231        .runtime_resume = sdhci_pci_runtime_resume,
1232        .runtime_idle = sdhci_pci_runtime_idle,
1233};
1234
1235/*****************************************************************************\
1236 *                                                                           *
1237 * Device probing/removal                                                    *
1238 *                                                                           *
1239\*****************************************************************************/
1240
1241static struct sdhci_pci_slot *sdhci_pci_probe_slot(
1242        struct pci_dev *pdev, struct sdhci_pci_chip *chip, int first_bar,
1243        int slotno)
1244{
1245        struct sdhci_pci_slot *slot;
1246        struct sdhci_host *host;
1247        int ret, bar = first_bar + slotno;
1248
1249        if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
1250                dev_err(&pdev->dev, "BAR %d is not iomem. Aborting.\n", bar);
1251                return ERR_PTR(-ENODEV);
1252        }
1253
1254        if (pci_resource_len(pdev, bar) < 0x100) {
1255                dev_err(&pdev->dev, "Invalid iomem size. You may "
1256                        "experience problems.\n");
1257        }
1258
1259        if ((pdev->class & 0x0000FF) == PCI_SDHCI_IFVENDOR) {
1260                dev_err(&pdev->dev, "Vendor specific interface. Aborting.\n");
1261                return ERR_PTR(-ENODEV);
1262        }
1263
1264        if ((pdev->class & 0x0000FF) > PCI_SDHCI_IFVENDOR) {
1265                dev_err(&pdev->dev, "Unknown interface. Aborting.\n");
1266                return ERR_PTR(-ENODEV);
1267        }
1268
1269        host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));
1270        if (IS_ERR(host)) {
1271                dev_err(&pdev->dev, "cannot allocate host\n");
1272                return ERR_CAST(host);
1273        }
1274
1275        slot = sdhci_priv(host);
1276
1277        slot->chip = chip;
1278        slot->host = host;
1279        slot->pci_bar = bar;
1280        slot->rst_n_gpio = -EINVAL;
1281        slot->cd_gpio = -EINVAL;
1282
1283        /* Retrieve platform data if there is any */
1284        if (*sdhci_pci_get_data)
1285                slot->data = sdhci_pci_get_data(pdev, slotno);
1286
1287        if (slot->data) {
1288                if (slot->data->setup) {
1289                        ret = slot->data->setup(slot->data);
1290                        if (ret) {
1291                                dev_err(&pdev->dev, "platform setup failed\n");
1292                                goto free;
1293                        }
1294                }
1295                slot->rst_n_gpio = slot->data->rst_n_gpio;
1296                slot->cd_gpio = slot->data->cd_gpio;
1297        }
1298
1299        host->hw_name = "PCI";
1300        host->ops = &sdhci_pci_ops;
1301        host->quirks = chip->quirks;
1302        host->quirks2 = chip->quirks2;
1303
1304        host->irq = pdev->irq;
1305
1306        ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
1307        if (ret) {
1308                dev_err(&pdev->dev, "cannot request region\n");
1309                goto cleanup;
1310        }
1311
1312        host->ioaddr = pci_ioremap_bar(pdev, bar);
1313        if (!host->ioaddr) {
1314                dev_err(&pdev->dev, "failed to remap registers\n");
1315                ret = -ENOMEM;
1316                goto release;
1317        }
1318
1319        if (chip->fixes && chip->fixes->probe_slot) {
1320                ret = chip->fixes->probe_slot(slot);
1321                if (ret)
1322                        goto unmap;
1323        }
1324
1325        if (gpio_is_valid(slot->rst_n_gpio)) {
1326                if (!gpio_request(slot->rst_n_gpio, "eMMC_reset")) {
1327                        gpio_direction_output(slot->rst_n_gpio, 1);
1328                        slot->host->mmc->caps |= MMC_CAP_HW_RESET;
1329                } else {
1330                        dev_warn(&pdev->dev, "failed to request rst_n_gpio\n");
1331                        slot->rst_n_gpio = -EINVAL;
1332                }
1333        }
1334
1335        host->mmc->pm_caps = MMC_PM_KEEP_POWER | MMC_PM_WAKE_SDIO_IRQ;
1336        host->mmc->slotno = slotno;
1337        host->mmc->caps2 |= MMC_CAP2_NO_PRESCAN_POWERUP;
1338
1339        ret = sdhci_add_host(host);
1340        if (ret)
1341                goto remove;
1342
1343        sdhci_pci_add_own_cd(slot);
1344
1345        return slot;
1346
1347remove:
1348        if (gpio_is_valid(slot->rst_n_gpio))
1349                gpio_free(slot->rst_n_gpio);
1350
1351        if (chip->fixes && chip->fixes->remove_slot)
1352                chip->fixes->remove_slot(slot, 0);
1353
1354unmap:
1355        iounmap(host->ioaddr);
1356
1357release:
1358        pci_release_region(pdev, bar);
1359
1360cleanup:
1361        if (slot->data && slot->data->cleanup)
1362                slot->data->cleanup(slot->data);
1363
1364free:
1365        sdhci_free_host(host);
1366
1367        return ERR_PTR(ret);
1368}
1369
1370static void sdhci_pci_remove_slot(struct sdhci_pci_slot *slot)
1371{
1372        int dead;
1373        u32 scratch;
1374
1375        sdhci_pci_remove_own_cd(slot);
1376
1377        dead = 0;
1378        scratch = readl(slot->host->ioaddr + SDHCI_INT_STATUS);
1379        if (scratch == (u32)-1)
1380                dead = 1;
1381
1382        sdhci_remove_host(slot->host, dead);
1383
1384        if (gpio_is_valid(slot->rst_n_gpio))
1385                gpio_free(slot->rst_n_gpio);
1386
1387        if (slot->chip->fixes && slot->chip->fixes->remove_slot)
1388                slot->chip->fixes->remove_slot(slot, dead);
1389
1390        if (slot->data && slot->data->cleanup)
1391                slot->data->cleanup(slot->data);
1392
1393        pci_release_region(slot->chip->pdev, slot->pci_bar);
1394
1395        sdhci_free_host(slot->host);
1396}
1397
1398static void sdhci_pci_runtime_pm_allow(struct device *dev)
1399{
1400        pm_runtime_put_noidle(dev);
1401        pm_runtime_allow(dev);
1402        pm_runtime_set_autosuspend_delay(dev, 50);
1403        pm_runtime_use_autosuspend(dev);
1404        pm_suspend_ignore_children(dev, 1);
1405}
1406
1407static void sdhci_pci_runtime_pm_forbid(struct device *dev)
1408{
1409        pm_runtime_forbid(dev);
1410        pm_runtime_get_noresume(dev);
1411}
1412
1413static int sdhci_pci_probe(struct pci_dev *pdev,
1414                                     const struct pci_device_id *ent)
1415{
1416        struct sdhci_pci_chip *chip;
1417        struct sdhci_pci_slot *slot;
1418
1419        u8 slots, first_bar;
1420        int ret, i;
1421
1422        BUG_ON(pdev == NULL);
1423        BUG_ON(ent == NULL);
1424
1425        dev_info(&pdev->dev, "SDHCI controller found [%04x:%04x] (rev %x)\n",
1426                 (int)pdev->vendor, (int)pdev->device, (int)pdev->revision);
1427
1428        ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &slots);
1429        if (ret)
1430                return ret;
1431
1432        slots = PCI_SLOT_INFO_SLOTS(slots) + 1;
1433        dev_dbg(&pdev->dev, "found %d slot(s)\n", slots);
1434        if (slots == 0)
1435                return -ENODEV;
1436
1437        BUG_ON(slots > MAX_SLOTS);
1438
1439        ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &first_bar);
1440        if (ret)
1441                return ret;
1442
1443        first_bar &= PCI_SLOT_INFO_FIRST_BAR_MASK;
1444
1445        if (first_bar > 5) {
1446                dev_err(&pdev->dev, "Invalid first BAR. Aborting.\n");
1447                return -ENODEV;
1448        }
1449
1450        ret = pci_enable_device(pdev);
1451        if (ret)
1452                return ret;
1453
1454        chip = kzalloc(sizeof(struct sdhci_pci_chip), GFP_KERNEL);
1455        if (!chip) {
1456                ret = -ENOMEM;
1457                goto err;
1458        }
1459
1460        chip->pdev = pdev;
1461        chip->fixes = (const struct sdhci_pci_fixes *)ent->driver_data;
1462        if (chip->fixes) {
1463                chip->quirks = chip->fixes->quirks;
1464                chip->quirks2 = chip->fixes->quirks2;
1465                chip->allow_runtime_pm = chip->fixes->allow_runtime_pm;
1466        }
1467        chip->num_slots = slots;
1468
1469        pci_set_drvdata(pdev, chip);
1470
1471        if (chip->fixes && chip->fixes->probe) {
1472                ret = chip->fixes->probe(chip);
1473                if (ret)
1474                        goto free;
1475        }
1476
1477        slots = chip->num_slots;        /* Quirk may have changed this */
1478
1479        for (i = 0; i < slots; i++) {
1480                slot = sdhci_pci_probe_slot(pdev, chip, first_bar, i);
1481                if (IS_ERR(slot)) {
1482                        for (i--; i >= 0; i--)
1483                                sdhci_pci_remove_slot(chip->slots[i]);
1484                        ret = PTR_ERR(slot);
1485                        goto free;
1486                }
1487
1488                chip->slots[i] = slot;
1489        }
1490
1491        if (chip->allow_runtime_pm)
1492                sdhci_pci_runtime_pm_allow(&pdev->dev);
1493
1494        return 0;
1495
1496free:
1497        pci_set_drvdata(pdev, NULL);
1498        kfree(chip);
1499
1500err:
1501        pci_disable_device(pdev);
1502        return ret;
1503}
1504
1505static void sdhci_pci_remove(struct pci_dev *pdev)
1506{
1507        int i;
1508        struct sdhci_pci_chip *chip;
1509
1510        chip = pci_get_drvdata(pdev);
1511
1512        if (chip) {
1513                if (chip->allow_runtime_pm)
1514                        sdhci_pci_runtime_pm_forbid(&pdev->dev);
1515
1516                for (i = 0; i < chip->num_slots; i++)
1517                        sdhci_pci_remove_slot(chip->slots[i]);
1518
1519                pci_set_drvdata(pdev, NULL);
1520                kfree(chip);
1521        }
1522
1523        pci_disable_device(pdev);
1524}
1525
1526static struct pci_driver sdhci_driver = {
1527        .name =         "sdhci-pci",
1528        .id_table =     pci_ids,
1529        .probe =        sdhci_pci_probe,
1530        .remove =       sdhci_pci_remove,
1531        .driver =       {
1532                .pm =   &sdhci_pci_pm_ops
1533        },
1534};
1535
1536module_pci_driver(sdhci_driver);
1537
1538MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>");
1539MODULE_DESCRIPTION("Secure Digital Host Controller Interface PCI driver");
1540MODULE_LICENSE("GPL");
1541