board: rpi: move uart deactivation to board_init
authorFabian Vogt <fvogt@suse.com>
Mon, 26 Sep 2016 12:26:50 +0000 (14:26 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 29 Nov 2016 01:09:51 +0000 (20:09 -0500)
When using OF_CONTROL, the disabled value of the mini UART platdata
gets reset after board_early_init_f. So move detection and disabling
to board_init and remove board_early_init_f.
This uses the first device using the mini uart driver, as this method
works reliably with different device trees or even no device tree at all.

Signed-off-by: Fabian Vogt <fvogt@suse.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
board/raspberrypi/rpi/rpi.c
include/configs/rpi.h

index ffd6d31..e82022e 100644 (file)
@@ -472,15 +472,6 @@ static void get_board_rev(void)
        printf("RPI %s (0x%x)\n", model->name, revision);
 }
 
-int board_init(void)
-{
-       get_board_rev();
-
-       gd->bd->bi_boot_params = 0x100;
-
-       return power_on_module(BCM2835_MBOX_POWER_DEVID_USB_HCD);
-}
-
 #ifndef CONFIG_PL01X_SERIAL
 static bool rpi_is_serial_active(void)
 {
@@ -500,17 +491,38 @@ static bool rpi_is_serial_active(void)
 
        return true;
 }
+
+/* Disable mini-UART I/O if it's not pinmuxed to our pins.
+ * The firmware only enables it if explicitly done in config.txt: enable_uart=1
+ */
+static void rpi_disable_inactive_uart(void)
+{
+       struct udevice *dev;
+       struct bcm283x_mu_serial_platdata *plat;
+
+       if (uclass_get_device_by_driver(UCLASS_SERIAL,
+                                       DM_GET_DRIVER(serial_bcm283x_mu),
+                                       &dev) || !dev)
+               return;
+
+       if (!rpi_is_serial_active()) {
+               plat = dev_get_platdata(dev);
+               plat->disabled = true;
+       }
+}
 #endif
 
-int board_early_init_f(void)
+int board_init(void)
 {
 #ifndef CONFIG_PL01X_SERIAL
-       /* Disable mini-UART I/O if it's not pinmuxed to our pins */
-       if (!rpi_is_serial_active())
-               serial_platdata.disabled = true;
+       rpi_disable_inactive_uart();
 #endif
 
-       return 0;
+       get_board_rev();
+
+       gd->bd->bi_boot_params = 0x100;
+
+       return power_on_module(BCM2835_MBOX_POWER_DEVID_USB_HCD);
 }
 
 int board_mmc_init(bd_t *bis)
index 45c8234..fa959ef 100644 (file)
@@ -16,7 +16,6 @@
 
 /* Architecture, CPU, etc.*/
 #define CONFIG_ARCH_CPU_INIT
-#define CONFIG_BOARD_EARLY_INIT_F
 
 /* Use SoC timer for AArch32, but architected timer for AArch64 */
 #ifndef CONFIG_ARM64