aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Moll <pawel.moll@arm.com>2013-01-24 08:12:45 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2013-01-28 09:11:53 -0500
commit3a37298ada749897ec2c5c1cdcd5932218eb2928 (patch)
tree624b06f6ef309c41a8c6aee5bda6fa6c10d2ec4c
parentf4670daef5e81aa312f5a18f571dbd8169ce079e (diff)
ARM: 7631/1: mmc: mmci: Add new VE MMCI variant
The Versatile Express IOFPGA as shipped on VECD 5.0 (bitfiles v108/208 and v116/216) contains a modified version of the PL180 MMCI, with PeriphID Configuration value changed to 0x2. This version adds an optional "hardware flow control" feature. When enabled MMC card clock will be automatically disabled when FIFO is about to over/underflow and re-enabled once the host retrieved some data. This makes the controller immune to over/underrun errors caused by big interrupt handling latencies. This patch adds relevant device variant in the driver. Signed-off-by: Pawel Moll <pawel.moll@arm.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/mmc/host/mmci.c13
-rw-r--r--drivers/mmc/host/mmci.h2
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 04efcdfeb5e1..dee9b73ce293 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -90,6 +90,14 @@ static struct variant_data variant_arm_extended_fifo = {
90 .pwrreg_powerup = MCI_PWR_UP, 90 .pwrreg_powerup = MCI_PWR_UP,
91}; 91};
92 92
93static struct variant_data variant_arm_extended_fifo_hwfc = {
94 .fifosize = 128 * 4,
95 .fifohalfsize = 64 * 4,
96 .clkreg_enable = MCI_ARM_HWFCEN,
97 .datalength_bits = 16,
98 .pwrreg_powerup = MCI_PWR_UP,
99};
100
93static struct variant_data variant_u300 = { 101static struct variant_data variant_u300 = {
94 .fifosize = 16 * 4, 102 .fifosize = 16 * 4,
95 .fifohalfsize = 8 * 4, 103 .fifohalfsize = 8 * 4,
@@ -1672,6 +1680,11 @@ static struct amba_id mmci_ids[] = {
1672 .data = &variant_arm_extended_fifo, 1680 .data = &variant_arm_extended_fifo,
1673 }, 1681 },
1674 { 1682 {
1683 .id = 0x02041180,
1684 .mask = 0xff0fffff,
1685 .data = &variant_arm_extended_fifo_hwfc,
1686 },
1687 {
1675 .id = 0x00041181, 1688 .id = 0x00041181,
1676 .mask = 0x000fffff, 1689 .mask = 0x000fffff,
1677 .data = &variant_arm, 1690 .data = &variant_arm,
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index a22213eeff88..1f33ad5333a0 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -28,6 +28,8 @@
28#define MCI_ST_UX500_NEG_EDGE (1 << 13) 28#define MCI_ST_UX500_NEG_EDGE (1 << 13)
29#define MCI_ST_UX500_HWFCEN (1 << 14) 29#define MCI_ST_UX500_HWFCEN (1 << 14)
30#define MCI_ST_UX500_CLK_INV (1 << 15) 30#define MCI_ST_UX500_CLK_INV (1 << 15)
31/* Modified PL180 on Versatile Express platform */
32#define MCI_ARM_HWFCEN (1 << 12)
31 33
32#define MMCIARGUMENT 0x008 34#define MMCIARGUMENT 0x008
33#define MMCICOMMAND 0x00c 35#define MMCICOMMAND 0x00c