Skip to content

Commit

Permalink
mmc: sdio: fix alignment issue in struct sdio_func
Browse files Browse the repository at this point in the history
Certain 64-bit systems (e.g. Amlogic Meson GX) require buffers to be
used for DMA to be 8-byte-aligned. struct sdio_func has an embedded
small DMA buffer not meeting this requirement.
When testing switching to descriptor chain mode in meson-gx driver
SDIO is broken therefore. Fix this by allocating the small DMA buffer
separately as kmalloc ensures that the returned memory area is
properly aligned for every basic data type.

Signed-off-by: Heiner Kallweit <[email protected]>
Tested-by: Helmut Klein <[email protected]>
Signed-off-by: Ulf Hansson <[email protected]>
  • Loading branch information
hkallweit authored and storulf committed Apr 18, 2017
1 parent 4f7d029 commit 5ef1ecf
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
12 changes: 11 additions & 1 deletion drivers/mmc/core/sdio_bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ static void sdio_release_func(struct device *dev)
sdio_free_func_cis(func);

kfree(func->info);

kfree(func->tmpbuf);
kfree(func);
}

Expand All @@ -282,6 +282,16 @@ struct sdio_func *sdio_alloc_func(struct mmc_card *card)
if (!func)
return ERR_PTR(-ENOMEM);

/*
* allocate buffer separately to make sure it's properly aligned for
* DMA usage (incl. 64 bit DMA)
*/
func->tmpbuf = kmalloc(4, GFP_KERNEL);
if (!func->tmpbuf) {
kfree(func);
return ERR_PTR(-ENOMEM);
}

func->card = card;

device_initialize(&func->dev);
Expand Down
2 changes: 1 addition & 1 deletion include/linux/mmc/sdio_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct sdio_func {
unsigned int state; /* function state */
#define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */

u8 tmpbuf[4]; /* DMA:able scratch buffer */
u8 *tmpbuf; /* DMA:able scratch buffer */

unsigned num_info; /* number of info strings */
const char **info; /* info strings */
Expand Down

0 comments on commit 5ef1ecf

Please sign in to comment.