On Tue, Jan 19, 2021 at 1:06 AM Andre Przywara <andre.przyw...@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 <pbrobin...@gmail.com> > Signed-off-by: Andre Przywara <andre.przyw...@arm.com> Tested-by: Peter Robinson <pbrobin...@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 > -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. To view this discussion on the web, visit https://groups.google.com/d/msgid/linux-sunxi/CALeDE9O%2BBgOrU%3DAcCGqhggH4zTaYX4SwadvGBHOcL3qJOca5JA%40mail.gmail.com.