diff --git a/[refs] b/[refs] index 57f4e761bb4c..c85c9e172e90 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 118cd17d4137f34c747c32765c1cb4d3910c04d4 +refs/heads/master: 9e506f35b1dc327c448d4791bc098f07b9b2efe9 diff --git a/trunk/drivers/mmc/host/sdhci.c b/trunk/drivers/mmc/host/sdhci.c index fcdd00785033..6c866b43b03c 100644 --- a/trunk/drivers/mmc/host/sdhci.c +++ b/trunk/drivers/mmc/host/sdhci.c @@ -378,16 +378,16 @@ static void sdhci_kunmap_atomic(void *buffer, unsigned long *flags) static void sdhci_set_adma_desc(u8 *desc, u32 addr, int len, unsigned cmd) { - desc[7] = (addr >> 24) & 0xff; - desc[6] = (addr >> 16) & 0xff; - desc[5] = (addr >> 8) & 0xff; - desc[4] = (addr >> 0) & 0xff; + __le32 *dataddr = (__le32 __force *)(desc + 4); + __le16 *cmdlen = (__le16 __force *)desc; - desc[3] = (len >> 8) & 0xff; - desc[2] = (len >> 0) & 0xff; + /* SDHCI specification says ADMA descriptors should be 4 byte + * aligned, so using 16 or 32bit operations should be safe. */ - desc[0] = cmd & 0xff; - desc[1] = cmd >> 8; + cmdlen[0] = cpu_to_le16(cmd); + cmdlen[1] = cpu_to_le16(len); + + dataddr[0] = cpu_to_le32(addr); } static int sdhci_adma_table_pre(struct sdhci_host *host,