mbox series

[v9,00/32] Improvements for Tegra I2C driver

Message ID 20200929221915.10979-1-digetx@gmail.com
Headers show
Series Improvements for Tegra I2C driver | expand

Message

Dmitry Osipenko Sept. 29, 2020, 10:18 p.m. UTC
Hello!

This series performs refactoring of the Tegra I2C driver code and hardens
the atomic-transfer mode.

Changelog:

v9: - Fixed bug in patch "Factor out packet header setup from
      tegra_i2c_xfer_msg()" which caused packet header to be missed
      in a case of TX DMA. Double-checked that DMA mode works after
      the fix, including PIO fallback.

    - Added r-b from Andy Shevchenko to all patches.

v8: - Dropped these patches:

        i2c: tegra: Don't fall back to PIO mode if DMA configuration fails
        i2c: tegra: Consolidate error handling in tegra_i2c_xfer_msg()

    - The "Use clk-bulk helpers" patch now uses clk_bulk_get() instead of
      clk_bulk_get_all().

    - Updated these patches:

        i2c: tegra: Improve formatting of variables
        i2c: tegra: Clean up variable names
        i2c: tegra: Clean up and improve comments

      All the changes are made in response to comments from Thierry Reding
      that he gave to v7.

      I kept the "Check errors for both positive and negative values"
      patch because me and Andy Shevchenko are thinking that it's a good
      improvement.

    - Added t-b and r-b from Thierry Reding.

v7: - Reworked the "Clean up probe function" patch by moving out all
      variable renamings into the "Clean up variable names" patch.
      This results in a nicer diff, which was asked by Andy Shevchenko.

    - Squashed "Improve coding style of tegra_i2c_wait_for_config_load()"
      patch into "Factor out register polling into separate function" in
      order avoid unnecessary ping-pong changes, which was asked by
      Andy Shevchenko.

    - Added more indentation improvements, it should be ideal now.

    - I haven't changed order of the "Clean up variable types" patch,
      which was suggested by Andy Shevchenko, because I already moved
      that patch multiple times and we decided to sort patches starting
      with more important cleanups and down to less important. The type
      changes are more important than shuffling code around, IMO.

v6: - Added new patch that adds missing RPM puts, thanks to Andy Shevchenko
      for the suggestion.

    - Improved commit messages by extending them with more a more detailed
      explanation of the changes.

    - Added clarifying comment to the "Use reset_control_reset()" change,
      which was asked by Andy Shevchenko.

    - Refactored the "Clean up probe function" patch by moving the
      dev_err_probe() change into the "Use clk-bulk helpers" patch,
      which was suggested by Andy Shevchenko.

    - Improved ordering of the patches like it was suggested by
      Andy Shevchenko.

    - Added Andy Shevchenko to suggested-by of the "Use clk-bulk helpers"
      patch.

    - Improved "Remove i2c_dev.clk_divisor_non_hs_mode member" patch by
      making the case-switch to use "fast plus mode" timing if clock rate
      is out-of-range. Just to make it more consistent.

    - The "Improve tegra_i2c_dev structure" patch is squashed into
     "Improve formatting of variables" and "Clean up types/names" patches.

    - All variable-renaming changes are squashed into a single "Clean up
      variable names" patch.

    - Made extra minor improvement to various patches, like more comments
      and indentations improved.

v5: - Dropped the "Factor out runtime PM and hardware initialization"
      patch, like it was suggested by Michał Mirosław. Instead a less
      invasive "Factor out hardware initialization into separate function"
      patch added, it doesn't touch the RPM initialization.

    - The "Remove outdated barrier()" patch now removes outdated comments.

    - Updated commit description of the "Remove "dma" variable" patch,
      saying that the transfer mode may be changed by a callee. This was
      suggested by Michał Mirosław.

    - Reworked the "Clean up and improve comments" patch. Couple more
      comments are corrected and reworded now.

    - Added r-b's from Michał Mirosław.

    - New patches:

        i2c: tegra: Mask interrupt in tegra_i2c_issue_bus_clear()
        i2c: tegra: Remove redundant check in tegra_i2c_issue_bus_clear()
        i2c: tegra: Don't fall back to PIO mode if DMA configuration fails
        i2c: tegra: Clean up variable types
        i2c: tegra: Improve tegra_i2c_dev structure

