Hi Krzysztof, > Detection of board type is done early - before power setup. In case > of Odroid XU3/XU4/HC1 family, the detection is done using ADC which > is supplied by LDO4/VDD_ADC regulator. This regulator could be turned > off (e.g. by kernel before reboot); If ADC is used early, the > regulators are not yet available and the detection won't work. > > Try to detect the revision again, once power is brought up. > > This is necessary to fix the detection of Odroid HC1 after reboot, if > kernel turned off the LDO4 regulator. Otherwise the board is not > detected....
But such approach seems not to be the optimal one (as we perform detection twice - with default LDO4 enabled after power on and after soft reset). I would expect to enable the LDO4 regulator in the early code (I2C would be probably necessary) and then read ADC value properly once. (I also guess that the "work-by-chance" approach is caused by default settings of PMIC after power on). As fair as I remember, TI is able to read the EEPROM via I2C in the very early u-boot (MLO to be precise) code and then make the decision regarding the platform. Maybe it would be possible to do the same with Samsung? And another thought - if the set_board_type() can be called latter and it works - why cannot we move it to this latter point and execute exactly once? > > Signed-off-by: Krzysztof Kozlowski <k...@kernel.org> > --- > board/samsung/common/board.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/board/samsung/common/board.c > b/board/samsung/common/board.c index 6fd26a3a9198..1e2dabe68d11 100644 > --- a/board/samsung/common/board.c > +++ b/board/samsung/common/board.c > @@ -147,6 +147,11 @@ int board_early_init_f(void) > { > int err; > #ifdef CONFIG_BOARD_TYPES > + /* > + * It is done early so power might not be set up yet. In > such case > + * specific revision detection with ADC might not work and > need to me > + * redone later. > + */ > set_board_type(); > #endif > err = board_uart_init(); > @@ -166,9 +171,21 @@ int board_early_init_f(void) > #if defined(CONFIG_POWER) || defined(CONFIG_DM_PMIC) > int power_init_board(void) > { > + int ret; > + > set_ps_hold_ctrl(); > > - return exynos_power_init(); > + ret = exynos_power_init(); > + > +#ifdef CONFIG_BOARD_TYPES > + /* > + * Since power is on, redo the board detection (external > peripherals > + * are on). > + */ > + set_board_type(); > +#endif > + > + return ret; > } > #endif > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lu...@denx.de
pgpqvZZe02rV5.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot