Optimus pin muxing: Choose GPIO over CORESIGHT_D

For all pins on the LS1024A package that are shared between Coresight
and GPIO, pick GPIO. None of our boards uses Coresight.

Change-Id: I943e6071a5019bb6b8536181dc46fb0ae5f54edd
diff --git a/arch/arm/boards/optimus/optimus.c b/arch/arm/boards/optimus/optimus.c
index eda5f6a..e205ad5 100644
--- a/arch/arm/boards/optimus/optimus.c
+++ b/arch/arm/boards/optimus/optimus.c
@@ -488,9 +488,17 @@
 	 */
 	writel(readl(COMCERTO_GPIO_MISC_PIN_SELECT_REG) | 2 << 4, COMCERTO_GPIO_MISC_PIN_SELECT_REG);
 
-	/* GPIO[48] and CORESIGHT_D[4] are muxed on the same pin. Set pin
-	 * Select Register to select GPIO[48]. */
-	writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT_REG) | 1<<(48-32), COMCERTO_GPIO_63_32_PIN_SELECT_REG);
+	/* GPIO 44 through GPIO 59 are muxed with CORESIGHT_D[0..15]. Since
+	 * none of our boards is using Coresight, we might just turn all these
+	 * 16 pins into GPIO pins. Before we can safely do so, we have to turn
+	 * all these pins into input pins to avoid short circuits. A one bit in
+	 * OE_REG actually means input pin, a cleared bit in OE_REG means
+	 * output pin. */
+	writel(readl(COMCERTO_GPIO_63_32_OE_REG) | 0xFFFF << (44-32), COMCERTO_GPIO_63_32_OE_REG);
+	writel(readl(COMCERTO_GPIO_63_32_PIN_SELECT_REG) | 0xFFFF << (44-32), COMCERTO_GPIO_63_32_PIN_SELECT_REG);
+
+	/* Set GPIO[48] direction to output */
+	writel(readl(COMCERTO_GPIO_63_32_OE_REG) & ~(1 << (48-32)), COMCERTO_GPIO_63_32_OE_REG);
 	/* Set GPIO[48] to high */
 	writel(readl(COMCERTO_GPIO_63_32_OUTPUT_REG) | 1<<(48-32), COMCERTO_GPIO_63_32_OUTPUT_REG);
 #endif