On Mon, May 12, 2025 at 12:31:58PM +0530, Sumit Garg wrote:
> On Fri, May 09, 2025 at 04:54:43PM +0200, Stephan Gerhold wrote:
> > On Fri, May 09, 2025 at 12:45:20PM +0200, Casey Connolly wrote:
> > > On 5/8/25 12:32, Sumit Garg wrote:
> > > > From: Sumit Garg <sumit.g...@oss.qualcomm.com>
> > > > 
> > > > When debug serial port isn't connected, it is at least reported on RB1
> > > > that autoboot gets interrupted. It is probably due to random characters
> > > > on the UART RX line when disconnected. Lets try to fix this inconsistent
> > > > behaviour via enabling AUTOBOOT_KEYED such that the autoboot gets
> > > > interrupted only when the <SPACE> key gets pressed.
> > > 
> > > Honestly I'd much rather fix the bug in the UART driver, maybe it's broken
> > > pinctrl?
> > > 
> > > The older UART driver (for msm8916) had a similar but that Stephen was 
> > > able
> > > to fix with better configuration.
> > > 
> > > Anyhow, this is a sensible enough workaround if nobody wants to look into
> > > GENI...
> > > 
> > 
> > Well, the main fix I did for that isn't related to the UART driver at
> > all, it's simply adding bias-pull-up for the RX pin so that it isn't
> > left floating when UART is not connected.
> > 
> > For RB1, qcm2290.dtsi &qup_uart4_default currently has bias-disable for
> > both RX and TX pins. So please try applying bias-pull-up + bootph-all
> > for the GPIO that belongs to RX.
> > 
> > For details, please see the following patch series for MSM8916:
> > https://lore.kernel.org/linux-arm-msm/20250422-msm8916-console-pinctrl-v2-0-f345b7a53...@linaro.org/T/
> 
> Thanks for this reference but unfortunately this doesn't fix the issue
> on RB1. I have tried the diff below [1]. It seems most likely due the
> chainloading via ABL on RB1 as compared to U-Boot running as primary
> bootloader on db410c. The RX line seems to be floating even before the
> U-Boot starts which is causing the autoboot to stop. So for the
> chainloading configuration, we need to enable AUTOBOOT_KEYED. I think
> it should be the default sane configuration on Qcom platforms rather
> than allowing autoboot stopped via any random character on RX line.
> 

Can try again with the following diff added in addition to the
bias-pull-up changes from below? Pretty sure this is needed to apply the
pinctrl before the UART driver is initialized in the pre-reloc stage.

We're resetting the UART controller during initialization, so I don't
think whatever happens before U-Boot should make any difference.

Thanks,
Stephan

diff --git a/drivers/pinctrl/qcom/pinctrl-qcm2290.c 
b/drivers/pinctrl/qcom/pinctrl-qcm2290.c
index 84f76b63b93..dcd499d99ae 100644
--- a/drivers/pinctrl/qcom/pinctrl-qcm2290.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcm2290.c
@@ -67,4 +67,5 @@ U_BOOT_DRIVER(pinctrl_qcm2290) = {
        .of_match = msm_pinctrl_ids,
        .ops = &msm_pinctrl_ops,
        .bind = msm_pinctrl_bind,
+       .flags = DM_FLAG_PRE_RELOC,
 };

> [1]
> 
> diff --git a/dts/upstream/src/arm64/qcom/qcm2290.dtsi 
> b/dts/upstream/src/arm64/qcom/qcm2290.dtsi
> index f0746123e59..9392bd6f3e0 100644
> --- a/dts/upstream/src/arm64/qcom/qcm2290.dtsi
> +++ b/dts/upstream/src/arm64/qcom/qcm2290.dtsi
> @@ -551,10 +551,28 @@
>                         };
> 
>                         qup_uart4_default: qup-uart4-default-state {
> +                               tx-pins {
> +                                       pins = "gpio12";
> +                                       function = "qup4";
> +                                       drive-strength = <16>;
> +                                       bias-disable;
> +                                       bootph-all;
> +                               };
> +
> +                               rx-pins {
> +                                       pins = "gpio13";
> +                                       function = "qup4";
> +                                       drive-strength = <16>;
> +                                       bias-pull-up;
> +                                       bootph-all;
> +                               };
> +                       };
> +
> +                       qup_uart4_sleep: qup-uart4-sleep-state {
>                                 pins = "gpio12", "gpio13";
> -                               function = "qup4";
> +                               function = "gpio";
>                                 drive-strength = <2>;
> -                               bias-disable;
> +                               bias-pull-down;
>                         };
> 
>                         sdc1_state_on: sdc1-on-state {
> @@ -1293,7 +1311,8 @@
>                                 clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
>                                 clock-names = "se";
>                                 pinctrl-0 = <&qup_uart4_default>;
> -                               pinctrl-names = "default";
> +                               pinctrl-1 = <&qup_uart4_sleep>;
> +                               pinctrl-names = "default", "sleep";
>                                 interconnects = <&qup_virt MASTER_QUP_CORE_0 
> RPM_ALWAYS_TAG
>                                                  &qup_virt SLAVE_QUP_CORE_0 
> RPM_ALWAYS_TAG>,
>                                                 <&bimc MASTER_APPSS_PROC 
> RPM_ALWAYS_TAG
> 

Reply via email to