Merge branch '2020-03-13-master-imports'

- Address the regression with the 'gpio' command
- Fix mcfuart regression
- Other minor fixes
diff --git a/MAINTAINERS b/MAINTAINERS
index 2c43573..92dda40 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -329,8 +329,21 @@
 ARM STI
 M:	Patrice Chotard <patrice.chotard@st.com>
 S:	Maintained
+T:	git https://gitlab.denx.de/u-boot/custodians/u-boot-stm.git
 F:	arch/arm/mach-sti/
 F:	arch/arm/include/asm/arch-sti*/
+F:	drivers/phy/sti_usb_phy.c
+F:	drivers/pinctrl/pinctrl-sti.c
+F:	drivers/mmc/sti_sdhci.c
+F:	drivers/reset/sti-reset.c
+F:	drivers/serial/serial_sti_asc.c
+F:	drivers/sysreset/sysreset_sti.c
+F:	drivers/timer/sti-timer.c
+F:	drivers/usb/host/dwc3-sti-glue.c
+F:	include/dwc3-sti-glue.h
+F:	include/dt-bindings/clock/stih407-clks.h
+F:	include/dt-bindings/clock/stih410-clks.h
+F:	include/dt-bindings/reset/stih407-resets.h
 
 ARM STM SPEAR
 #M:	Vipin Kumar <vipin.kumar@st.com>
diff --git a/Makefile b/Makefile
index 07539ca..fa687f1 100644
--- a/Makefile
+++ b/Makefile
@@ -903,7 +903,7 @@
 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
 endif
 
-ifdef CONFIG_INIT_SP_RELATIVE
+ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
 ALL-y += init_sp_bss_offset_check
 endif
 
@@ -1208,7 +1208,7 @@
 		fi \
 	fi
 
-ifdef CONFIG_INIT_SP_RELATIVE
+ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
 ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
 subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
 else
diff --git a/cmd/gpio.c b/cmd/gpio.c
index 16c2ceb..408a942 100644
--- a/cmd/gpio.c
+++ b/cmd/gpio.c
@@ -248,7 +248,12 @@
 	if (ret != -EBUSY)
 		gpio_free(gpio);
 
-	return CMD_RET_SUCCESS;
+	/*
+	 * Whilst wrong, the legacy gpio input command returns the pin
+	 * value, or CMD_RET_FAILURE (which is indistinguishable from a
+	 * valid pin value).
+	 */
+	return (sub_cmd == GPIOC_INPUT) ? value : CMD_RET_SUCCESS;
 
 err:
 	if (ret != -EBUSY)
diff --git a/common/image-fit.c b/common/image-fit.c
index f3bb00c..4435bc4 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -1011,8 +1011,10 @@
 	if (external_data) {
 		debug("External Data\n");
 		ret = fit_image_get_data_size(fit, noffset, &len);
-		*data = fit + offset;
-		*size = len;
+		if (!ret) {
+			*data = fit + offset;
+			*size = len;
+		}
 	} else {
 		ret = fit_image_get_data(fit, noffset, data, size);
 	}
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index e26b644..e4a92bb 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -39,7 +39,7 @@
 obj-$(CONFIG_CORTINA_UART) += serial_cortina.o
 obj-$(CONFIG_EFI_APP) += serial_efi.o
 obj-$(CONFIG_LPC32XX_HSUART) += lpc32xx_hsuart.o
-obj-$(CONFIG_MCFUART) += mcfuart.o
+obj-$(CONFIG_MCFUART) += serial_mcf.o
 obj-$(CONFIG_SYS_NS16550) += ns16550.o
 obj-$(CONFIG_S5P) += serial_s5p.o
 obj-$(CONFIG_MXC_UART) += serial_mxc.o
