Messages in this thread | | | Date | Mon, 12 Feb 2007 16:44:31 -0800 (PST) | From | Alex Dubov <> | Subject | Re: Recent and not-so problems with tifm_sd driver |
| |
--- Pierre Ossman <drzeus-mmc@drzeus.cx> wrote:
> Alex Dubov wrote: > > I removed that line altogether (it does not really needed as mmc host will not be accessed > > anymore). The problem is more elaborate. Here, the card fails, mmc_host_remove is called > without > > sleep beforehand, and "after remove" message is printed immediately after it. Only then, > mmc_block > > remembers to finish its business. If I leave the sleep in place, mmc_block's stuff will get > > scheduled before the mmc_remove_host and everything will be all right. > > You may also notice that host is already powered off ("Setting ... power 0" message) and still > > mmc_block continues to make requests like nothing happened. > > > > How did you do the "after remove" detection? Patch? > (Power message is printed by ios callback) Here's my current (SVN) remove function:
static void tifm_sd_remove(struct tifm_dev *sock) { struct mmc_host *mmc = tifm_get_drvdata(sock); struct tifm_sd *host = mmc_priv(mmc); unsigned long flags;
tasklet_kill(&host->finish_tasklet); spin_lock_irqsave(&sock->lock, flags); host->flags |= EJECT; writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE); mmiowb(); if (host->req) { writel(TIFM_FIFO_INT_SETALL, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR); writel(0, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET); host->req->cmd->error = MMC_ERR_TIMEOUT; if (host->req->stop) host->req->stop->error = MMC_ERR_TIMEOUT; tasklet_schedule(&host->finish_tasklet); } spin_unlock_irqrestore(&sock->lock, flags); // temporary hack msleep(1000); mmc_remove_host(mmc); dev_dbg(&sock->dev, "after remove\n");
/* The meaning of the bit majority in this constant is unknown. */ writel(0xfff8 & readl(sock->addr + SOCK_CONTROL), sock->addr + SOCK_CONTROL);
mmc_free_host(mmc); }
____________________________________________________________________________________ Finding fabulous fares is fun. Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains. http://farechase.yahoo.com/promo-generic-14795097 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |