lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 25 Apr 2014 10:08:26 -0400
From:	Jon Ringle <jon@...gle.org>
To:	Charles Coldwell <coldwell@...il.com>
Cc:	"linux-serial@...r.kernel.org" <linux-serial@...r.kernel.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Greg KH <gregkh@...uxfoundation.org>,
	Alexander Shiyan <shc_work@...l.ru>,
	Jon Ringle <jringle@...dpoint.com>
Subject: Re: [PATCH v7 1/2] serial: sc16is7xx

On Fri, Apr 25, 2014 at 9:44 AM, Charles Coldwell <coldwell@...il.com> wrote:
> On Fri, 25 Apr 2014, Charles Coldwell wrote:
>
>> On Thu, 24 Apr 2014, jon@...gle.org wrote:
>>
>> > diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c
>> > new file mode 100644
>> > index 0000000..ed139f5
>> > --- /dev/null
>> > +++ b/drivers/tty/serial/sc16is7xx.c
>>
>> > +
>> > +/* SC16IS7XX register definitions */
>> > +#define SC16IS7XX_RHR_REG          (0x00) /* RX FIFO */
>> > +#define SC16IS7XX_THR_REG          (0x00) /* TX FIFO */
>> > +#define SC16IS7XX_IER_REG          (0x01) /* Interrupt enable */
>> > +#define SC16IS7XX_IIR_REG          (0x02) /* Interrupt Identification */
>> > +#define SC16IS7XX_FCR_REG          (0x02) /* FIFO control */
>> > +#define SC16IS7XX_LCR_REG          (0x03) /* Line Control */
>> > +#define SC16IS7XX_MCR_REG          (0x04) /* Modem Control */
>> > +#define SC16IS7XX_LSR_REG          (0x05) /* Line Status */
>> > +#define SC16IS7XX_MSR_REG          (0x06) /* Modem Status */
>> > +#define SC16IS7XX_SPR_REG          (0x07) /* Scratch Pad */
>>
>> Isn't this a lot of duplication?

I started off doing that, but got frustrated enough by
incompatibilities between the register bit definitions that I
abandoned that and decided to make the driver self contained regarding
the register and bit definitions. For example:

serial_reg.h defines:
#define UART_MCR_TCRTLR        0x40 /* Access TCR/TLR (TI16C752, EFR[4]=1) */

but this is wrong for sc16is7xx. I need:

#define SC16IS7XX_MCR_TCRTLR_BIT    (1 << 2) /* TCR/TLR register enable */

>
> Actually, the whole thing seems like duplication to me.  The SC16IS7X0
> parts are designed to be 16550-compatible (hence the duplication in the
> register map), and so I would vote for putting the driver into the
> drivers/tty/serial/8250 framework.  There's really not much difference
> between these parts and other 16550 parts except that they are reached
> over the SPI/I2C bus.

The fact that we need to reach over the SPI/I2C bus makes a big
difference in the way access is handled.

To achieve acceptable throughput, it is necessary to use threaded irq
and also bulk i2c transfers for RX and TX using
regmap_raw_{read,write}() to optimize the use of the i2c bus.

This is not a good fit for 8250.

Jon
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