summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2015-10-15 22:26:03 +0200
committerArnd Bergmann <arnd@arndb.de>2015-10-15 22:26:03 +0200
commit7a0205bc1895132d6a56fbbadf01885c4a4f0743 (patch)
tree97d487d8615a6a4cbd226da825b3570897c63d47 /drivers
parentMerge tag 'arm-scpi-for-v4.4' of git://git.kernel.org/pub/scm/linux/kernel/gi... (diff)
parentdoc: dt: arm,pl172: add description of PL175 and PL176 controllers (diff)
downloadlinux-7a0205bc1895132d6a56fbbadf01885c4a4f0743.tar.xz
linux-7a0205bc1895132d6a56fbbadf01885c4a4f0743.zip
Merge tag 'drivers_pl172_for_4.4' of https://github.com/manabian/linux-lpc into next/drivers
Merge "PL172 driver updates for v4.4" from Joachim Eastwood: Support for additional ARM MPMCs to the PL172 driver and an update to the bindings documentation to reflect this from Vladimir Zapolskiy. "The change adds support of ARM PrimeCell PL175 MPMC and PL176 MPMC, the static memory controllers on devices are similar to one found on ARM PrimeCell PL172, add support to the existing driver." * tag 'drivers_pl172_for_4.4' of https://github.com/manabian/linux-lpc: doc: dt: arm,pl172: add description of PL175 and PL176 controllers memory: pl172: add ARM PrimeCell PL176 MPMC support memory: pl172: add ARM PrimeCell PL175 MPMC support memory: pl172: correct MPMC peripheral ID register bits
Diffstat (limited to 'drivers')
-rw-r--r--drivers/memory/pl172.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/drivers/memory/pl172.c b/drivers/memory/pl172.c
index b2ef6072fbf4..ff57195b4e37 100644
--- a/drivers/memory/pl172.c
+++ b/drivers/memory/pl172.c
@@ -118,7 +118,8 @@ static int pl172_setup_static(struct amba_device *adev,
if (of_property_read_bool(np, "mpmc,extended-wait"))
cfg |= MPMC_STATIC_CFG_EW;
- if (of_property_read_bool(np, "mpmc,buffer-enable"))
+ if (amba_part(adev) == 0x172 &&
+ of_property_read_bool(np, "mpmc,buffer-enable"))
cfg |= MPMC_STATIC_CFG_B;
if (of_property_read_bool(np, "mpmc,write-protect"))
@@ -190,6 +191,8 @@ static int pl172_parse_cs_config(struct amba_device *adev,
}
static const char * const pl172_revisions[] = {"r1", "r2", "r2p3", "r2p4"};
+static const char * const pl175_revisions[] = {"r1"};
+static const char * const pl176_revisions[] = {"r0"};
static int pl172_probe(struct amba_device *adev, const struct amba_id *id)
{
@@ -202,6 +205,12 @@ static int pl172_probe(struct amba_device *adev, const struct amba_id *id)
if (amba_part(adev) == 0x172) {
if (amba_rev(adev) < ARRAY_SIZE(pl172_revisions))
rev = pl172_revisions[amba_rev(adev)];
+ } else if (amba_part(adev) == 0x175) {
+ if (amba_rev(adev) < ARRAY_SIZE(pl175_revisions))
+ rev = pl175_revisions[amba_rev(adev)];
+ } else if (amba_part(adev) == 0x176) {
+ if (amba_rev(adev) < ARRAY_SIZE(pl176_revisions))
+ rev = pl176_revisions[amba_rev(adev)];
}
dev_info(dev, "ARM PL%x revision %s\n", amba_part(adev), rev);
@@ -278,9 +287,20 @@ static int pl172_remove(struct amba_device *adev)
}
static const struct amba_id pl172_ids[] = {
+ /* PrimeCell MPMC PL172, EMC found on NXP LPC18xx and LPC43xx */
{
- .id = 0x07341172,
- .mask = 0xffffffff,
+ .id = 0x07041172,
+ .mask = 0x3f0fffff,
+ },
+ /* PrimeCell MPMC PL175, EMC found on NXP LPC32xx */
+ {
+ .id = 0x07041175,
+ .mask = 0x3f0fffff,
+ },
+ /* PrimeCell MPMC PL176 */
+ {
+ .id = 0x89041176,
+ .mask = 0xff0fffff,
},
{ 0, 0 },
};