[U-Boot] [PATCH] rockchip: rk3399: Fix enabling boot-on regulators

The new common rockchip pinctrl driver does not support explicit requests for a particular pinctrl function. As a result, the board_init() function bails out early before enabling the boot-on regulators. Fix this by simply removing the request for pwm0, pwm2 and pwm3. The generic DM code already does the necessary configuration if necessary.
Reported-by: Levin Du djw@t-chip.com.cn Signed-of-by: Mark Kettenis kettenis@openbsd.org --- Without this patch the boot-on regulators are not enabled and the my firefly-rk3399 doesn't run OpenBSD stable without it. Levin Du reported similar problems with Linux. I'd say this is a critical fix that should make the 2019.07 release.
This patch deliberately does not touch the code in spl_boot_init() as Jagan Teki just posted a patchset that touches those bits.
board/rockchip/evb_rk3399/evb-rk3399.c | 32 +------------------------- 1 file changed, 1 insertion(+), 31 deletions(-)
diff --git a/board/rockchip/evb_rk3399/evb-rk3399.c b/board/rockchip/evb_rk3399/evb-rk3399.c index bf2ad98c47..8c20bd6e11 100644 --- a/board/rockchip/evb_rk3399/evb-rk3399.c +++ b/board/rockchip/evb_rk3399/evb-rk3399.c @@ -13,39 +13,9 @@
int board_init(void) { - struct udevice *pinctrl, *regulator; + struct udevice *regulator; int ret;
- /* - * The PWM do not have decicated interrupt number in dts and can - * not get periph_id by pinctrl framework, so let's init them here. - * The PWM2 and PWM3 are for pwm regulater. - */ - ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl); - if (ret) { - debug("%s: Cannot find pinctrl device\n", __func__); - goto out; - } - - /* Enable pwm0 for panel backlight */ - ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM0); - if (ret) { - debug("%s PWM0 pinctrl init fail! (ret=%d)\n", __func__, ret); - goto out; - } - - ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2); - if (ret) { - debug("%s PWM2 pinctrl init fail!\n", __func__); - goto out; - } - - ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM3); - if (ret) { - debug("%s PWM3 pinctrl init fail!\n", __func__); - goto out; - } - ret = regulators_enable_boot_on(false); if (ret) debug("%s: Cannot enable boot on regulator\n", __func__);

Hi Mark,
On 06/22/2019 04:57 AM, Mark Kettenis wrote:
The new common rockchip pinctrl driver does not support explicit requests for a particular pinctrl function. As a result, the board_init() function bails out early before enabling the boot-on regulators. Fix this by simply removing the request for pwm0, pwm2 and pwm3. The generic DM code already does the necessary configuration if necessary.
Reported-by: Levin Du djw@t-chip.com.cn Signed-of-by: Mark Kettenis kettenis@openbsd.org
Reveiwed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
Without this patch the boot-on regulators are not enabled and the my firefly-rk3399 doesn't run OpenBSD stable without it. Levin Du reported similar problems with Linux. I'd say this is a critical fix that should make the 2019.07 release.
This patch deliberately does not touch the code in spl_boot_init() as Jagan Teki just posted a patchset that touches those bits.
board/rockchip/evb_rk3399/evb-rk3399.c | 32 +------------------------- 1 file changed, 1 insertion(+), 31 deletions(-)
diff --git a/board/rockchip/evb_rk3399/evb-rk3399.c b/board/rockchip/evb_rk3399/evb-rk3399.c index bf2ad98c47..8c20bd6e11 100644 --- a/board/rockchip/evb_rk3399/evb-rk3399.c +++ b/board/rockchip/evb_rk3399/evb-rk3399.c @@ -13,39 +13,9 @@
int board_init(void) {
- struct udevice *pinctrl, *regulator;
- struct udevice *regulator; int ret;
- /*
* The PWM do not have decicated interrupt number in dts and can
* not get periph_id by pinctrl framework, so let's init them here.
* The PWM2 and PWM3 are for pwm regulater.
*/
- ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
- if (ret) {
debug("%s: Cannot find pinctrl device\n", __func__);
goto out;
- }
- /* Enable pwm0 for panel backlight */
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM0);
- if (ret) {
debug("%s PWM0 pinctrl init fail! (ret=%d)\n", __func__, ret);
goto out;
- }
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2);
- if (ret) {
debug("%s PWM2 pinctrl init fail!\n", __func__);
goto out;
- }
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM3);
- if (ret) {
debug("%s PWM3 pinctrl init fail!\n", __func__);
goto out;
- }
- ret = regulators_enable_boot_on(false); if (ret) debug("%s: Cannot enable boot on regulator\n", __func__);

On 06/22/2019 09:43 PM, Kever Yang wrote:
Hi Mark,
On 06/22/2019 04:57 AM, Mark Kettenis wrote:
The new common rockchip pinctrl driver does not support explicit requests for a particular pinctrl function. As a result, the board_init() function bails out early before enabling the boot-on regulators. Fix this by simply removing the request for pwm0, pwm2 and pwm3. The generic DM code already does the necessary configuration if necessary.
Reported-by: Levin Du djw@t-chip.com.cn Signed-of-by: Mark Kettenis kettenis@openbsd.org
Reveiwed-by: Kever Yang kever.yang@rock-chips.com
Applied to u-boot-rockchip/master
Thanks, - Kever
Thanks,
- Kever
Without this patch the boot-on regulators are not enabled and the my firefly-rk3399 doesn't run OpenBSD stable without it. Levin Du reported similar problems with Linux. I'd say this is a critical fix that should make the 2019.07 release.
This patch deliberately does not touch the code in spl_boot_init() as Jagan Teki just posted a patchset that touches those bits.
board/rockchip/evb_rk3399/evb-rk3399.c | 32 +------------------------- 1 file changed, 1 insertion(+), 31 deletions(-)
diff --git a/board/rockchip/evb_rk3399/evb-rk3399.c b/board/rockchip/evb_rk3399/evb-rk3399.c index bf2ad98c47..8c20bd6e11 100644 --- a/board/rockchip/evb_rk3399/evb-rk3399.c +++ b/board/rockchip/evb_rk3399/evb-rk3399.c @@ -13,39 +13,9 @@
int board_init(void) {
- struct udevice *pinctrl, *regulator;
- struct udevice *regulator; int ret;
- /*
* The PWM do not have decicated interrupt number in dts and can
* not get periph_id by pinctrl framework, so let's init them here.
* The PWM2 and PWM3 are for pwm regulater.
*/
- ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
- if (ret) {
debug("%s: Cannot find pinctrl device\n", __func__);
goto out;
- }
- /* Enable pwm0 for panel backlight */
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM0);
- if (ret) {
debug("%s PWM0 pinctrl init fail! (ret=%d)\n", __func__, ret);
goto out;
- }
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2);
- if (ret) {
debug("%s PWM2 pinctrl init fail!\n", __func__);
goto out;
- }
- ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM3);
- if (ret) {
debug("%s PWM3 pinctrl init fail!\n", __func__);
goto out;
- }
- ret = regulators_enable_boot_on(false); if (ret) debug("%s: Cannot enable boot on regulator\n", __func__);
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
participants (2)
-
Kever Yang
-
Mark Kettenis