Fix the translation table library for wraparound cases

This patch fixes the translation table library for wraparound cases. These
cases are not expected to occur on AArch64 platforms because only the
48 bits of the 64 bit address space are used. But it is a possibility for
AArch32 platforms.

Change-Id: Ie7735f7ba2977019381e1c124800381471381499
diff --git a/lib/xlat_tables/xlat_tables_common.c b/lib/xlat_tables/xlat_tables_common.c
index 33784c2..bc7fed7 100644
--- a/lib/xlat_tables/xlat_tables_common.c
+++ b/lib/xlat_tables/xlat_tables_common.c
@@ -289,17 +289,17 @@
 		if (!mm->size)
 			return attr; /* Reached end of list */
 
-		if (mm->base_va >= base_va + size)
+		if (mm->base_va > base_va + size - 1)
 			return attr; /* Next region is after area so end */
 
-		if (mm->base_va + mm->size <= base_va)
+		if (mm->base_va + mm->size - 1 < base_va)
 			continue; /* Next region has already been overtaken */
 
 		if (mm->attr == attr)
 			continue; /* Region doesn't override attribs so skip */
 
 		if (mm->base_va > base_va ||
-			mm->base_va + mm->size < base_va + size)
+			mm->base_va + mm->size - 1 < base_va + size - 1)
 			return -1; /* Region doesn't fully cover our area */
 
 		attr = mm->attr;
@@ -328,7 +328,7 @@
 		if (!mm->size) {
 			/* Done mapping regions; finish zeroing the table */
 			desc = INVALID_DESC;
-		} else if (mm->base_va + mm->size <= base_va) {
+		} else if (mm->base_va + mm->size - 1 < base_va) {
 			/* This area is after the region so get next region */
 			++mm;
 			continue;
@@ -337,7 +337,7 @@
 		debug_print("%s VA:%p size:0x%x ", get_level_spacer(level),
 				(void *)base_va, level_size);
 
-		if (mm->base_va >= base_va + level_size) {
+		if (mm->base_va > base_va + level_size - 1) {
 			/* Next region is after this area. Nothing to map yet */
 			desc = INVALID_DESC;
 		} else {
@@ -369,7 +369,7 @@
 
 		*table++ = desc;
 		base_va += level_size;
-	} while ((base_va & level_index_mask) && (base_va < ADDR_SPACE_SIZE));
+	} while ((base_va & level_index_mask) && (base_va - 1 < ADDR_SPACE_SIZE - 1));
 
 	return mm;
 }