RE: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under IGNPAR option

2015-08-17 Thread Anirudha Sarangi
Hi,

> -Original Message-
> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> Sent: Monday, August 17, 2015 9:50 PM
> To: Anirudha Sarangi; Michal Simek
> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Soren Brinkmann; Jiri
> Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; linux-arm-
> ker...@lists.infradead.org
> Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under
> IGNPAR option
>
> On 08/17/2015 11:58 AM, Anirudha Sarangi wrote:
> > Hi,
> >
> >> -Original Message-
> >> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> >> Sent: Monday, August 17, 2015 9:20 PM
> >> To: Michal Simek
> >> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi;
> >> Soren Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg
> >> Kroah-Hartman; linux- arm-ker...@lists.infradead.org
> >> Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun
> >> errors under IGNPAR option
> >>
> >> On 08/17/2015 03:22 AM, Michal Simek wrote:
> >>> From: Anirudha Sarangi 
> >>>
> >>> The existing implementation includes overrun errors under IGNPAR
> >>> option. This patch fixes it by including only parity and framing
> >>> error under IGNPAR option.
> >>
> >> The convention adopted by Linux serial drivers is to ignore overrun
> >> errors if both IGNPAR and IGNBRK are set.
> >>
> > I just followed the set_termios documentation, which says that IGNPAR is for
> parity and framing.
> > The current controller does not support break detection reliably.
> > That is probably why we don’t have IGNBRK.
>
> My point is about how a user-space process tells the serial driver to ignore
> overrun errors, as well, and not specifically about break handling.
>
I understand and this particular change is not very important in the patch set.
I can happily remove it.

