diff options
author | Ulf Hansson <ulf.hansson@stericsson.com> | 2011-09-21 10:50:58 +0200 |
---|---|---|
committer | Ulf HANSSON <ulf.hansson@stericsson.com> | 2011-09-21 11:20:20 +0200 |
commit | d234e16cccb7172e8c83938ea30a43f44e835e2c (patch) | |
tree | a900bb8d80fb3bf1170d49df8c6cde185be59eed /arch | |
parent | 34b69324b070f27c6b45925aa526a491366d7651 (diff) |
ux500: u8500: Change DMA configuration for SD-card
This patch is a mixture of two earlier patches:
By Sebastian Rasmussen:
ux500: Use other logical DMA channel for SD-card
Previously PoP eMMC SDI has been in the same event group as
SD-card SDI, which means that they have been sharing the
same physical DMA channels. Moreover one of those channels
was reserved for other purposes, causing transfers for each
interface to compete for the same physical DMA channel. In
addition there appears to be a HW issue that causes data to
be lost in the middle of DMA transfers, which ended up with
DMAC and MMCI not agreeing on how much data was still to be
transferred, thereby resulting in a hang and eventually in
a crash.
This patch moves SD-card DMA transfers to another event
group which means that it no longer competes for the same
physical DMA channel. This results in that no data is lost
in the transfers and no hang is observed.
By Rabin Vincent:
ux500: mop500: force SD/MMC and MSP2 TX onto different channels
SD/MMC with event line 1 can be in channel 0 or 1. Force both Rx
and Tx onto channel 0. Both will anyway not used at the same time,
and with this change channel 1 will be available for MSP2 Tx
without sharing.
Change-Id: I72c254b3258615755fb050595a4d82e4f76d2098
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/31603
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-ux500/board-mop500-sdi.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-sdi.c b/arch/arm/mach-ux500/board-mop500-sdi.c index f465de769da..2a2e8ecacea 100644 --- a/arch/arm/mach-ux500/board-mop500-sdi.c +++ b/arch/arm/mach-ux500/board-mop500-sdi.c @@ -69,19 +69,23 @@ static u32 mop500_sdi0_vdd_handler(struct device *dev, unsigned int vdd, struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = { .mode = STEDMA40_MODE_LOGICAL, .dir = STEDMA40_PERIPH_TO_MEM, - .src_dev_type = DB8500_DMA_DEV29_SD_MM0_RX, + .src_dev_type = DB8500_DMA_DEV1_SD_MMC0_RX, .dst_dev_type = STEDMA40_DEV_DST_MEMORY, .src_info.data_width = STEDMA40_WORD_WIDTH, .dst_info.data_width = STEDMA40_WORD_WIDTH, + .use_fixed_channel = true, + .phy_channel = 0, }; static struct stedma40_chan_cfg mop500_sdi0_dma_cfg_tx = { .mode = STEDMA40_MODE_LOGICAL, .dir = STEDMA40_MEM_TO_PERIPH, .src_dev_type = STEDMA40_DEV_SRC_MEMORY, - .dst_dev_type = DB8500_DMA_DEV29_SD_MM0_TX, + .dst_dev_type = DB8500_DMA_DEV1_SD_MMC0_TX, .src_info.data_width = STEDMA40_WORD_WIDTH, .dst_info.data_width = STEDMA40_WORD_WIDTH, + .use_fixed_channel = true, + .phy_channel = 0, }; #endif |