From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Parker Newman <parker@finest.io>
Cc: Parker Newman <pnewman@connecttech.com>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>
Subject: Re: [PATCH v2 00/13] serial: 8250_exar: Clean up the driver
Date: Fri, 13 Sep 2024 12:37:31 +0300 [thread overview]
Message-ID: <ZuQH27ViT84wXKK3@smile.fi.intel.com> (raw)
In-Reply-To: <20240912084147.6af5ac12@SWDEV2.connecttech.local>
On Thu, Sep 12, 2024 at 08:41:47AM -0400, Parker Newman wrote:
> On Wed, 11 Sep 2024 23:51:09 +0300
> Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Wed, Sep 11, 2024 at 01:38:48PM -0400, Parker Newman wrote:
> > > On Mon, 9 Sep 2024 13:06:26 +0300
> > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Fri, Sep 06, 2024 at 02:38:51PM -0400, Parker Newman wrote:
> > > > > On Fri, 6 Sep 2024 17:42:26 +0300
> > > > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > > > On Fri, Sep 06, 2024 at 10:33:54AM -0400, Parker Newman wrote:
> > > > > > > On Fri, 6 Sep 2024 17:24:44 +0300
> > > > > > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > > > > > On Fri, Sep 06, 2024 at 09:51:41AM -0400, Parker Newman wrote:
> > > > > > > > > On Fri, 6 Sep 2024 15:46:51 +0300
> > > > > > > > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > > > > > > > On Fri, May 03, 2024 at 02:33:03PM -0400, Parker Newman wrote:
...
> > > > > > > > > > Sorry for blast from the past, but I have some instersting information
> > > > > > > > > > for you. We now have spi-gpio and 93c46 eeprom drivers available to be
> > > > > > > > > > used from others via software nodes, can you consider updating your code
> > > > > > > > > > to replace custom bitbanging along with r/w ops by the instantiating the
> > > > > > > > > > respective drivers?
> > > > > > > > >
> > > > > > > > > Hi Andy,
> > > > > > > > > The Exar UARTs don't actually use MPIO/GPIO for the EEPROM.
> > > > > > > > > They have a dedicated "EEPROM interface" which is accessed by the
> > > > > > > > > REGB (0x8E) register. It is a very simple bit-bang interface though,
> > > > > > > > > one bit per signal.
> > > > > > > > >
> > > > > > > > > I guess in theory I could either add GPIO wrapper to toggle these bits
> > > > > > > > > and use the spi-gpio driver but I am not sure if that really improves things?
> > > > > > > > > Maybe using the spi-bitbang driver directly is more appropriate?
> > > > > > > > > What do you think?
> > > > > > > >
> > > > > > > > Yes, spi-bitbang seems better in this case.
> > > > > > >
> > > > > > > I will try to make some time to implement this... Or if someone else from the
> > > > > > > community wants to take this on in the mean time I am certainly happy to test
> > > > > > > and help out!
> > > > > >
> > > > > > Sure, I shared this thought due to having lack of time to look myself,
> > > > > > but I prepared the above mentioned drivers to make them work in this case.
> > > > > > (If you are curios, see the Git history for the last few releases with
> > > > > > --author="Andy Shevchenko")
> > > > > >
> > > > >
> > > > > Looking into it a bit more I think we could just use the eeprom_93cx6
> > > > > driver without any SPI layer. Just need to add simple register_read()
> > > > > and register_write() functions to read/write the REB register.
> > > > >
> > > > > That should be a pretty easy change to make, I can try to make that
> > > > > change soon unless anyone has any objections to that method?
> > > >
> > > > Thank you, this is pretty wonderful news!
> > > >
> > >
> > > I have this mostly working however there is one issue. The eeprom_93cx6
> > > driver doesn't seem to discard the "dummy bit" the 93C46 EEPROM outputs
> > > between the writing of the op-code/address to the EEPROM and the reading
> > > of the data from the EEPROM.
> > >
> > > More info can be found on page 6 of the AT93C46 datasheet. I see similar
> > > notes in other 93C46/93C56/93C66 datasheets.
> > > Link: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-5193-SEEPROM-AT93C46D-Datasheet.pdf
> > >
> > > In summary the read operation for the AT93C46 EEPROM is:
> > > Write to EEPROM : 110[A5-A0] (9 bits)
> > > Read from EEPROM: 0[D15-D0] (17 bits)
> > >
> > > Where 110 is the READ OpCode, [A5-A0] is the address to read from,
> > > 0 is a "dummy bit" and then [D15-D0] is the actual data.
> > >
> > > I am seeing the "correct" values being read from the EEPROM when using the
> > > eeprom_93cx6 driver but they are all shifted right by one because the
> > > dummy 0 bit is not being discarded.
> > >
> > > The confusing part is the eeprom_93cx6 driver has behaved the same since
> > > at least 2009 and half a dozen or so other drivers use it. I am not sure
> > > if they just work around and/or live with this bug or if they have
> > > different HW that handles the extra dummy bit?
> >
> > I briefly looked at a few users and it seems to me:
> > 1) either the Atmel chip has different HW protocol;
> > 2) or all of them handle that in HW transparently to SW.
>
> The 3 Exar cards I have handy actually use the ST M93C46 version but looking
> through our BOMs I see AT/CAT/ST used on various cards over the years.
>
> Looking at the READ timing diagrams in the Atmel and ST datasheets it looks
> like the dummy bit should actually be clocked out on the last address bit
> clock cycle. If this were so it would be ignored naturally.
>
> This may just be a quirk of the Exar HW. All Exar code I have looked at
> manually discards the dummy bit.
>
> > > I am hesitant to "fix" the eeprom_93cx6 driver and potentially break the
> > > other users of it. I could add a flag to the eeprom_93cx6 struct to work
> > > around this issue... Unless anyone else has some ideas or input?
> >
> > In my opinion the 93c46 needs an additional configuration setting (in the
> > respective data structure) and some code to implement what you need here.
>
> I see the eeprom_93xx46 driver has the QUIRK_EXTRA_READ_CYCLE quirk to solve
> this issue. I could add something similar.
Seems like a good plan to me, and thanks again for looking into this!
> > But yes, let's wait a bit for other opinions...
--
With Best Regards,
Andy Shevchenko
prev parent reply other threads:[~2024-09-13 9:37 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-03 17:15 [PATCH v2 00/13] serial: 8250_exar: Clean up the driver Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 01/13] serial: 8250_exar: Don't return positive values as error codes Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 02/13] serial: 8250_exar: Describe all parameters in kernel doc Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 03/13] serial: 8250_exar: Kill CTI_PCI_DEVICE() Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 04/13] serial: 8250_exar: Use PCI_SUBVENDOR_ID_IBM for subvendor ID Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 05/13] serial: 8250_exar: Trivia typo fixes Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 06/13] serial: 8250_exar: Extract cti_board_init_osc_freq() helper Andy Shevchenko
2024-05-03 17:15 ` [PATCH v2 07/13] serial: 8250_exar: Kill unneeded ->board_init() Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 08/13] serial: 8250_exar: Decrease indentation level Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 09/13] serial: 8250_exar: Return directly from switch-cases Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 10/13] serial: 8250_exar: Switch to use dev_err_probe() Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 11/13] serial: 8250_exar: Use BIT() in exar_ee_read() Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 12/13] serial: 8250_exar: Make type of bit the same in exar_ee_*_bit() Andy Shevchenko
2024-05-03 17:16 ` [PATCH v2 13/13] serial: 8250_exar: Keep the includes sorted Andy Shevchenko
2024-05-03 18:33 ` [PATCH v2 00/13] serial: 8250_exar: Clean up the driver Parker Newman
2024-09-06 12:46 ` Andy Shevchenko
2024-09-06 13:51 ` Parker Newman
2024-09-06 14:24 ` Andy Shevchenko
2024-09-06 14:33 ` Parker Newman
2024-09-06 14:42 ` Andy Shevchenko
2024-09-06 18:38 ` Parker Newman
2024-09-09 10:06 ` Andy Shevchenko
2024-09-11 17:38 ` Parker Newman
2024-09-11 20:51 ` Andy Shevchenko
2024-09-12 12:41 ` Parker Newman
2024-09-13 9:37 ` Andy Shevchenko [this message]
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=ZuQH27ViT84wXKK3@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=parker@finest.io \
--cc=pnewman@connecttech.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;
as well as URLs for NNTP newsgroup(s).