diff mbox series

[v3,5/5] serial: 8250_dw: add em485 support

Message ID 20200517215610.2131618-6-heiko@sntech.de
State Superseded
Headers show
Series serial: 8250: Add rs485 emulation to 8250_dw | expand

Commit Message

Heiko Stuebner May 17, 2020, 9:56 p.m. UTC
From: Giulio Benetti <giulio.benetti@micronovasrl.com>

Need to use rs485 transceiver so let's use existing em485 485 emulation
layer on top of 8250.

Add rs485_config callback to port and uses the standard em485 start and
stop helpers.

Signed-off-by: Giulio Benetti <giulio.benetti@micronovasrl.com>
[moved to use newly added start/stop helpers]
Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
---
 drivers/tty/serial/8250/8250_dw.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Giulio Benetti Feb. 2, 2021, 12:31 a.m. UTC | #1
Hi Andy,

Il 18/05/2020 17:21, Andy Shevchenko ha scritto:
> On Sun, May 17, 2020 at 11:56:10PM +0200, Heiko Stuebner wrote:

>> From: Giulio Benetti <giulio.benetti@micronovasrl.com>

>>

>> Need to use rs485 transceiver so let's use existing em485 485 emulation

>> layer on top of 8250.

>>

>> Add rs485_config callback to port and uses the standard em485 start and

>> stop helpers.

> 

> Would it prevent to use native RS485 support?


8250_dw doesn't have a native RS485 support, do you mean using hardware
RTS assertion? Anyway at the moment it's not present. This would be the
first rs485 support added to 8250_dw.

Best regards
-- 
Giulio Benetti
CTO

MICRONOVA SRL
Sede: Via A. Niedda 3 - 35010 Vigonza (PD)
Tel. 049/8931563 - Fax 049/8931346
Cod.Fiscale - P.IVA 02663420285
Capitale Sociale € 26.000 i.v.
Iscritta al Reg. Imprese di Padova N. 02663420285
Numero R.E.A. 258642

> ...

> 

>>   	p->serial_out	= dw8250_serial_out;

>>   	p->set_ldisc	= dw8250_set_ldisc;

>>   	p->set_termios	= dw8250_set_termios;

>> +	p->rs485_config = serial8250_em485_config;

>> +	up->rs485_start_tx = serial8250_em485_start_tx;

>> +	up->rs485_stop_tx = serial8250_em485_stop_tx;

>
Andy Shevchenko Feb. 2, 2021, 11:22 a.m. UTC | #2
On Tue, Feb 02, 2021 at 01:31:17AM +0100, Giulio Benetti wrote:
> Il 18/05/2020 17:21, Andy Shevchenko ha scritto:

> > On Sun, May 17, 2020 at 11:56:10PM +0200, Heiko Stuebner wrote:

> > > From: Giulio Benetti <giulio.benetti@micronovasrl.com>

> > > 

> > > Need to use rs485 transceiver so let's use existing em485 485 emulation

> > > layer on top of 8250.

> > > 

> > > Add rs485_config callback to port and uses the standard em485 start and

> > > stop helpers.

> > 

> > Would it prevent to use native RS485 support?

> 

> 8250_dw doesn't have a native RS485 support, do you mean using hardware

> RTS assertion? Anyway at the moment it's not present. This would be the

> first rs485 support added to 8250_dw.


DW v4.0+ has it.

-- 
With Best Regards,
Andy Shevchenko
Giulio Benetti Feb. 5, 2021, 5:46 p.m. UTC | #3
Il 02/02/2021 12:22, Andy Shevchenko ha scritto:
> On Tue, Feb 02, 2021 at 01:31:17AM +0100, Giulio Benetti wrote:

>> Il 18/05/2020 17:21, Andy Shevchenko ha scritto:

>>> On Sun, May 17, 2020 at 11:56:10PM +0200, Heiko Stuebner wrote:

>>>> From: Giulio Benetti <giulio.benetti@micronovasrl.com>

>>>>

>>>> Need to use rs485 transceiver so let's use existing em485 485 emulation

>>>> layer on top of 8250.

>>>>

>>>> Add rs485_config callback to port and uses the standard em485 start and

>>>> stop helpers.

>>>

>>> Would it prevent to use native RS485 support?

>>

>> 8250_dw doesn't have a native RS485 support, do you mean using hardware

>> RTS assertion? Anyway at the moment it's not present. This would be the

>> first rs485 support added to 8250_dw.

> 

> DW v4.0+ has it.


I have access to datasheet of DW v3, and I don't have access to hardware
with DW v4.0v Uart.
But I could add rs485emu for only UART version < 4.0 and I can find Uart
version by reading UCV register, would it be acceptable?

Best regards
-- 
Giulio Benetti
CTO

MICRONOVA SRL
Sede: Via A. Niedda 3 - 35010 Vigonza (PD)
Tel. 049/8931563 - Fax 049/8931346
Cod.Fiscale - P.IVA 02663420285
Capitale Sociale € 26.000 i.v.
Iscritta al Reg. Imprese di Padova N. 02663420285
Numero R.E.A. 258642
Andy Shevchenko Feb. 5, 2021, 7:29 p.m. UTC | #4
On Fri, Feb 05, 2021 at 06:46:56PM +0100, Giulio Benetti wrote:
> Il 02/02/2021 12:22, Andy Shevchenko ha scritto:

> > On Tue, Feb 02, 2021 at 01:31:17AM +0100, Giulio Benetti wrote:

> > > Il 18/05/2020 17:21, Andy Shevchenko ha scritto:

> > > > On Sun, May 17, 2020 at 11:56:10PM +0200, Heiko Stuebner wrote:

> > > > > From: Giulio Benetti <giulio.benetti@micronovasrl.com>

> > > > > 

> > > > > Need to use rs485 transceiver so let's use existing em485 485 emulation

> > > > > layer on top of 8250.

> > > > > 

> > > > > Add rs485_config callback to port and uses the standard em485 start and

> > > > > stop helpers.

> > > > 

> > > > Would it prevent to use native RS485 support?

> > > 

> > > 8250_dw doesn't have a native RS485 support, do you mean using hardware

> > > RTS assertion? Anyway at the moment it's not present. This would be the

> > > first rs485 support added to 8250_dw.

> > 

> > DW v4.0+ has it.

> 

> I have access to datasheet of DW v3, and I don't have access to hardware

> with DW v4.0v Uart.

> But I could add rs485emu for only UART version < 4.0 and I can find Uart

> version by reading UCV register, would it be acceptable?


I don't think we need to disable the possibility to have emulation even on v4+
IP since PCB can be designed that way. My point here, that whatever code you
add it should not prevent to use HW supported RS485, although I haven't heard
about support of it in the upstream (yet?).

And for the record, Synopsys hadn't added any bit into CPR to recognize that
feature, so only version check can be done in this case...

-- 
With Best Regards,
Andy Shevchenko
diff mbox series

Patch

diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index 51a7d3b19b39..36d364268a45 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -415,6 +415,9 @@  static int dw8250_probe(struct platform_device *pdev)
 	p->serial_out	= dw8250_serial_out;
 	p->set_ldisc	= dw8250_set_ldisc;
 	p->set_termios	= dw8250_set_termios;
+	p->rs485_config = serial8250_em485_config;
+	up->rs485_start_tx = serial8250_em485_start_tx;
+	up->rs485_stop_tx = serial8250_em485_stop_tx;
 
 	p->membase = devm_ioremap(dev, regs->start, resource_size(regs));
 	if (!p->membase)