Message ID | 1430757092-15847-1-git-send-email-joakim.tjernlund@transmode.se (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Monday 04 May 2015 18:31:31 Joakim Tjernlund wrote: > @@ -252,6 +260,8 @@ static void esdhc_of_platform_init(struct sdhci_host *host) > > if (vvn > VENDOR_V_22) > host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; > + > + host->mmc->caps |= MMC_CAP_8_BIT_DATA; > } > Shouldn't this check the "bus-width" property before setting the width? There might be an eMMC or SDIO with 4-bit interface connected. Arnd
On Mon, 2015-05-04 at 19:31 +0200, Arnd Bergmann wrote: > On Monday 04 May 2015 18:31:31 Joakim Tjernlund wrote: > > @@ -252,6 +260,8 @@ static void esdhc_of_platform_init(struct sdhci_host *host) > > > > if (vvn > VENDOR_V_22) > > host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; > > + > > + host->mmc->caps |= MMC_CAP_8_BIT_DATA; > > } > > > > Shouldn't this check the "bus-width" property before setting the width? > > There might be an eMMC or SDIO with 4-bit interface connected. This is for an eMMC chip we got and I THINK(this is new to me) that this only allows 8 bit negotiation but I might be way off. Anyone knows for sure? Jocke
On Mon, 2015-05-04 at 21:17 +0000, Joakim Tjernlund wrote: > On Mon, 2015-05-04 at 19:31 +0200, Arnd Bergmann wrote: > > On Monday 04 May 2015 18:31:31 Joakim Tjernlund wrote: > > > @@ -252,6 +260,8 @@ static void esdhc_of_platform_init(struct sdhci_host *host) > > > > > > if (vvn > VENDOR_V_22) > > > host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; > > > + > > > + host->mmc->caps |= MMC_CAP_8_BIT_DATA; > > > } > > > > > > > Shouldn't this check the "bus-width" property before setting the width? > > > > There might be an eMMC or SDIO with 4-bit interface connected. > > This is for an eMMC chip we got and I THINK(this is new to me) that > this only allows 8 bit negotiation but I might be way off. > > Anyone knows for sure? hmm, I need to look some more at this. There is bus-with/8BIT all over mmc and I have probably missed something. Jocke
On Monday 04 May 2015 21:17:27 Joakim Tjernlund wrote: > On Mon, 2015-05-04 at 19:31 +0200, Arnd Bergmann wrote: > > On Monday 04 May 2015 18:31:31 Joakim Tjernlund wrote: > > > @@ -252,6 +260,8 @@ static void esdhc_of_platform_init(struct sdhci_host *host) > > > > > > if (vvn > VENDOR_V_22) > > > host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; > > > + > > > + host->mmc->caps |= MMC_CAP_8_BIT_DATA; > > > } > > > > > > > Shouldn't this check the "bus-width" property before setting the width? > > > > There might be an eMMC or SDIO with 4-bit interface connected. > > This is for an eMMC chip we got and I THINK(this is new to me) that > this only allows 8 bit negotiation but I might be way off. > > Anyone knows for sure? > Most mmc host controllers can work with both eMMC and SD cards or some of the less common variants (SDIO, eSD, MMC, ...), and most of those are not 8 bit wide. Arnd
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c index 22e9111..7130130 100644 --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c @@ -82,6 +82,10 @@ static u8 esdhc_readb(struct sdhci_host *host, int reg) /* fixup the result */ ret &= ~SDHCI_CTRL_DMA_MASK; ret |= dma_bits; + + /* 8BIT is bit 29 in Control register */ + ret |= ((ret << 3) & SDHCI_CTRL_8BITBUS); + ret &= ~(SDHCI_CTRL_8BITBUS >> 3); } return ret; @@ -134,6 +138,10 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg) dma_bits); val &= ~SDHCI_CTRL_DMA_MASK; val |= in_be32(host->ioaddr + reg) & SDHCI_CTRL_DMA_MASK; + + /* 8BIT is bit 29 in Control register */ + val |= ((val & SDHCI_CTRL_8BITBUS) >> 3); + val = (val & ~SDHCI_CTRL_8BITBUS); } /* Prevent SDHCI core from writing reserved bits (e.g. HISPD). */ @@ -252,6 +260,8 @@ static void esdhc_of_platform_init(struct sdhci_host *host) if (vvn > VENDOR_V_22) host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; + + host->mmc->caps |= MMC_CAP_8_BIT_DATA; } static void esdhc_pltfm_set_bus_width(struct sdhci_host *host, int width)
Signed-off-by: Joakim Tjernlund <joakim.tjernlund@transmode.se> --- drivers/mmc/host/sdhci-of-esdhc.c | 10 ++++++++++ 1 file changed, 10 insertions(+)