summaryrefslogtreecommitdiffstats
path: root/lib/logic_iomem.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2021-09-15 20:30:22 +0200
committerRichard Weinberger <richard@nod.at>2021-12-21 21:28:20 +0100
commit4e8a5edac5010820e7c5303fc96f5a262e096bb6 (patch)
tree4ae05cd8f52bed3722dcdfe14e8c96993722fd53 /lib/logic_iomem.c
parent4e84139e14af5ea60772cc4f33d7059aec76e0eb (diff)
downloadlinux-4e8a5edac5010820e7c5303fc96f5a262e096bb6.tar.gz
linux-4e8a5edac5010820e7c5303fc96f5a262e096bb6.tar.bz2
linux-4e8a5edac5010820e7c5303fc96f5a262e096bb6.zip
lib/logic_iomem: Fix operation on 32-bit
On 32-bit, the first entry might be at 0/NULL, but that's strange and leads to issues, e.g. where we check "if (ret)". Use a IOREMAP_BIAS/IOREMAP_MASK of 0x80000000UL to avoid this. This then requires reducing the number of areas (via MAX_AREAS), but we still have 128 areas, which is enough. Fixes: ca2e334232b6 ("lib: add iomem emulation (logic_iomem)") Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'lib/logic_iomem.c')
-rw-r--r--lib/logic_iomem.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/logic_iomem.c b/lib/logic_iomem.c
index 54fa601f3300..549b22d4bcde 100644
--- a/lib/logic_iomem.c
+++ b/lib/logic_iomem.c
@@ -21,15 +21,15 @@ struct logic_iomem_area {
#define AREA_SHIFT 24
#define MAX_AREA_SIZE (1 << AREA_SHIFT)
-#define MAX_AREAS ((1ULL<<32) / MAX_AREA_SIZE)
+#define MAX_AREAS ((1U << 31) / MAX_AREA_SIZE)
#define AREA_BITS ((MAX_AREAS - 1) << AREA_SHIFT)
#define AREA_MASK (MAX_AREA_SIZE - 1)
#ifdef CONFIG_64BIT
#define IOREMAP_BIAS 0xDEAD000000000000UL
#define IOREMAP_MASK 0xFFFFFFFF00000000UL
#else
-#define IOREMAP_BIAS 0
-#define IOREMAP_MASK 0
+#define IOREMAP_BIAS 0x80000000UL
+#define IOREMAP_MASK 0x80000000UL
#endif
static DEFINE_MUTEX(regions_mtx);