v4: - Reordered patches in the fixes/features/cleanups order like it was
      suggested by Andy Shevchenko.

    - Now using clk-bulk API, which was suggested by Andy Shevchenko.

    - Reworked "Make tegra_i2c_flush_fifos() usable in atomic transfer"
      patch to use iopoll API, which was suggested by Andy Shevchenko.

    - Separated "Clean up probe function" into several smaller patches.

    - Squashed "Add missing newline before returns" patch into
      "Clean up whitespaces, newlines and indentation".

    - The "Drop '_timeout' from wait/poll function names" is renamed to
      "Rename wait/poll functions".

    - The "Use reset_control_reset()" is changed to not fail tegra_i2c_init(),
      but only emit warning. This should be more friendly behaviour in oppose
      to having a non-bootable machine if reset-control fails.

    - New patches:

        i2c: tegra: Remove error message used for devm_request_irq() failure
        i2c: tegra: Use devm_platform_get_and_ioremap_resource()
        i2c: tegra: Use platform_get_irq()
        i2c: tegra: Use clk-bulk helpers
        i2c: tegra: Remove bogus barrier()
        i2c: tegra: Factor out register polling into separate function
        i2c: tegra: Consolidate error handling in tegra_i2c_xfer_msg()
        i2c: tegra: Clean up and improve comments
        i2c: tegra: Rename couple "ret" variables to "err"

v3: - Optimized "Make tegra_i2c_flush_fifos() usable in atomic transfer"
      patch by pre-checking FIFO state before starting to poll using
      ktime API, which may be expensive under some circumstances.

    - The "Clean up messages in the code" patch now makes all messages
      to use proper capitalization of abbreviations. Thanks to Andy Shevchenko
      and Michał Mirosław for the suggestion.

    - The "Remove unnecessary whitespaces and newlines" patch is transformed
      into "Clean up whitespaces and newlines", it now also adds missing
      newlines and spaces.

    - Reworked the "Clean up probe function" patch in accordance to
      suggestion from Michał Mirosław by factoring out only parts of
      the code that make error unwinding cleaner.

    - Added r-b from Michał Mirosław.

    - Added more patches:

        i2c: tegra: Reorder location of functions in the code
        i2c: tegra: Factor out packet header setup from tegra_i2c_xfer_msg()
        i2c: tegra: Remove "dma" variable
        i2c: tegra: Initialization div-clk rate unconditionally
        i2c: tegra: Remove i2c_dev.clk_divisor_non_hs_mode member

v2: - Cleaned more messages in the "Clean up messages in the code" patch.

    - The error code of reset_control_reset() is checked now.

    - Added these new patches to clean up couple more things:

        i2c: tegra: Check errors for both positive and negative values
        i2c: tegra: Improve coding style of tegra_i2c_wait_for_config_load()
        i2c: tegra: Remove unnecessary whitespaces and newlines
        i2c: tegra: Rename variable in tegra_i2c_issue_bus_clear()
        i2c: tegra: Improve driver module description

