Revert "mmc: mmcblk: Add support for deferred SD bus resume"
[firefly-linux-kernel-4.4.55.git] / drivers / mmc / card / block.c
index 23a0e3f20d7e7d0669d66da6e1e784ddf657dffb..85f0e8cd875bac4f153788ff0012fc0b27e05dd5 100644 (file)
 
 MODULE_ALIAS("mmc:block");
 
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
-static DEFINE_MUTEX(block_mutex); //added by xbw at 2011-04-21
-#endif
-
 /*
  * max 8 partitions per card
  */
@@ -89,14 +85,7 @@ static void mmc_blk_put(struct mmc_blk_data *md)
        mutex_lock(&open_lock);
        md->usage--;
        if (md->usage == 0) {
-               int devmaj = MAJOR(disk_devt(md->disk));
                int devidx = MINOR(disk_devt(md->disk)) >> MMC_SHIFT;
-
-               if (!devmaj)
-                       devidx = md->disk->first_minor >> MMC_SHIFT;
-
-               blk_cleanup_queue(md->queue.queue);
-
                __clear_bit(devidx, dev_use);
 
                put_disk(md->disk);
@@ -109,10 +98,6 @@ static int mmc_blk_open(struct block_device *bdev, fmode_t mode)
 {
        struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk);
        int ret = -ENXIO;
-       
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
-       mutex_lock(&block_mutex); //added by xbw at 2011-04-21
-#endif
 
        if (md) {
                if (md->usage == 2)
@@ -124,9 +109,6 @@ static int mmc_blk_open(struct block_device *bdev, fmode_t mode)
                        ret = -EROFS;
                }
        }
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
-       mutex_unlock(&block_mutex);
-#endif 
 
        return ret;
 }
@@ -134,17 +116,8 @@ static int mmc_blk_open(struct block_device *bdev, fmode_t mode)
 static int mmc_blk_release(struct gendisk *disk, fmode_t mode)
 {
        struct mmc_blk_data *md = disk->private_data;
-       
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
-       mutex_lock(&block_mutex); //added by xbw at 2011-04-21
-#endif
 
        mmc_blk_put(md);
-
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)      
-       mutex_unlock(&block_mutex);
-#endif
-
        return 0;
 }
 