Regards
Anirudha
> >
> > Regards
> > Anirudha
> >
> >> Regards,
> >> Peter Hurley
> >>
> >>> Signed-off-by: Anirudha Sarangi 
> >>> Signed-off-by: Michal Simek 
> >>> ---
> >>>
> >>>  drivers/tty/serial/xilinx_uartps.c | 2 +-
> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/tty/serial/xilinx_uartps.c
> >>> b/drivers/tty/serial/xilinx_uartps.c
> >>> index a3020344ac9d..c4437e8929ff 100644
> >>> --- a/drivers/tty/serial/xilinx_uartps.c
> >>> +++ b/drivers/tty/serial/xilinx_uartps.c
> >>> @@ -691,7 +691,7 @@ static void cdns_uart_set_termios(struct
> >>> uart_port *port,
> >>>
> >>> if (termios->c_iflag & IGNPAR)
> >>> port->ignore_status_mask |= CDNS_UART_IXR_PARITY |
> >>> -   CDNS_UART_IXR_FRAMING |
> >> CDNS_UART_IXR_OVERRUN;
> >>> +   CDNS_UART_IXR_FRAMING;
> >>>
> >>> /* ignore all characters if CREAD is not set */
> >>> if ((termios->c_cflag & CREAD) == 0)
> >>>
> >
> >
> >
> > This email and any attachments are intended for the sole use of the named
> recipient(s) and contain(s) confidential information that may be proprietary,
> privileged or copyrighted under applicable law. If you are not the intended
> recipient, do not read, copy, or forward this email message or any 
> attachments.
> Delete this email message and any attachments immediately.
> >



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.

N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a���
0��h���i

RE: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd parity

2015-08-17 Thread Anirudha Sarangi
Hi,

> -Original Message-
> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> Sent: Monday, August 17, 2015 9:54 PM
> To: Anirudha Sarangi; Michal Simek
> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Soren Brinkmann; Jiri
> Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; linux-arm-
> ker...@lists.infradead.org
> Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd 
> parity
>
> On 08/17/2015 11:55 AM, Anirudha Sarangi wrote:
> > Hi,
> >
> >> -Original Message-
> >> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> >> Sent: Monday, August 17, 2015 9:09 PM
> >> To: Michal Simek
> >> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi;
> >> Soren Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg
> >> Kroah-Hartman; linux- arm-ker...@lists.infradead.org
> >> Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for
> >> enabling odd parity
> >>
> >> On 08/17/2015 03:22 AM, Michal Simek wrote:
> >>> From: Anirudha Sarangi 
> >>>
> >>> Existing set_termios does not handle the option for enabling odd
> >>> parity. This patch fixes it.
> >>
> >> NAK. PARODD does not enable parity generation or detection.
> >>
> > What if someone is trying to change from even to odd parity?
>
> If userspace wants odd parity, then c_cflag must have both PARENB and PARODD
> set.
>
> Just PARODD does nothing.
>
> From SUS v4, General Terminal Interface, 11.2.4 Control Modes;
>
> "If PARENB is set, parity generation and detection shall be enabled and a 
> parity
> bit is added to each byte. If parity is enabled, PARODD shall specify odd 
> parity if
> set; otherwise, even parity shall be used."
>
>
Thanks a lot. I will incorporate the changes.
>
> > In this conditional case, we setup some register bit for the same.
> > Is the above use case not a valid one?
> >
> > Regards
> > Anirudha
> >
> >> Regards,
> >> Peter Hurley
> >>
> >>> Signed-off-by: Anirudha Sarangi 
> >>> Signed-off-by: Michal Simek 
> >>> ---
> >>>
> >>>  drivers/tty/serial/xilinx_uartps.c | 2 +-
> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/tty/serial/xilinx_uartps.c
> >>> b/drivers/tty/serial/xilinx_uartps.c
> >>> index 009e0dbc12d2..a3020344ac9d 100644
> >>> --- a/drivers/tty/serial/xilinx_uartps.c
> >>> +++ b/drivers/tty/serial/xilinx_uartps.c
> >>> @@ -723,7 +723,7 @@ static void cdns_uart_set_termios(struct
> >>> uart_port
> >> *port,
> >>> else
> >>> cval |= CDNS_UART_MR_STOPMODE_1_BIT; /* 1 STOP bit */
> >>>
> >>> -   if (termios->c_cflag & PARENB) {
> >>> +   if ((termios->c_cflag & PARENB) || (termios->c_cflag & PARODD))
> >>> + {
> >>> /* Mark or Space parity */
> >>> if (termios->c_cflag & CMSPAR) {
> >>> if (termios->c_cflag & PARODD)
> >>>
> >
> >
> >
> > This email and any attachments are intended for the sole use of the named
> recipient(s) and contain(s) confidential information that may be proprietary,
> privileged or copyrighted under applicable law. If you are not the intended
> recipient, do not read, copy, or forward this email message or any 
> attachments.
> Delete this email message and any attachments immediately.
> >



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under IGNPAR option

2015-08-17 Thread Anirudha Sarangi
Hi,

> -Original Message-
> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> Sent: Monday, August 17, 2015 9:20 PM
> To: Michal Simek
> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
> Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
> linux-
> arm-ker...@lists.infradead.org
> Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under
> IGNPAR option
>
> On 08/17/2015 03:22 AM, Michal Simek wrote:
> > From: Anirudha Sarangi 
> >
> > The existing implementation includes overrun errors under IGNPAR
> > option. This patch fixes it by including only parity and framing error
> > under IGNPAR option.
>
> The convention adopted by Linux serial drivers is to ignore overrun errors if 
> both
> IGNPAR and IGNBRK are set.
>
I just followed the set_termios documentation, which says that IGNPAR is for 
parity and framing.
The current controller does not support break detection reliably.
That is probably why we don’t have IGNBRK.

Regards
Anirudha

> Regards,
> Peter Hurley
>
> > Signed-off-by: Anirudha Sarangi 
> > Signed-off-by: Michal Simek 
> > ---
> >
> >  drivers/tty/serial/xilinx_uartps.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/tty/serial/xilinx_uartps.c
> > b/drivers/tty/serial/xilinx_uartps.c
> > index a3020344ac9d..c4437e8929ff 100644
> > --- a/drivers/tty/serial/xilinx_uartps.c
> > +++ b/drivers/tty/serial/xilinx_uartps.c
> > @@ -691,7 +691,7 @@ static void cdns_uart_set_termios(struct uart_port
> > *port,
> >
> > if (termios->c_iflag & IGNPAR)
> > port->ignore_status_mask |= CDNS_UART_IXR_PARITY |
> > -   CDNS_UART_IXR_FRAMING |
> CDNS_UART_IXR_OVERRUN;
> > +   CDNS_UART_IXR_FRAMING;
> >
> > /* ignore all characters if CREAD is not set */
> > if ((termios->c_cflag & CREAD) == 0)
> >



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd parity

2015-08-17 Thread Anirudha Sarangi
Hi,

> -Original Message-
> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> Sent: Monday, August 17, 2015 9:09 PM
> To: Michal Simek
> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
> Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
> linux-
> arm-ker...@lists.infradead.org
> Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd 
> parity
>
> On 08/17/2015 03:22 AM, Michal Simek wrote:
> > From: Anirudha Sarangi 
> >
> > Existing set_termios does not handle the option for enabling odd
> > parity. This patch fixes it.
>
> NAK. PARODD does not enable parity generation or detection.
>
What if someone is trying to change from even to odd parity?
In this conditional case, we setup some register bit for the same.
Is the above use case not a valid one?

Regards
Anirudha

> Regards,
> Peter Hurley
>
> > Signed-off-by: Anirudha Sarangi 
> > Signed-off-by: Michal Simek 
> > ---
> >
> >  drivers/tty/serial/xilinx_uartps.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/tty/serial/xilinx_uartps.c
> > b/drivers/tty/serial/xilinx_uartps.c
> > index 009e0dbc12d2..a3020344ac9d 100644
> > --- a/drivers/tty/serial/xilinx_uartps.c
> > +++ b/drivers/tty/serial/xilinx_uartps.c
> > @@ -723,7 +723,7 @@ static void cdns_uart_set_termios(struct uart_port
> *port,
> > else
> > cval |= CDNS_UART_MR_STOPMODE_1_BIT; /* 1 STOP bit */
> >
> > -   if (termios->c_cflag & PARENB) {
> > +   if ((termios->c_cflag & PARENB) || (termios->c_cflag & PARODD)) {
> > /* Mark or Space parity */
> > if (termios->c_cflag & CMSPAR) {
> > if (termios->c_cflag & PARODD)
> >



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 4/4] serial: xuartps: Rewrite the interrupt handling logic

2015-08-17 Thread Anirudha Sarangi
Hi,

> -Original Message-
> From: Peter Hurley [mailto:pe...@hurleysoftware.com]
> Sent: Monday, August 17, 2015 9:26 PM
> To: Michal Simek
> Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
> Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
> linux-
> arm-ker...@lists.infradead.org
> Subject: Re: [PATCH 4/4] serial: xuartps: Rewrite the interrupt handling logic
>
> On 08/17/2015 03:22 AM, Michal Simek wrote:
> > From: Anirudha Sarangi 
> >
> > The existing interrupt handling logic has followins issues.
> > - Upon a parity error with default configuration, the control
> >   never comes out of the ISR thereby hanging Linux.
> > - The error handling logic around framing and parity error are buggy.
> >   There are chances that the errors will never be captured.
> > - The existing ISR is just too long.
> > This patch fixes all these concerns.
>
> This patch is unreviewable. Please break this down into multiple patches.
>
Thanks. Let me give a shot. It is just breaking the single big ISR that has 
both Rx and Tx in a single function into smaller ones.
Not sure how I will create smaller patches, but I will try and get back.

Regards
Anirudha

> Regards,
> Peter Hurley
>
> > It separates out the Tx and Rx
> > hanling logic into separate functions. It ensures that the status
> > registers are cleared on all cases so that a hang situation never
> > arises.
> >
> > Signed-off-by: Anirudha Sarangi 
> > Signed-off-by: Michal Simek 
> > ---
> >
> >  drivers/tty/serial/xilinx_uartps.c | 194
> > -
> >  1 file changed, 104 insertions(+), 90 deletions(-)
> >
> > diff --git a/drivers/tty/serial/xilinx_uartps.c
> > b/drivers/tty/serial/xilinx_uartps.c
> > index 2dc26e5f1384..c771dbbf6161 100644
> > --- a/drivers/tty/serial/xilinx_uartps.c
> > +++ b/drivers/tty/serial/xilinx_uartps.c
> > @@ -173,61 +173,86 @@ struct cdns_uart {
> > clk_rate_change_nb);
> >
> >  /**
> > - * cdns_uart_isr - Interrupt handler
> > - * @irq: Irq number
> > - * @dev_id: Id of the port
> > - *
> > - * Return: IRQHANDLED
> > + * cdns_uart_handle_tx - Handle the bytes to be Txed.
> > + * @dev_id: Id of the UART port
> > + * Return: None
> >   */
> > -static irqreturn_t cdns_uart_isr(int irq, void *dev_id)
> > +static void cdns_uart_handle_tx(void *dev_id)
> >  {
> > struct uart_port *port = (struct uart_port *)dev_id;
> > -   unsigned long flags;
> > -   unsigned int isrstatus, numbytes;
> > -   unsigned int data;
> > -   char status = TTY_NORMAL;
> > +   unsigned int numbytes;
> >
> > -   spin_lock_irqsave(>lock, flags);
> > +   if (uart_circ_empty(>state->xmit)) {
> > +   writel(CDNS_UART_IXR_TXEMPTY, port->membase +
> > +  CDNS_UART_IDR_OFFSET);
> > +   } else {
> > +   numbytes = port->fifosize;
> > +   /* Break if no more data available in the UART buffer */
> > +   while (numbytes--) {
> > +   if (uart_circ_empty(>state->xmit))
> > +   break;
> > +   /*
> > +* Get the data from the UART circular buffer
> > +* and write it to the cdns_uart's TX_FIFO
> > +* register.
> > +*/
> > +   writel(port->state->xmit.buf[port->state->xmit.tail],
> > +  port->membase + CDNS_UART_FIFO_OFFSET);
> >
> > -   /* Read the interrupt status register to determine which
> > -* interrupt(s) is/are active.
> > -*/
> > -   isrstatus = readl(port->membase + CDNS_UART_ISR_OFFSET);
> > +   port->icount.tx++;
> >
> > -   /*
> > -* There is no hardware break detection, so we interpret framing
> > -* error with all-zeros data as a break sequence. Most of the time,
> > -* there's another non-zero byte at the end of the sequence.
> > -*/
> > -   if (isrstatus & CDNS_UART_IXR_FRAMING) {
> > -   while (!(readl(port->membase + CDNS_UART_SR_OFFSET) &
> > -   CDNS_UART_SR_RXEMPTY)) {
> > -   if (!readl(port->membase + CDNS_UART_FIFO_OFFSET))
> {
> > -   port->read_status_mask |=
> CDNS_UART_IXR_BRK;
> > -   isrstatus &= ~CDNS_UART_IXR_FRAMING;
> > -   }
> 

RE: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under IGNPAR option

2015-08-17 Thread Anirudha Sarangi
Hi,

 -Original Message-
 From: Peter Hurley [mailto:pe...@hurleysoftware.com]
 Sent: Monday, August 17, 2015 9:50 PM
 To: Anirudha Sarangi; Michal Simek
 Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Soren Brinkmann; Jiri
 Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; linux-arm-
 ker...@lists.infradead.org
 Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under
 IGNPAR option

 On 08/17/2015 11:58 AM, Anirudha Sarangi wrote:
  Hi,
 
  -Original Message-
  From: Peter Hurley [mailto:pe...@hurleysoftware.com]
  Sent: Monday, August 17, 2015 9:20 PM
  To: Michal Simek
  Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi;
  Soren Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg
  Kroah-Hartman; linux- arm-ker...@lists.infradead.org
  Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun
  errors under IGNPAR option
 
  On 08/17/2015 03:22 AM, Michal Simek wrote:
  From: Anirudha Sarangi anirudha.sara...@xilinx.com
 
  The existing implementation includes overrun errors under IGNPAR
  option. This patch fixes it by including only parity and framing
  error under IGNPAR option.
 
  The convention adopted by Linux serial drivers is to ignore overrun
  errors if both IGNPAR and IGNBRK are set.
 
  I just followed the set_termios documentation, which says that IGNPAR is for
 parity and framing.
  The current controller does not support break detection reliably.
  That is probably why we don’t have IGNBRK.

 My point is about how a user-space process tells the serial driver to ignore
 overrun errors, as well, and not specifically about break handling.

I understand and this particular change is not very important in the patch set.
I can happily remove it.

Regards
Anirudha
 
  Regards
  Anirudha
 
  Regards,
  Peter Hurley
 
  Signed-off-by: Anirudha Sarangi anir...@xilinx.com
  Signed-off-by: Michal Simek michal.si...@xilinx.com
  ---
 
   drivers/tty/serial/xilinx_uartps.c | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/tty/serial/xilinx_uartps.c
  b/drivers/tty/serial/xilinx_uartps.c
  index a3020344ac9d..c4437e8929ff 100644
  --- a/drivers/tty/serial/xilinx_uartps.c
  +++ b/drivers/tty/serial/xilinx_uartps.c
  @@ -691,7 +691,7 @@ static void cdns_uart_set_termios(struct
  uart_port *port,
 
  if (termios-c_iflag  IGNPAR)
  port-ignore_status_mask |= CDNS_UART_IXR_PARITY |
  -   CDNS_UART_IXR_FRAMING |
  CDNS_UART_IXR_OVERRUN;
  +   CDNS_UART_IXR_FRAMING;
 
  /* ignore all characters if CREAD is not set */
  if ((termios-c_cflag  CREAD) == 0)
 
 
 
 
  This email and any attachments are intended for the sole use of the named
 recipient(s) and contain(s) confidential information that may be proprietary,
 privileged or copyrighted under applicable law. If you are not the intended
 recipient, do not read, copy, or forward this email message or any 
 attachments.
 Delete this email message and any attachments immediately.
 



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.

N�r��yb�X��ǧv�^�)޺{.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a���
0��h���i

RE: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd parity

2015-08-17 Thread Anirudha Sarangi
Hi,

 -Original Message-
 From: Peter Hurley [mailto:pe...@hurleysoftware.com]
 Sent: Monday, August 17, 2015 9:54 PM
 To: Anirudha Sarangi; Michal Simek
 Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Soren Brinkmann; Jiri
 Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; linux-arm-
 ker...@lists.infradead.org
 Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd 
 parity

 On 08/17/2015 11:55 AM, Anirudha Sarangi wrote:
  Hi,
 
  -Original Message-
  From: Peter Hurley [mailto:pe...@hurleysoftware.com]
  Sent: Monday, August 17, 2015 9:09 PM
  To: Michal Simek
  Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi;
  Soren Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg
  Kroah-Hartman; linux- arm-ker...@lists.infradead.org
  Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for
  enabling odd parity
 
  On 08/17/2015 03:22 AM, Michal Simek wrote:
  From: Anirudha Sarangi anirudha.sara...@xilinx.com
 
  Existing set_termios does not handle the option for enabling odd
  parity. This patch fixes it.
 
  NAK. PARODD does not enable parity generation or detection.
 
  What if someone is trying to change from even to odd parity?

 If userspace wants odd parity, then c_cflag must have both PARENB and PARODD
 set.

 Just PARODD does nothing.

 From SUS v4, General Terminal Interface, 11.2.4 Control Modes;

 If PARENB is set, parity generation and detection shall be enabled and a 
 parity
 bit is added to each byte. If parity is enabled, PARODD shall specify odd 
 parity if
 set; otherwise, even parity shall be used.


Thanks a lot. I will incorporate the changes.

  In this conditional case, we setup some register bit for the same.
  Is the above use case not a valid one?
 
  Regards
  Anirudha
 
  Regards,
  Peter Hurley
 
  Signed-off-by: Anirudha Sarangi anir...@xilinx.com
  Signed-off-by: Michal Simek michal.si...@xilinx.com
  ---
 
   drivers/tty/serial/xilinx_uartps.c | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/tty/serial/xilinx_uartps.c
  b/drivers/tty/serial/xilinx_uartps.c
  index 009e0dbc12d2..a3020344ac9d 100644
  --- a/drivers/tty/serial/xilinx_uartps.c
  +++ b/drivers/tty/serial/xilinx_uartps.c
  @@ -723,7 +723,7 @@ static void cdns_uart_set_termios(struct
  uart_port
  *port,
  else
  cval |= CDNS_UART_MR_STOPMODE_1_BIT; /* 1 STOP bit */
 
  -   if (termios-c_cflag  PARENB) {
  +   if ((termios-c_cflag  PARENB) || (termios-c_cflag  PARODD))
  + {
  /* Mark or Space parity */
  if (termios-c_cflag  CMSPAR) {
  if (termios-c_cflag  PARODD)
 
 
 
 
  This email and any attachments are intended for the sole use of the named
 recipient(s) and contain(s) confidential information that may be proprietary,
 privileged or copyrighted under applicable law. If you are not the intended
 recipient, do not read, copy, or forward this email message or any 
 attachments.
 Delete this email message and any attachments immediately.
 



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd parity

2015-08-17 Thread Anirudha Sarangi
Hi,

 -Original Message-
 From: Peter Hurley [mailto:pe...@hurleysoftware.com]
 Sent: Monday, August 17, 2015 9:09 PM
 To: Michal Simek
 Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
 Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
 linux-
 arm-ker...@lists.infradead.org
 Subject: Re: [PATCH 1/4] serial: xuartps: Fix termios issue for enabling odd 
 parity

 On 08/17/2015 03:22 AM, Michal Simek wrote:
  From: Anirudha Sarangi anirudha.sara...@xilinx.com
 
  Existing set_termios does not handle the option for enabling odd
  parity. This patch fixes it.

 NAK. PARODD does not enable parity generation or detection.

What if someone is trying to change from even to odd parity?
In this conditional case, we setup some register bit for the same.
Is the above use case not a valid one?

Regards
Anirudha

 Regards,
 Peter Hurley

  Signed-off-by: Anirudha Sarangi anir...@xilinx.com
  Signed-off-by: Michal Simek michal.si...@xilinx.com
  ---
 
   drivers/tty/serial/xilinx_uartps.c | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/tty/serial/xilinx_uartps.c
  b/drivers/tty/serial/xilinx_uartps.c
  index 009e0dbc12d2..a3020344ac9d 100644
  --- a/drivers/tty/serial/xilinx_uartps.c
  +++ b/drivers/tty/serial/xilinx_uartps.c
  @@ -723,7 +723,7 @@ static void cdns_uart_set_termios(struct uart_port
 *port,
  else
  cval |= CDNS_UART_MR_STOPMODE_1_BIT; /* 1 STOP bit */
 
  -   if (termios-c_cflag  PARENB) {
  +   if ((termios-c_cflag  PARENB) || (termios-c_cflag  PARODD)) {
  /* Mark or Space parity */
  if (termios-c_cflag  CMSPAR) {
  if (termios-c_cflag  PARODD)
 



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under IGNPAR option

2015-08-17 Thread Anirudha Sarangi
Hi,

 -Original Message-
 From: Peter Hurley [mailto:pe...@hurleysoftware.com]
 Sent: Monday, August 17, 2015 9:20 PM
 To: Michal Simek
 Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
 Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
 linux-
 arm-ker...@lists.infradead.org
 Subject: Re: [PATCH 2/4] serial: xuartps: Do not handle overrun errors under
 IGNPAR option

 On 08/17/2015 03:22 AM, Michal Simek wrote:
  From: Anirudha Sarangi anirudha.sara...@xilinx.com
 
  The existing implementation includes overrun errors under IGNPAR
  option. This patch fixes it by including only parity and framing error
  under IGNPAR option.

 The convention adopted by Linux serial drivers is to ignore overrun errors if 
 both
 IGNPAR and IGNBRK are set.

I just followed the set_termios documentation, which says that IGNPAR is for 
parity and framing.
The current controller does not support break detection reliably.
That is probably why we don’t have IGNBRK.

Regards
Anirudha

 Regards,
 Peter Hurley

  Signed-off-by: Anirudha Sarangi anir...@xilinx.com
  Signed-off-by: Michal Simek michal.si...@xilinx.com
  ---
 
   drivers/tty/serial/xilinx_uartps.c | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/tty/serial/xilinx_uartps.c
  b/drivers/tty/serial/xilinx_uartps.c
  index a3020344ac9d..c4437e8929ff 100644
  --- a/drivers/tty/serial/xilinx_uartps.c
  +++ b/drivers/tty/serial/xilinx_uartps.c
  @@ -691,7 +691,7 @@ static void cdns_uart_set_termios(struct uart_port
  *port,
 
  if (termios-c_iflag  IGNPAR)
  port-ignore_status_mask |= CDNS_UART_IXR_PARITY |
  -   CDNS_UART_IXR_FRAMING |
 CDNS_UART_IXR_OVERRUN;
  +   CDNS_UART_IXR_FRAMING;
 
  /* ignore all characters if CREAD is not set */
  if ((termios-c_cflag  CREAD) == 0)
 



This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.



RE: [PATCH 4/4] serial: xuartps: Rewrite the interrupt handling logic

2015-08-17 Thread Anirudha Sarangi
Hi,

 -Original Message-
 From: Peter Hurley [mailto:pe...@hurleysoftware.com]
 Sent: Monday, August 17, 2015 9:26 PM
 To: Michal Simek
 Cc: linux-kernel@vger.kernel.org; mon...@monstr.eu; Anirudha Sarangi; Soren
 Brinkmann; Jiri Slaby; linux-ser...@vger.kernel.org; Greg Kroah-Hartman; 
 linux-
 arm-ker...@lists.infradead.org
 Subject: Re: [PATCH 4/4] serial: xuartps: Rewrite the interrupt handling logic

 On 08/17/2015 03:22 AM, Michal Simek wrote:
  From: Anirudha Sarangi anirudha.sara...@xilinx.com
 
  The existing interrupt handling logic has followins issues.
  - Upon a parity error with default configuration, the control
never comes out of the ISR thereby hanging Linux.
  - The error handling logic around framing and parity error are buggy.
There are chances that the errors will never be captured.
  - The existing ISR is just too long.
  This patch fixes all these concerns.

 This patch is unreviewable. Please break this down into multiple patches.

Thanks. Let me give a shot. It is just breaking the single big ISR that has 
both Rx and Tx in a single function into smaller ones.
Not sure how I will create smaller patches, but I will try and get back.

Regards
Anirudha

 Regards,
 Peter Hurley

  It separates out the Tx and Rx
  hanling logic into separate functions. It ensures that the status
  registers are cleared on all cases so that a hang situation never
  arises.
 
  Signed-off-by: Anirudha Sarangi anir...@xilinx.com
  Signed-off-by: Michal Simek michal.si...@xilinx.com
  ---
 
   drivers/tty/serial/xilinx_uartps.c | 194
  -
   1 file changed, 104 insertions(+), 90 deletions(-)
 
  diff --git a/drivers/tty/serial/xilinx_uartps.c
  b/drivers/tty/serial/xilinx_uartps.c
  index 2dc26e5f1384..c771dbbf6161 100644
  --- a/drivers/tty/serial/xilinx_uartps.c
  +++ b/drivers/tty/serial/xilinx_uartps.c
  @@ -173,61 +173,86 @@ struct cdns_uart {
  clk_rate_change_nb);
 
   /**
  - * cdns_uart_isr - Interrupt handler
  - * @irq: Irq number
  - * @dev_id: Id of the port
  - *
  - * Return: IRQHANDLED
  + * cdns_uart_handle_tx - Handle the bytes to be Txed.
  + * @dev_id: Id of the UART port
  + * Return: None
*/
  -static irqreturn_t cdns_uart_isr(int irq, void *dev_id)
  +static void cdns_uart_handle_tx(void *dev_id)
   {
  struct uart_port *port = (struct uart_port *)dev_id;
  -   unsigned long flags;
  -   unsigned int isrstatus, numbytes;
  -   unsigned int data;
  -   char status = TTY_NORMAL;
  +   unsigned int numbytes;
 
  -   spin_lock_irqsave(port-lock, flags);
  +   if (uart_circ_empty(port-state-xmit)) {
  +   writel(CDNS_UART_IXR_TXEMPTY, port-membase +
  +  CDNS_UART_IDR_OFFSET);
  +   } else {
  +   numbytes = port-fifosize;
  +   /* Break if no more data available in the UART buffer */
  +   while (numbytes--) {
  +   if (uart_circ_empty(port-state-xmit))
  +   break;
  +   /*
  +* Get the data from the UART circular buffer
  +* and write it to the cdns_uart's TX_FIFO
  +* register.
  +*/
  +   writel(port-state-xmit.buf[port-state-xmit.tail],
  +  port-membase + CDNS_UART_FIFO_OFFSET);
 
  -   /* Read the interrupt status register to determine which
  -* interrupt(s) is/are active.
  -*/
  -   isrstatus = readl(port-membase + CDNS_UART_ISR_OFFSET);
  +   port-icount.tx++;
 
  -   /*
  -* There is no hardware break detection, so we interpret framing
  -* error with all-zeros data as a break sequence. Most of the time,
  -* there's another non-zero byte at the end of the sequence.
  -*/
  -   if (isrstatus  CDNS_UART_IXR_FRAMING) {
  -   while (!(readl(port-membase + CDNS_UART_SR_OFFSET) 
  -   CDNS_UART_SR_RXEMPTY)) {
  -   if (!readl(port-membase + CDNS_UART_FIFO_OFFSET))
 {
  -   port-read_status_mask |=
 CDNS_UART_IXR_BRK;
  -   isrstatus = ~CDNS_UART_IXR_FRAMING;
  -   }
  +   /*
  +* Adjust the tail of the UART buffer and wrap
  +* the buffer if it reaches limit.
  +*/
  +   port-state-xmit.tail =
  +   (port-state-xmit.tail + 1) 
  +   (UART_XMIT_SIZE - 1);
  }
  -   writel(CDNS_UART_IXR_FRAMING,
  -   port-membase + CDNS_UART_ISR_OFFSET);
  -   }
 
  -   /* drop byte with parity error if IGNPAR specified */
  -   if (isrstatus  port-ignore_status_mask  CDNS_UART_IXR_PARITY)
  -   isrstatus = ~(CDNS_UART_IXR_RXTRIG |
 CDNS_UART_IXR_TOUT);
  +   if (uart_circ_chars_pending(
  +   port-state-xmit)  WAKEUP_CHARS