Dmitry Osipenko (32):
  i2c: tegra: Make tegra_i2c_flush_fifos() usable in atomic transfer
  i2c: tegra: Add missing pm_runtime_put()
  i2c: tegra: Handle potential error of tegra_i2c_flush_fifos()
  i2c: tegra: Mask interrupt in tegra_i2c_issue_bus_clear()
  i2c: tegra: Initialize div-clk rate unconditionally
  i2c: tegra: Remove i2c_dev.clk_divisor_non_hs_mode member
  i2c: tegra: Runtime PM always available on Tegra
  i2c: tegra: Remove error message used for devm_request_irq() failure
  i2c: tegra: Use reset_control_reset()
  i2c: tegra: Use devm_platform_get_and_ioremap_resource()
  i2c: tegra: Use platform_get_irq()
  i2c: tegra: Use clk-bulk helpers
  i2c: tegra: Move out all device-tree parsing into tegra_i2c_parse_dt()
  i2c: tegra: Clean up probe function
  i2c: tegra: Reorder location of functions in the code
  i2c: tegra: Clean up variable types
  i2c: tegra: Remove outdated barrier()
  i2c: tegra: Remove likely/unlikely from the code
  i2c: tegra: Remove redundant check in tegra_i2c_issue_bus_clear()
  i2c: tegra: Remove "dma" variable from tegra_i2c_xfer_msg()
  i2c: tegra: Rename wait/poll functions
  i2c: tegra: Factor out error recovery from tegra_i2c_xfer_msg()
  i2c: tegra: Factor out packet header setup from tegra_i2c_xfer_msg()
  i2c: tegra: Factor out register polling into separate function
  i2c: tegra: Factor out hardware initialization into separate function
  i2c: tegra: Check errors for both positive and negative values
  i2c: tegra: Improve formatting of variables
  i2c: tegra: Clean up variable names
  i2c: tegra: Clean up printk messages
  i2c: tegra: Clean up and improve comments
  i2c: tegra: Clean up whitespaces, newlines and indentation
  i2c: tegra: Improve driver module description

 drivers/i2c/busses/i2c-tegra.c | 1420 ++++++++++++++++----------------
 1 file changed, 694 insertions(+), 726 deletions(-)

Comments

Wolfram Sang Oct. 5, 2020, 8:52 p.m. UTC | #1
On Wed, Sep 30, 2020 at 01:18:43AM +0300, Dmitry Osipenko wrote:
> Hello!

> 

> This series performs refactoring of the Tegra I2C driver code and hardens

> the atomic-transfer mode.


Applied to for-next, thanks to everyone! Please send incremental patches
from now on. Also, there is this unreviewed series:

http://patchwork.ozlabs.org/project/linux-i2c/list/?series=191802

Is it obsolete by now?
Dmitry Osipenko Oct. 5, 2020, 11:16 p.m. UTC | #2
05.10.2020 23:52, Wolfram Sang пишет:
> On Wed, Sep 30, 2020 at 01:18:43AM +0300, Dmitry Osipenko wrote:

>> Hello!

>>

>> This series performs refactoring of the Tegra I2C driver code and hardens

>> the atomic-transfer mode.

> 

> Applied to for-next, thanks to everyone! Please send incremental patches

> from now on.


Hello, Wolfram! Thank you! This series started with 10 small patches and
then was growing with every new review round because more ideas were
suggested and I needed to rebase/redo majority of the patches, hence it
was a bit difficult to split it up into a smaller parts that could be
applied incrementally. But I'll try to improve this in the future, thanks!

> Also, there is this unreviewed series:

> 

> http://patchwork.ozlabs.org/project/linux-i2c/list/?series=191802

> 

> Is it obsolete by now?

> 


To be honest, I don't know. The author never answered, guess he may
reappear sometime in the future with a v2. Those patches need to be
corrected and rebased.
Wolfram Sang Oct. 6, 2020, 4:48 a.m. UTC | #3
Hi Dmitry,

> Hello, Wolfram! Thank you! This series started with 10 small patches and
> then was growing with every new review round because more ideas were
> suggested and I needed to rebase/redo majority of the patches, hence it
> was a bit difficult to split it up into a smaller parts that could be
> applied incrementally. But I'll try to improve this in the future, thanks!

Ah, you got me wrong. What I meant was: If these patches still need
changes or updates, don't send a new version of all the patches, but
rather send incremental fixes on top of these patches. Sometimes it
happens that you end up with 30+ patches, no worries.

> > http://patchwork.ozlabs.org/project/linux-i2c/list/?series=191802
> > 
> > Is it obsolete by now?
> > 
> 
> To be honest, I don't know. The author never answered, guess he may
> reappear sometime in the future with a v2. Those patches need to be
> corrected and rebased.

Then, I will mark them as "Changes requested". Thanks for the heads up!

Regards,

   Wolfram