diff options
author | Fabian Vogt <fvogt@suse.com> | 2016-09-26 14:26:50 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-11-28 20:09:51 -0500 |
commit | d8396a3272edc4b8154d0c93ea9b40473b300739 (patch) | |
tree | 71e709a639edcfa0ffd04ea2b1ef69bd146bb40e /board/raspberrypi/rpi/rpi.c | |
parent | cb97ad47bfa365128927438b94065fa900838770 (diff) | |
download | u-boot-imx-d8396a3272edc4b8154d0c93ea9b40473b300739.zip u-boot-imx-d8396a3272edc4b8154d0c93ea9b40473b300739.tar.gz u-boot-imx-d8396a3272edc4b8154d0c93ea9b40473b300739.tar.bz2 |
board: rpi: move uart deactivation to board_init
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>
Diffstat (limited to 'board/raspberrypi/rpi/rpi.c')
-rw-r--r-- | board/raspberrypi/rpi/rpi.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c index ffd6d31..e82022e 100644 --- a/board/raspberrypi/rpi/rpi.c +++ b/board/raspberrypi/rpi/rpi.c @@ -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) |