@@ -244,13 +217,6 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
        return result;
 }
 
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD) //Deleted by xbw@2011-03-21
-//static u32 get_card_status(struct mmc_card *card, struct request *req)
-//{
-//   return 0;
-//}
-
-#else
 static u32 get_card_status(struct mmc_card *card, struct request *req)
 {
        struct mmc_command cmd;
@@ -263,38 +229,10 @@ static u32 get_card_status(struct mmc_card *card, struct request *req)
        cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
        err = mmc_wait_for_cmd(card->host, &cmd, 0);
        if (err)
-               printk(KERN_DEBUG "%s: error %d sending status comand",
+               printk(KERN_ERR "%s: error %d sending status comand",
                       req->rq_disk->disk_name, err);
        return cmd.resp[0];
 }
-#endif
-
-static int
-mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
-{
-       struct mmc_command cmd;
-       int err;
-
-       /* Block-addressed cards ignore MMC_SET_BLOCKLEN. */
-       if (mmc_card_blockaddr(card))
-               return 0;
-
-       mmc_claim_host(card->host);
-       cmd.opcode = MMC_SET_BLOCKLEN;
-       cmd.arg = 512;
-       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
-       err = mmc_wait_for_cmd(card->host, &cmd, 5);
-       mmc_release_host(card->host);
-
-       if (err) {
-               printk(KERN_ERR "%s: unable to set block size to %d: %d\n",
-                       md->disk->disk_name, cmd.arg, err);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
 
 static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
 {
@@ -303,32 +241,16 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
        struct mmc_blk_request brq;
        int ret = 1, disable_multi = 0;
 
-#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME
-       if (mmc_bus_needs_resume(card->host)) {
-               mmc_resume_bus(card->host);
-               mmc_blk_set_blksize(md, card);
-       }
-#endif
-
        mmc_claim_host(card->host);
 
        do {
-           #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD) 
-               //struct mmc_command cmd;//Deleted by xbw@2011-03-21
-               #else
-               struct mmc_command cmd; 
-               #endif
-               
+               struct mmc_command cmd;
                u32 readcmd, writecmd, status = 0;
 
                memset(&brq, 0, sizeof(struct mmc_blk_request));
                brq.mrq.cmd = &brq.cmd;
                brq.mrq.data = &brq.data;
-               
-               #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
-               brq.cmd.retries = 2; //suppot retry read-write; added by xbw@2011-03-21
-        #endif
-        
+
                brq.cmd.arg = blk_rq_pos(req);
                if (!mmc_card_blockaddr(card))
                        brq.cmd.arg <<= 9;
@@ -408,11 +330,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
 
                mmc_queue_bounce_post(mq);
 
-        #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD) 
-        //not turn CMD18 to CMD17. deleted by xbw at 2011-04-21
-
-        #else
-
                /*
                 * Check for errors here, but don't jump to cmd_err
                 * until later as we need to wait for the card to leave
@@ -421,19 +338,16 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                if (brq.cmd.error || brq.data.error || brq.stop.error) {
                        if (brq.data.blocks > 1 && rq_data_dir(req) == READ) {
                                /* Redo read one sector at a time */
-                               printk(KERN_DEBUG "%s: retrying using single "
+                               printk(KERN_WARNING "%s: retrying using single "
                                       "block read\n", req->rq_disk->disk_name);
                                disable_multi = 1;
                                continue;
                        }
                        status = get_card_status(card, req);
-               } else if (disable_multi == 1) {
-                       disable_multi = 0;
-               }   
-        #endif
+               }
 
                if (brq.cmd.error) {
-                       printk(KERN_DEBUG "%s: error %d sending read/write "
+                       printk(KERN_ERR "%s: error %d sending read/write "
                               "command, response %#x, card status %#x\n",
                               req->rq_disk->disk_name, brq.cmd.error,
                               brq.cmd.resp[0], status);
@@ -443,7 +357,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                        if (brq.data.error == -ETIMEDOUT && brq.mrq.stop)
                                /* 'Stop' response contains card status */
                                status = brq.mrq.stop->resp[0];
-                       printk(KERN_DEBUG "%s: error %d transferring data,"
+                       printk(KERN_ERR "%s: error %d transferring data,"
                               " sector %u, nr %u, card status %#x\n",
                               req->rq_disk->disk_name, brq.data.error,
                               (unsigned)blk_rq_pos(req),
@@ -451,16 +365,12 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                }
 
                if (brq.stop.error) {
-                       printk(KERN_DEBUG "%s: error %d sending stop command, "
+                       printk(KERN_ERR "%s: error %d sending stop command, "
                               "response %#x, card status %#x\n",
                               req->rq_disk->disk_name, brq.stop.error,
                               brq.stop.resp[0], status);
                }
 
- #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)  
- //Deleted by xbw@2011-03-21
-
- #else
                if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
                        do {
                                int err;
@@ -470,7 +380,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                                cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
                                err = mmc_wait_for_cmd(card->host, &cmd, 5);
                                if (err) {
-                                       printk(KERN_DEBUG "%s: error %d requesting status\n",
+                                       printk(KERN_ERR "%s: error %d requesting status\n",
                                               req->rq_disk->disk_name, err);
                                        goto cmd_err;
                                }
@@ -490,9 +400,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                                goto cmd_err;
 #endif
                }
-#endif         
 
-               if (brq.cmd.error || brq.stop.error || brq.data.error) {                
+               if (brq.cmd.error || brq.stop.error || brq.data.error) {
                        if (rq_data_dir(req) == READ) {
                                /*
                                 * After an error, we redo I/O one sector at a
@@ -620,11 +529,6 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
 
        sprintf(md->disk->disk_name, "mmcblk%d", devidx);
 
-#if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)  
-       printk("%s..%d **** devidx=%d, dev_use[0]=%lu, disk_name=%s *** ==xbw[%s]==\n",\
-           __FUNCTION__,__LINE__, devidx, dev_use[0], md->disk->disk_name,mmc_hostname(card->host));
-#endif
-    
        blk_queue_logical_block_size(md->queue.queue, 512);
 
        if (!mmc_card_sd(card) && mmc_card_blockaddr(card)) {
@@ -651,6 +555,32 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
        return ERR_PTR(ret);
 }
 
+static int
+mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
+{
+       struct mmc_command cmd;
+       int err;
+
+       /* Block-addressed cards ignore MMC_SET_BLOCKLEN. */
+       if (mmc_card_blockaddr(card))
+               return 0;
+
+       mmc_claim_host(card->host);
+       cmd.opcode = MMC_SET_BLOCKLEN;
+       cmd.arg = 512;
+       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
+       err = mmc_wait_for_cmd(card->host, &cmd, 5);
+       mmc_release_host(card->host);
+
+       if (err) {
+               printk(KERN_ERR "%s: unable to set block size to %d: %d\n",
+                       md->disk->disk_name, cmd.arg, err);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int mmc_blk_probe(struct mmc_card *card)
 {
        struct mmc_blk_data *md;
@@ -679,14 +609,10 @@ static int mmc_blk_probe(struct mmc_card *card)
                cap_str, md->read_only ? "(ro)" : "");
 
        mmc_set_drvdata(card, md);
-#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME
-       mmc_set_bus_resume_policy(card->host, 1);
-#endif
        add_disk(md->disk);
        return 0;
 
  out:
-       mmc_cleanup_queue(&md->queue);
        mmc_blk_put(md);
 
        return err;
@@ -706,9 +632,6 @@ static void mmc_blk_remove(struct mmc_card *card)
                mmc_blk_put(md);
        }
        mmc_set_drvdata(card, NULL);
-#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME
-       mmc_set_bus_resume_policy(card->host, 0);
-#endif
 }
 
 #ifdef CONFIG_PM
@@ -727,9 +650,7 @@ static int mmc_blk_resume(struct mmc_card *card)
        struct mmc_blk_data *md = mmc_get_drvdata(card);
 
        if (md) {
-#ifndef CONFIG_MMC_BLOCK_DEFERRED_RESUME
                mmc_blk_set_blksize(md, card);
-#endif
                mmc_queue_resume(&md->queue);
        }
        return 0;