[PATCH RESEND] serial: pl01x: set baudrate when probing

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(-)
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)
--- base-commit: f7cca7ccc5117eaafcc2bde91ad1bed6fee7cfc3 change-id: 20240123-b4-pl011-ee9575ff2a38
Best regards,

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;
- }
}

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;
- }
}
participants (3)
-
Dan Carpenter
-
Yang Xiwen
-
Yang Xiwen via B4 Relay