diff mbox series

[RESEND] serial: pl01x: set baudrate when probing

Message ID 20240225-b4-pl011-v1-1-2686496c1a17@outlook.com
State Changes Requested
Delegated to: Tom Rini
Headers show
Series [RESEND] serial: pl01x: set baudrate when probing | expand

Commit Message

Yang Xiwen via B4 Relay Feb. 25, 2024, 12:38 a.m. UTC
From: Yang Xiwen <forbidden405@outlook.com>

It is found that when DM is enabled, only generic init function is
called in .probe(). Baudrate is never honored. Add a function call
to .setbrg() when probing so that we can update the baudrate of the
serial device.

Signed-off-by: Yang Xiwen <forbidden405@outlook.com>
---
 drivers/serial/serial_pl01x.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)


---
base-commit: f7cca7ccc5117eaafcc2bde91ad1bed6fee7cfc3
change-id: 20240123-b4-pl011-ee9575ff2a38

Best regards,

Comments

Dan Carpenter Feb. 26, 2024, 8:23 a.m. UTC | #1
On Sun, Feb 25, 2024 at 08:38:33AM +0800, Yang Xiwen via B4 Relay wrote:
>  #if CONFIG_IS_ENABLED(OF_PLATDATA)
>  	struct dtd_serial_pl01x *dtplat = &plat->dtplat;
> @@ -301,10 +302,14 @@ int pl01x_serial_probe(struct udevice *dev)
>  #endif
>  	priv->type = plat->type;
>  
> -	if (!plat->skip_init)
> -		return pl01x_generic_serial_init(priv->regs, priv->type);
> -	else
> +	if (!plat->skip_init) {
> +		ret = pl01x_generic_serial_init(priv->regs, priv->type);
> +		if (!ret)
                    ^^^^
This if statement seems to be reversed.

regards,
dan carpenter

> +			return ret;
> +		return pl01x_serial_setbrg(dev, gd->baudrate);
> +	} else {
>  		return 0;
> +	}
>  }
Yang Xiwen Feb. 27, 2024, 1:29 a.m. UTC | #2
On 2/26/2024 4:23 PM, Dan Carpenter wrote:
> On Sun, Feb 25, 2024 at 08:38:33AM +0800, Yang Xiwen via B4 Relay wrote:
>>  #if CONFIG_IS_ENABLED(OF_PLATDATA)
>>  	struct dtd_serial_pl01x *dtplat = &plat->dtplat;
>> @@ -301,10 +302,14 @@ int pl01x_serial_probe(struct udevice *dev)
>>  #endif
>>  	priv->type = plat->type;
>>  
>> -	if (!plat->skip_init)
>> -		return pl01x_generic_serial_init(priv->regs, priv->type);
>> -	else
>> +	if (!plat->skip_init) {
>> +		ret = pl01x_generic_serial_init(priv->regs, priv->type);
>> +		if (!ret)
>                     ^^^^
> This if statement seems to be reversed.

Seems correct. Maybe i sent the wrong version.

> 
> regards,
> dan carpenter
> 
>> +			return ret;
>> +		return pl01x_serial_setbrg(dev, gd->baudrate);
>> +	} else {
>>  		return 0;
>> +	}
>>  }
>
diff mbox series

Patch

diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c
index 428a4d210de5..57bbcaf3b619 100644
--- a/drivers/serial/serial_pl01x.c
+++ b/drivers/serial/serial_pl01x.c
@@ -290,6 +290,7 @@  int pl01x_serial_probe(struct udevice *dev)
 {
 	struct pl01x_serial_plat *plat = dev_get_plat(dev);
 	struct pl01x_priv *priv = dev_get_priv(dev);
+	int ret;
 
 #if CONFIG_IS_ENABLED(OF_PLATDATA)
 	struct dtd_serial_pl01x *dtplat = &plat->dtplat;
@@ -301,10 +302,14 @@  int pl01x_serial_probe(struct udevice *dev)
 #endif
 	priv->type = plat->type;
 
-	if (!plat->skip_init)
-		return pl01x_generic_serial_init(priv->regs, priv->type);
-	else
+	if (!plat->skip_init) {
+		ret = pl01x_generic_serial_init(priv->regs, priv->type);
+		if (!ret)
+			return ret;
+		return pl01x_serial_setbrg(dev, gd->baudrate);
+	} else {
 		return 0;
+	}
 }
 
 int pl01x_serial_getc(struct udevice *dev)