Commit f781dd38 authored by Anton staaf's avatar Anton staaf Committed by Wolfgang Denk
Browse files

mmc: dcache: allocate cache aligned buffer for scr and switch_status

Currently the sd_change_freq function allocates two buffers on the
stack that it passes down to the MMC device driver.  These buffers
could be unaligned to the L1 dcache line size.  This causes problems
when using DMA and with caches enabled.

This patch correctly cache alignes the buffers used for reading the
scr register and switch status values from an MMC device.

Change-Id: Ifa8414f572ef907681bd2d5ff3950285a215357d
Signed-off-by: default avatarAnton Staaf <>
Cc: Lukasz Majewski <>
Cc: Mike Frysinger <>
Cc: Albert ARIBAUD <>
Acked-by: default avatarMike Frysinger <>
parent 96d21237
......@@ -702,8 +702,8 @@ int sd_change_freq(struct mmc *mmc)
int err;
struct mmc_cmd cmd;
uint scr[2];
uint switch_status[16];
ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
struct mmc_data data;
int timeout;
......@@ -731,7 +731,7 @@ int sd_change_freq(struct mmc *mmc)
timeout = 3;
data.dest = (char *)&scr;
data.dest = (char *)scr;
data.blocksize = 8;
data.blocks = 1;
data.flags = MMC_DATA_READ;
......@@ -773,7 +773,7 @@ retry_scr:
timeout = 4;
while (timeout--) {
err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
(u8 *)&switch_status);
(u8 *)switch_status);
if (err)
return err;
......@@ -787,7 +787,7 @@ retry_scr:
if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
return 0;
err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
if (err)
return err;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment