diff options
Diffstat (limited to 'drivers/mmc/host/tifm_sd.c')
| -rw-r--r-- | drivers/mmc/host/tifm_sd.c | 28 | 
1 files changed, 10 insertions, 18 deletions
diff --git a/drivers/mmc/host/tifm_sd.c b/drivers/mmc/host/tifm_sd.c index 63917070b1a7..b5a2f2f25ad9 100644 --- a/drivers/mmc/host/tifm_sd.c +++ b/drivers/mmc/host/tifm_sd.c @@ -116,7 +116,7 @@ static void tifm_sd_read_fifo(struct tifm_sd *host, struct page *pg,  	unsigned char *buf;  	unsigned int pos = 0, val; -	buf = kmap_atomic(pg) + off; +	buf = kmap_local_page(pg) + off;  	if (host->cmd_flags & DATA_CARRY) {  		buf[pos++] = host->bounce_buf_data[0];  		host->cmd_flags &= ~DATA_CARRY; @@ -132,7 +132,7 @@ static void tifm_sd_read_fifo(struct tifm_sd *host, struct page *pg,  		}  		buf[pos++] = (val >> 8) & 0xff;  	} -	kunmap_atomic(buf - off); +	kunmap_local(buf - off);  }  static void tifm_sd_write_fifo(struct tifm_sd *host, struct page *pg, @@ -142,7 +142,7 @@ static void tifm_sd_write_fifo(struct tifm_sd *host, struct page *pg,  	unsigned char *buf;  	unsigned int pos = 0, val; -	buf = kmap_atomic(pg) + off; +	buf = kmap_local_page(pg) + off;  	if (host->cmd_flags & DATA_CARRY) {  		val = host->bounce_buf_data[0] | ((buf[pos++] << 8) & 0xff00);  		writel(val, sock->addr + SOCK_MMCSD_DATA); @@ -159,7 +159,7 @@ static void tifm_sd_write_fifo(struct tifm_sd *host, struct page *pg,  		val |= (buf[pos++] << 8) & 0xff00;  		writel(val, sock->addr + SOCK_MMCSD_DATA);  	} -	kunmap_atomic(buf - off); +	kunmap_local(buf - off);  }  static void tifm_sd_transfer_data(struct tifm_sd *host) @@ -210,13 +210,13 @@ static void tifm_sd_copy_page(struct page *dst, unsigned int dst_off,  			      struct page *src, unsigned int src_off,  			      unsigned int count)  { -	unsigned char *src_buf = kmap_atomic(src) + src_off; -	unsigned char *dst_buf = kmap_atomic(dst) + dst_off; +	unsigned char *src_buf = kmap_local_page(src) + src_off; +	unsigned char *dst_buf = kmap_local_page(dst) + dst_off;  	memcpy(dst_buf, src_buf, count); -	kunmap_atomic(dst_buf - dst_off); -	kunmap_atomic(src_buf - src_off); +	kunmap_local(dst_buf - dst_off); +	kunmap_local(src_buf - src_off);  }  static void tifm_sd_bounce_block(struct tifm_sd *host, struct mmc_data *r_data) @@ -264,16 +264,13 @@ static int tifm_sd_set_dma_data(struct tifm_sd *host, struct mmc_data *r_data)  	unsigned int t_size = TIFM_DMA_TSIZE * r_data->blksz;  	unsigned int dma_len, dma_blk_cnt, dma_off;  	struct scatterlist *sg = NULL; -	unsigned long flags;  	if (host->sg_pos == host->sg_len)  		return 1;  	if (host->cmd_flags & DATA_CARRY) {  		host->cmd_flags &= ~DATA_CARRY; -		local_irq_save(flags);  		tifm_sd_bounce_block(host, r_data); -		local_irq_restore(flags);  		if (host->sg_pos == host->sg_len)  			return 1;  	} @@ -300,11 +297,9 @@ static int tifm_sd_set_dma_data(struct tifm_sd *host, struct mmc_data *r_data)  	if (dma_blk_cnt)  		sg = &r_data->sg[host->sg_pos];  	else if (dma_len) { -		if (r_data->flags & MMC_DATA_WRITE) { -			local_irq_save(flags); +		if (r_data->flags & MMC_DATA_WRITE)  			tifm_sd_bounce_block(host, r_data); -			local_irq_restore(flags); -		} else +		else  			host->cmd_flags |= DATA_CARRY;  		sg = &host->bounce_buf; @@ -506,7 +501,6 @@ static void tifm_sd_card_event(struct tifm_dev *sock)  	unsigned int host_status = 0;  	int cmd_error = 0;  	struct mmc_command *cmd = NULL; -	unsigned long flags;  	spin_lock(&sock->lock);  	host = mmc_priv((struct mmc_host*)tifm_get_drvdata(sock)); @@ -570,9 +564,7 @@ static void tifm_sd_card_event(struct tifm_dev *sock)  			if (host_status & (TIFM_MMCSD_AE | TIFM_MMCSD_AF  					   | TIFM_MMCSD_BRS)) { -				local_irq_save(flags);  				tifm_sd_transfer_data(host); -				local_irq_restore(flags);  				host_status &= ~TIFM_MMCSD_AE;  			}  		}  |