public inbox for linux-serial@vger.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Matthew Howell <matthew.howell@sealevel.com>
Cc: "linux-serial@vger.kernel.org" <linux-serial@vger.kernel.org>,
	 "gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	 Jeff Baldwin <jeff.baldwin@sealevel.com>,
	 Darren Beeson <darren.beeson@sealevel.com>,
	 Ryan Wenglarz <ryan.wenglarz@sealevel.com>
Subject: Re: [PATCH V2] serial: exar: Preserve FCTR[5] bit in pci_xr17v35x_setup()
Date: Wed, 10 Apr 2024 16:49:20 +0300 (EEST)	[thread overview]
Message-ID: <41c9bb61-8f40-7ead-5870-d67632ab4936@linux.intel.com> (raw)
In-Reply-To: <cbe7931db7a6841369505b83ee3c747c981c16f2.camel@sealevel.com>

[-- Attachment #1: Type: text/plain, Size: 4661 bytes --]

On Mon, 8 Apr 2024, Matthew Howell wrote:

> On Mon, 2024-04-08 at 19:48 +0300, Ilpo Järvinen wrote:
> > [Some people who received this message don't often get email from ilpo.jarvinen@linux.intel.com. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
> > 
> > ⚠Caution: External email. Exercise extreme caution with links or attachments.⚠
> > 
> > 
> > On Mon, 8 Apr 2024, Matthew Howell wrote:
> > 
> > > On Wed, 2024-02-21 at 16:16 -0500, Matthew Howell wrote:
> > > > Allows the use of the EN485 hardware pin by preserving the value of
> > > > FCTR[5] in pci_xr17v35x_setup().
> > > > 
> > > > Per the XR17V35X datasheet, the EN485 hardware pin works by setting
> > > > FCTR[5] when the pin is active. pci_xr17v35x_setup() prevented the use
> > > > of EN485 because it overwrote the FCTR register.
> > > > 
> > > > Signed-off-by: Matthew Howell <matthew.howell@sealevel.com>
> > > > ---
> > > > V1 -> V2
> > > > Fixed wordwrap in diff
> > > > 
> > > > diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c
> > > > index 23366f868..97711606f 100644
> > > > --- a/drivers/tty/serial/8250/8250_exar.c
> > > > +++ b/drivers/tty/serial/8250/8250_exar.c
> > > > @@ -596,6 +596,7 @@ pci_xr17v35x_setup(struct exar8250 *priv, struct pci_dev *pcidev,
> > > >     unsigned int baud = 7812500;
> > > >     u8 __iomem *p;
> > > >     int ret;
> > > > +   u8 en485mask;
> > > > 
> > > >     port->port.uartclk = baud * 16;
> > > >     port->port.rs485_config = platform->rs485_config;
> > > > @@ -618,7 +619,8 @@ pci_xr17v35x_setup(struct exar8250 *priv, struct pci_dev *pcidev,
> > > >     p = port->port.membase;
> > > > 
> > > >     writeb(0x00, p + UART_EXAR_8XMODE);
> > > > -   writeb(UART_FCTR_EXAR_TRGD, p + UART_EXAR_FCTR);
> > > > +   en485mask = readb(p + UART_EXAR_FCTR) & UART_FCTR_EXAR_485;
> > > > +   writeb(UART_FCTR_EXAR_TRGD | en485mask, p + UART_EXAR_FCTR);
> > > >     writeb(128, p + UART_EXAR_TXTRG);
> > > >     writeb(128, p + UART_EXAR_RXTRG);
> > 
> > Why you need to read rs485 state from the register? It should be available
> > in ->rs485.flags & SER_RS485_ENABLED.
> > 
> 
> Please correct me if I am wrong, but my understanding is that
> SER_RS485_ENABLED is set from userspace using the TIOCRS485 IOCTL. 

Thought that and device_property_read_bool(dev, 
"linux,rs485-enabled-at-boot-time")

> However, this is not the only way that the FCTR register can be changed.
> In particular, per XR17V35X datasheet, the EN485 pin is sampled on
> power-on and transfers the logic state to FCTR[5]. Our card takes
> advantage of this to allow users to configure RS485 in scenarios where
> they cannot, or do not want to, modify their software to set
> SER_RS485_ENABLED.
>
> However, this functionality of the UART does not currently work with
> this driver because the entire FCTR register is being overwritten,
> thereby erasing whatever value was written to FCTR[5] on UART power-up.
> 
> The driver cannot know whether FCTR[5] was set on power-up without
> reading the FCTR, therefore it must be read.

???

Are you saying RS485 is enabled without kernel knowing about it? I don't 
think that's the correct way to do things.

> > pci_fastcom335_setup() seems to have the same problem? That small part
> > seems to be common code anyway which should be moved into helper, only the
> > trigger threshold seems to differ which can be given in a parameter.
> > 
> 
> Technically, yes mit has the same problem, but I am not sure it is an
> actual issue and am hesitant make the suggested changes for the
> following reasons:
> 
> 
> 1) The fastcom card may depend on the behaviour working as-is.
> 2) I only have Sealevel & reference Exar hardware to test, not Fastcom,
> so I have no way to test if the changes negatively impact fastcom
> 3) Finally, while I am not familar with the fastcom 335, it doesn't have
> any dip-switches or jumpers, which leads me to believe it doesn't have a
> way for users to utilize the EN485 pin. If this is the case, then there
> is no end-user benefit to 'fixing' this in pci_fastcom335_setup().
> 
> If someone with a fastcom 335 card is willing to test then I can take a
> stab at the suggested change, but at the moment I see at least some
> 'risk' in making this change, but no 'reward' for doing so.

Okay, it seems fastcom part of the driver doesn't support rs485.
There's  stupid naming in this driver, "generic_rs485_config()" isn't 
really that generic it seems (and on top of that, the init flow is
hard to follow). :-/



-- 
 i.

  reply	other threads:[~2024-04-10 13:49 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-21 21:06 [PATCH V1] serial: exar: Preserve FCTR[5] bit in pci_xr17v35x_setup() Matthew Howell
2024-02-21 21:16 ` [PATCH V2] " Matthew Howell
2024-02-21 22:58   ` andy.shevchenko
2024-04-09 13:01     ` Matthew Howell
2024-04-08 13:11   ` Matthew Howell
2024-04-08 14:56     ` gregkh
2024-04-09 12:33       ` Matthew Howell
2024-04-08 16:48     ` Ilpo Järvinen
2024-04-08 17:25       ` Ilpo Järvinen
2024-04-08 20:27       ` Matthew Howell
2024-04-10 13:49         ` Ilpo Järvinen [this message]
2024-04-10 16:20           ` Matthew Howell
2024-04-11  8:27             ` Ilpo Järvinen
2024-04-11 17:01               ` Matthew Howell
2024-04-11 20:44                 ` Matthew Howell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41c9bb61-8f40-7ead-5870-d67632ab4936@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=darren.beeson@sealevel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jeff.baldwin@sealevel.com \
    --cc=linux-serial@vger.kernel.org \
    --cc=matthew.howell@sealevel.com \
    --cc=ryan.wenglarz@sealevel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox