[U-Boot] rockchip: missing request op in common pinctrl driver resulting kernel boot failure

Mark Kettenis mark.kettenis at xs4all.nl
Fri Jun 14 14:52:34 UTC 2019


> From: Levin Du <djw at t-chip.com.cn>
> Date: Fri, 14 Jun 2019 17:09:43 +0800
> 
> Hi all,
> 
> I try U-Boot v2019.04 on the Firefly-RK3399 board and the kernel failed during
> loading. After doing some `git bisect`, I find the commit
> e7ae4cf27a6d5837cb5e868712cdaa61d3ceb5e0 (which is adding common rockchip
> pinctrl driver) is where the problem starts to emerge.
> 
> After some trial and error, it seems that the new pinctrl driver has got rid
> of the request op. But in board/rockchip/evb_rk3399/evb-rk3399.c:
> 
> 
>        /* 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;                                                                                                                          
>        }                                                                                                                                          
>                                                                              > 
> The pinctrl_request_noflags call will fail and end, skiping the regulator
> operations in normal flow.
> 
> Adding a dummy request function (return 0) to rockchip_pinctrl_ops solves the
> kernel hang: 
> 
> +static int rockchip_pinctrl_request(struct udevice *dev, int func, int flags)
> +{
> +       struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
> +
> +       debug("%s: func=%x, flags=%x\n", __func__, func, flags);
> +       return 0;
> +}
> +
>  const struct pinctrl_ops rockchip_pinctrl_ops = {
> +        .request                      = rockchip_pinctrl_request,
>         .set_state                      = rockchip_pinctrl_set_state,
>         .get_gpio_mux                   = rockchip_pinctrl_get_gpio_mux,
>  };
> 
> But I wonder why no other RK3399 boards experience the same problem. If I'd
> like to write a patch to address this, a dummy request function is not proper
> IMO. I'm seeking your advice. Thanks in advance.

Thanks for tracking this down!  I had noticed that something broke but
I didn't find the time to track this down yet.

I suspect that since CONFIG_PINCTRL_FULL is enabled all the
pinctrl_request() and pinctrl_request_noflags() calls are no longer
necessary and should probably be removed.  Hopefully somebody who is
more knowledgeable in this area can confirm?


More information about the U-Boot mailing list