Merge pull request #1359 from danielboulby-arm/db/match_flags_type

Ensure read and write of flags defined in the console struct are 32 bit
diff --git a/drivers/console/aarch64/multi_console.S b/drivers/console/aarch64/multi_console.S
index a85a6a5..0464776 100644
--- a/drivers/console/aarch64/multi_console.S
+++ b/drivers/console/aarch64/multi_console.S
@@ -200,7 +200,7 @@
 	cbz	x14, putc_done
 	adrp	x1, console_state
 	ldrb	w1, [x1, :lo12:console_state]
-	ldr	x2, [x14, #CONSOLE_T_FLAGS]
+	ldr	w2, [x14, #CONSOLE_T_FLAGS]
 	tst	w1, w2
 	b.eq	putc_continue
 	ldr	x2, [x14, #CONSOLE_T_PUTC]
@@ -246,7 +246,7 @@
 getc_loop:
 	adrp	x0, console_state
 	ldrb	w0, [x0, :lo12:console_state]
-	ldr	x1, [x14, #CONSOLE_T_FLAGS]
+	ldr	w1, [x14, #CONSOLE_T_FLAGS]
 	tst	w0, w1
 	b.eq	getc_continue
 	ldr	x1, [x14, #CONSOLE_T_GETC]
@@ -287,7 +287,7 @@
 	cbz	x14, flush_done
 	adrp	x1, console_state
 	ldrb	w1, [x1, :lo12:console_state]
-	ldr	x2, [x14, #CONSOLE_T_FLAGS]
+	ldr	w2, [x14, #CONSOLE_T_FLAGS]
 	tst	w1, w2
 	b.eq	flush_continue
 	ldr	x1, [x14, #CONSOLE_T_FLUSH]
diff --git a/include/drivers/console.h b/include/drivers/console.h
index 0855170..a4d89fe 100644
--- a/include/drivers/console.h
+++ b/include/drivers/console.h
@@ -34,13 +34,17 @@
 
 typedef struct console {
 	struct console *next;
+	/*
+	 * Only the low 32 bits are used. The type is u_register_t to align the
+	 * fields of the struct to 64 bits in AArch64 and 32 bits in AArch32
+	 */
 	u_register_t flags;
 	int (*putc)(int character, struct console *console);
 	int (*getc)(struct console *console);
 	int (*flush)(struct console *console);
 	/* Additional private driver data may follow here. */
 } console_t;
-#include <console_assertions.h>	/* offset macro assertions for console_t */
+#include <console_assertions.h> /* offset macro assertions for console_t */
 
 /*
  * NOTE: There is no publicly accessible console_register() function. Consoles