diff --git a/drivers/serial/mcfuart.c b/drivers/serial/serial_mcf.c
similarity index 99%
rename from drivers/serial/mcfuart.c
rename to drivers/serial/serial_mcf.c
index 066e5a1..b599064 100644
--- a/drivers/serial/mcfuart.c
+++ b/drivers/serial/serial_mcf.c
@@ -85,6 +85,8 @@
 {
 	struct coldfire_serial_platdata *plat = dev->platdata;
 
+	plat->port = dev->seq;
+
 	return mcf_serial_init_common((uart_t *)plat->base,
 						plat->port, plat->baudrate);
 }
@@ -148,8 +150,6 @@
 		return -ENODEV;
 
 	plat->base = (uint32_t)addr_base;
-
-	plat->port = dev->seq;
 	plat->baudrate = gd->baudrate;
 
 	return 0;
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index d24c1e4..cb4da2e 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -24,15 +24,15 @@
 config WATCHDOG_RESET_DISABLE
 	bool "Disable reset watchdog"
 	help
-	   Disable reset watchdog, which can let WATCHDOG_RESET invalid, so
-	   that the watchdog will not be fed in u-boot.
+	  Disable reset watchdog, which can let WATCHDOG_RESET invalid, so
+	  that the watchdog will not be fed in u-boot.
 
 config IMX_WATCHDOG
 	bool "Enable Watchdog Timer support for IMX and LSCH2 of NXP"
 	select HW_WATCHDOG if !WDT
 	help
-	   Select this to enable the IMX and LSCH2 of Layerscape watchdog
-	   driver.
+	  Select this to enable the IMX and LSCH2 of Layerscape watchdog
+	  driver.
 
 config OMAP_WATCHDOG
 	bool "TI OMAP watchdog driver"
@@ -50,8 +50,8 @@
 	bool "Designware watchdog timer support"
 	select HW_WATCHDOG if !WDT
 	help
-	   Enable this to support Designware Watchdog Timer IP, present e.g.
-	   on Altera SoCFPGA SoCs.
+	  Enable this to support Designware Watchdog Timer IP, present e.g.
+	  on Altera SoCFPGA SoCs.
 
 config WDT
 	bool "Enable driver model for watchdog timer drivers"
@@ -68,10 +68,10 @@
 	bool "Marvell Armada 37xx watchdog timer support"
 	depends on WDT && ARMADA_3700
 	help
-	   Enable this to support Watchdog Timer on Marvell Armada 37xx SoC.
-	   There are 4 possible clocks which can be used on these SoCs. This
-	   driver uses the second clock (ID 1), assuming that so will also
-	   Linux's driver.
+	  Enable this to support Watchdog Timer on Marvell Armada 37xx SoC.
+	  There are 4 possible clocks which can be used on these SoCs. This
+	  driver uses the second clock (ID 1), assuming that so will also
+	  Linux's driver.
 
 config WDT_ASPEED
 	bool "Aspeed ast2400/ast2500 watchdog timer support"
@@ -88,8 +88,8 @@
 	bool "AT91 watchdog timer support"
 	depends on WDT
 	help
-	   Select this to enable Microchip watchdog timer, which can be found on
-	   some AT91 devices.
+	  Select this to enable Microchip watchdog timer, which can be found on
+	  some AT91 devices.
 
 config WDT_BCM6345
 	bool "BCM6345 watchdog timer support"
@@ -105,8 +105,8 @@
 	depends on WDT
 	imply WATCHDOG
 	help
-	   Select this to enable Cadence watchdog timer, which can be found on some
-	   Xilinx Microzed Platform.
+	  Select this to enable Cadence watchdog timer, which can be found on some
+	  Xilinx Microzed Platform.
 
 config WDT_CORTINA
 	bool "Cortina Access CAxxxx watchdog timer support"
@@ -114,21 +114,21 @@
 	help
 	  Cortina Access CAxxxx watchdog timer support.
 	  This driver support all CPU ISAs supported by Cortina
-          Access CAxxxx SoCs.
+	  Access CAxxxx SoCs.
 
 config WDT_MPC8xx
 	bool "MPC8xx watchdog timer support"
 	depends on WDT && MPC8xx
 	select HW_WATCHDOG
 	help
