Probe for GICv3 re-distributors on core bring-up

The GICv3 distributor can have more ports than CPUs are available in
the system. Probe all re-distributors and use the matching affinity
levels as specified by each core and re-distributor to decide which
re-distributor to use with which CPU core.

If a core cannot be matched with a re-distributor, the core panics and
is placed in an endless loop.

Change-Id: Ie393cfe07c7449a2383959e3c968664882e18afc
diff --git a/lib/mmio.c b/lib/mmio.c
index 36ff780..b654be7 100644
--- a/lib/mmio.c
+++ b/lib/mmio.c
@@ -35,7 +35,17 @@
 	*(volatile uint32_t*)addr = value;
 }
 
-unsigned mmio_read_32(uintptr_t addr)
+uint32_t mmio_read_32(uintptr_t addr)
 {
 	return *(volatile uint32_t*)addr;
 }
+
+void mmio_write_64(uintptr_t addr, uint64_t value)
+{
+	*(volatile uint64_t*)addr = value;
+}
+
+uint64_t mmio_read_64(uintptr_t addr)
+{
+	return *(volatile uint64_t*)addr;
+}