[U-Boot] [PATCH] serial: ns16550: add setconfig support

Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com ---
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index f9041aa626..88b312d0be 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -148,10 +148,13 @@ int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate)
static void NS16550_setbrg(NS16550_t com_port, int baud_divisor) { - serial_out(UART_LCR_BKSE | UART_LCRVAL, &com_port->lcr); + /* to keep serial format, read lcr before writing BKSE */ + int lcr_val = serial_in(&com_port->lcr) & ~UART_LCR_BKSE; + + serial_out(UART_LCR_BKSE | lcr_val, &com_port->lcr); serial_out(baud_divisor & 0xff, &com_port->dll); serial_out((baud_divisor >> 8) & 0xff, &com_port->dlm); - serial_out(UART_LCRVAL, &com_port->lcr); + serial_out(lcr_val, &com_port->lcr); }
void NS16550_init(NS16550_t com_port, int baud_divisor) @@ -181,6 +184,8 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)
serial_out(UART_MCRVAL, &com_port->mcr); serial_out(ns16550_getfcr(com_port), &com_port->fcr); + /* initialize serial config to 8N1 before writing baudrate */ + serial_out(UART_LCRVAL, &com_port->lcr); if (baud_divisor != -1) NS16550_setbrg(com_port, baud_divisor); #if defined(CONFIG_ARCH_OMAP2PLUS) || defined(CONFIG_SOC_DA8XX) || \ @@ -334,6 +339,39 @@ static int ns16550_serial_setbrg(struct udevice *dev, int baudrate) return 0; }
+static int ns16550_serial_setconfig(struct udevice *dev, uint serial_config) +{ + struct NS16550 *const com_port = dev_get_priv(dev); + int lcr_val = UART_LCR_WLS_8; + uint parity = SERIAL_GET_PARITY(serial_config); + uint bits = SERIAL_GET_BITS(serial_config); + uint stop = SERIAL_GET_STOP(serial_config); + + /* + * only parity config is implemented, check if other serial settings + * are the default one. + */ + if (bits != SERIAL_8_BITS || stop != SERIAL_ONE_STOP) + return -ENOTSUPP; /* not supported in driver*/ + + switch (parity) { + case SERIAL_PAR_NONE: + /* no bits to add */ + break; + case SERIAL_PAR_ODD: + lcr_val |= UART_LCR_PEN; + break; + case SERIAL_PAR_EVEN: + lcr_val |= UART_LCR_PEN | UART_LCR_EPS; + break; + default: + return -ENOTSUPP; /* not supported in driver*/ + } + + serial_out(lcr_val, &com_port->lcr); + return 0; +} + int ns16550_serial_probe(struct udevice *dev) { struct NS16550 *const com_port = dev_get_priv(dev); @@ -440,6 +478,7 @@ const struct dm_serial_ops ns16550_serial_ops = { .pending = ns16550_serial_pending, .getc = ns16550_serial_getc, .setbrg = ns16550_serial_setbrg, + .setconfig = ns16550_serial_setconfig };
#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)

On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.

On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for the call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon

Am Sa., 3. Nov. 2018, 08:56 hat Simon Goldschmidt < simon.k.r.goldschmidt@gmail.com> geschrieben:
On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for the call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon, any input on this? Does your comment somehow hold back this from being pushed?
Simon

On Fri, Nov 16, 2018 at 06:04:40PM +0100, Simon Goldschmidt wrote:
Am Sa., 3. Nov. 2018, 08:56 hat Simon Goldschmidt < simon.k.r.goldschmidt@gmail.com> geschrieben:
On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for the call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon, any input on this? Does your comment somehow hold back this from being pushed?
I'm testing this now, btw.

Am Fr., 16. Nov. 2018, 18:09 hat Tom Rini trini@konsulko.com geschrieben:
On Fri, Nov 16, 2018 at 06:04:40PM +0100, Simon Goldschmidt wrote:
Am Sa., 3. Nov. 2018, 08:56 hat Simon Goldschmidt < simon.k.r.goldschmidt@gmail.com> geschrieben:
On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43
++++++++++++++++++++++++++++++++++++++--
1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for
the
call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon, any input on this? Does your comment somehow hold back this from being pushed?
I'm testing this now, btw.
Oh, cool, thanks for the info. I tested this on socfpga gen5 only, but the registers should be portable...
Simon

Hi,
On 16 November 2018 at 09:04, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Am Sa., 3. Nov. 2018, 08:56 hat Simon Goldschmidt simon.k.r.goldschmidt@gmail.com geschrieben:
On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for the call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon, any input on this? Does your comment somehow hold back this from being pushed?
No, I added my review tag.
It looks like serial_setconfig() is written without a struct udevice parameter. I think that should be fixed, since new functionality should use DM.
Regards, Simon

Am Fr., 16. Nov. 2018, 18:25 hat Simon Glass sjg@chromium.org geschrieben:
Hi,
On 16 November 2018 at 09:04, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Am Sa., 3. Nov. 2018, 08:56 hat Simon Goldschmidt simon.k.r.goldschmidt@gmail.com geschrieben:
On 03.11.2018 07:08, Simon Glass wrote:
On 2 November 2018 at 14:28, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Ideally we should call this from sandbox (or a test) somewhere.
Hmm, I'm a bit lost there. I haven't really used the tests so far and grep'ing through test/ does not show any reference to ns16550 either (where I could easily add a test).
Did you mean adding a test for this specific driver (ns16550) or for the call to 'setconfig' in general? (Because I thought Patrice had already done that.)
Simon, any input on this? Does your comment somehow hold back this from being pushed?
No, I added my review tag.
It looks like serial_setconfig() is written without a struct udevice parameter. I think that should be fixed, since new functionality should use DM.
Right, that would be good. I just saw we're calling the operation by directly accessing the struct...
I would change and test that but I'm still having trouble in getting the tests to run...
Simon

Betreff: [PATCH] serial: ns16550: add setconfig support
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
drivers/serial/ns16550.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
Reviewed-by: Hannes Schmelzer hannes.schmelzer@br-automation.com

On Fri, Nov 02, 2018 at 09:28:08PM +0100, Simon Goldschmidt wrote:
Add possibility to update the serial parity used.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com Reviewed-by: Simon Glass sjg@chromium.org Reviewed-by: Hannes Schmelzer hannes.schmelzer@br-automation.com
Applied to u-boot/master, thanks!
participants (4)
-
Hannes Schmelzer
-
Simon Glass
-
Simon Goldschmidt
-
Tom Rini