-	   Select this to enable mpc8xx watchdog timer
+	  Select this to enable mpc8xx watchdog timer
 
 config WDT_MT7621
 	bool "MediaTek MT7621 watchdog timer support"
 	depends on WDT && SOC_MT7628
 	help
-	   Select this to enable Ralink / Mediatek watchdog timer,
-	   which can be found on some MediaTek chips.
+	  Select this to enable Ralink / Mediatek watchdog timer,
+	  which can be found on some MediaTek chips.
 
 config WDT_MTK
 	bool "MediaTek watchdog timer support"
@@ -139,10 +139,10 @@
 	  It performs full SoC reset.
 
 config WDT_OMAP3
-        bool "TI OMAP watchdog timer support"
-        depends on WDT && ARCH_OMAP2PLUS
-        default y if AM33XX
-        help
+	bool "TI OMAP watchdog timer support"
+	depends on WDT && ARCH_OMAP2PLUS
+	default y if AM33XX
+	help
 	  This enables OMAP3+ watchdog timer driver, which can be
 	  found on some TI chipsets and inline with driver model.
 
@@ -151,8 +151,8 @@
 	depends on WDT
 	select CLK
 	help
-	   Select this to enable Orion watchdog timer, which can be found on some
-	   Marvell Armada chips.
+	  Select this to enable Orion watchdog timer, which can be found on some
+	  Marvell Armada chips.
 
 config WDT_SANDBOX
 	bool "Enable Watchdog Timer support for Sandbox"
@@ -166,8 +166,8 @@
 	bool "SP805 watchdog timer support"
 	depends on WDT
 	help
-	   Select this to enable SP805 watchdog timer, which can be found on some
-	   nxp layerscape chips.
+	  Select this to enable SP805 watchdog timer, which can be found on some
+	  nxp layerscape chips.
 
 config WDT_STM32MP
 	bool "IWDG watchdog driver for STM32 MP's family"
@@ -182,8 +182,8 @@
 	depends on WDT
 	imply WATCHDOG
 	help
-	   Select this to enable Xilinx Axi watchdog timer, which can be found on some
-	   Xilinx Microblaze Platforms.
+	  Select this to enable Xilinx Axi watchdog timer, which can be found on some
+	  Xilinx Microblaze Platforms.
 
 config WDT_TANGIER
 	bool "Intel Tangier watchdog timer support"
diff --git a/test/py/tests/test_gpio.py b/test/py/tests/test_gpio.py
new file mode 100644
index 0000000..8c64f68
--- /dev/null
+++ b/test/py/tests/test_gpio.py
@@ -0,0 +1,37 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+import pytest
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_gpio')
+def test_gpio_input(u_boot_console):
+    """Test that gpio input correctly returns the value of a gpio pin."""
+
+    response = u_boot_console.run_command('gpio input 0; echo rc:$?')
+    expected_response = 'rc:0'
+    assert(expected_response in response)
+    response = u_boot_console.run_command('gpio toggle 0; gpio input 0; echo rc:$?')
+    expected_response = 'rc:1'
+    assert(expected_response in response)
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_gpio')
+def test_gpio_exit_statuses(u_boot_console):
+    """Test that non-input gpio commands correctly return the command
+    success/failure status."""
+
+    expected_response = 'rc:0'
+    response = u_boot_console.run_command('gpio clear 0; echo rc:$?')
+    assert(expected_response in response)
+    response = u_boot_console.run_command('gpio set 0; echo rc:$?')
+    assert(expected_response in response)
+    response = u_boot_console.run_command('gpio toggle 0; echo rc:$?')
+    assert(expected_response in response)
+    response = u_boot_console.run_command('gpio status -a; echo rc:$?')
+    assert(expected_response in response)
+
+    expected_response = 'rc:1'
+    response = u_boot_console.run_command('gpio nonexistent-command; echo rc:$?')
+    assert(expected_response in response)
+    response = u_boot_console.run_command('gpio input 200; echo rc:$?')
+    assert(expected_response in response)