[PATCH] sunxi: Properly check for SATAPWR and MACPWR
Peter Robinson
pbrobinson at gmail.com
Tue Jan 19 15:58:39 CET 2021
On Tue, Jan 19, 2021 at 1:06 AM Andre Przywara <andre.przywara at arm.com> wrote:
>
> The #ifdef CONFIG_xxxPWR conditionals were not working as expected, as
> string Kconfig symbols are always "defined" from the preprocessor's
> perspective. This lead to unnecessary calls to the GPIO routines, but
> also always added a half a second delay to wait for a SATA disk to power
> up. Many thanks to Peter for pointing this out!
>
> Fix this by properly comparing the Kconfig symbols against the empty
> string. strcmp() would be nicer for this, but GCC does not optimise this
> away, probably due to our standalone compiler switches.
>
> Reported-by: Peter Robinson <pbrobinson at gmail.com>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
Tested-by: Peter Robinson <pbrobinson at gmail.com>
Tested on Pine64, Cubietruck with root fs on SATA SSD, and an orangepi_pc
> ---
> board/sunxi/board.c | 34 ++++++++++++++++++++++------------
> 1 file changed, 22 insertions(+), 12 deletions(-)
>
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 4f058952b5b..a0b5778b3bc 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -265,18 +265,28 @@ int board_init(void)
> if (ret)
> return ret;
>
> -#ifdef CONFIG_SATAPWR
> - satapwr_pin = sunxi_name_to_gpio(CONFIG_SATAPWR);
> - gpio_request(satapwr_pin, "satapwr");
> - gpio_direction_output(satapwr_pin, 1);
> - /* Give attached sata device time to power-up to avoid link timeouts */
> - mdelay(500);
> -#endif
> -#ifdef CONFIG_MACPWR
> - macpwr_pin = sunxi_name_to_gpio(CONFIG_MACPWR);
> - gpio_request(macpwr_pin, "macpwr");
> - gpio_direction_output(macpwr_pin, 1);
> -#endif
> + /* strcmp() would look better, but doesn't get optimised away. */
> + if (CONFIG_SATAPWR[0]) {
> + satapwr_pin = sunxi_name_to_gpio(CONFIG_SATAPWR);
> + if (satapwr_pin >= 0) {
> + gpio_request(satapwr_pin, "satapwr");
> + gpio_direction_output(satapwr_pin, 1);
> +
> + /*
> + * Give the attached SATA device time to power-up
> + * to avoid link timeouts
> + */
> + mdelay(500);
> + }
> + }
> +
> + if (CONFIG_MACPWR[0]) {
> + macpwr_pin = sunxi_name_to_gpio(CONFIG_MACPWR);
> + if (macpwr_pin >= 0) {
> + gpio_request(macpwr_pin, "macpwr");
> + gpio_direction_output(macpwr_pin, 1);
> + }
> + }
>
> #ifdef CONFIG_DM_I2C
> /*
> --
> 2.17.5
>
More information about the U-Boot
mailing list