1. 24 Feb, 2019 2 commits
  2. 23 Feb, 2019 6 commits
    • Hans de Goede's avatar
      i2c: designware: Do not allow i2c_dw_xfer() calls while suspended · 27515415
      Hans de Goede authored
      On most Intel Bay- and Cherry-Trail systems the PMIC is connected over I2C
      and the PMIC is accessed through various means by the _PS0 and _PS3 ACPI
      methods (power on / off methods) of various devices.
      
      This leads to suspend/resume ordering problems where a device may be
      resumed and get its _PS0 method executed before the I2C controller is
      resumed. On Cherry Trail this leads to errors like these:
      
           i2c_designware 808622C1:06: controller timed out
           ACPI Error: AE_ERROR, Returned by Handler for [UserDefinedRegion]
           ACPI Error: Method parse/execution failed \_SB.P18W._ON, AE_ERROR
           video LNXVIDEO:00: Failed to change power state to D0
      
      But on Bay Trail this caused I2C reads to seem to succeed, but they end
      up returning wrong data, which ends up getting written back by the typical
      read-modify-write cycle done to turn on various power-resources.
      
      Debugging the problems caused by this silent data corruption is quite
      nasty. This commit adds a check which disallows i2c_dw_xfer() calls to
      happen until the controller's resume method has completed.
      
      Which turns the silent data corruption into getting these errors in
      dmesg instead:
      
          i2c_designware 80860F41:04: Error i2c_dw_xfer call while suspended
          ACPI Error: AE_ERROR, Returned by Handler for [UserDefinedRegion]
          ACPI Error: Method parse/execution failed \_SB.PCI0.GFX0._PS0, AE_ERROR
      
      Which is much better.
      
      Note the above errors are an example of issues which this patch will
      help to debug, the actual fix requires fixing the suspend order and
      this has been fixed by a different commit.
      
      Note the setting / clearing of the suspended flag in the suspend / resume
      methods is NOT protected by i2c_lock_bus(). This is intentional as these
      methods get called from i2c_dw_xfer() (through pm_runtime_get/put) a nd
      i2c_dw_xfer() is called with the i2c_bus_lock held, so otherwise we would
      deadlock. This means that there is a theoretical race between a non runtime
      suspend and the suspended check in i2c_dw_xfer(), this is not a problem
      since normally we should not hit the race and this check is primarily a
      debugging tool so hitting the check if there are suspend/resume ordering
      problems does not need to be 100% reliable.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      27515415
    • Jonathan Hunter's avatar
      i2c: tegra: Only display error messages if DMA setup fails · 89328b1b
      Jonathan Hunter authored
      Commit 86c92b99 ("i2c: tegra: Add DMA support") added DMA support
      to the Tegra I2C driver for Tegra devices that support the APB DMA
      controller. One side-effect of this change is that even for Tegra
      devices that do not have an APB DMA controller and hence, cannot
      support DMA tranfers for I2C transactions, the following error messages
      are still displayed ...
      
       ERR KERN tegra-i2c 31c0000.i2c: cannot use DMA: -19
       ERR KERN tegra-i2c 31c0000.i2c: falling back to PIO
      
      There is no point displaying the above messages for devices that do not
      have an APB DMA controller and so fix this by returning from the
      tegra_i2c_init_dma() function if 'has_apb_dma' is not true.
      
      Furthermore, if CONFIG_TEGRA20_APB_DMA is not set, then rather than
      printing an error message, print an debug message as for whatever reason
      this could be intentional.
      
      Fixes: 86c92b99 ("i2c: tegra: Add DMA support")
      Signed-off-by: default avatarJonathan Hunter <jonathanh@nvidia.com>
      Reviewed-by: default avatarDmitry Osipenko <digetx@gmail.com>
      Acked-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      89328b1b
    • Wolfram Sang's avatar
      i2c: gpio: fault-injector: add 'inject_panic' injector · bb6bdd51
      Wolfram Sang authored
      Add a fault injector simulating a Kernel panic happening after starting
      a transfer. Read the docs for its usage.
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      bb6bdd51
    • Wolfram Sang's avatar
      i2c: gpio: fault-injector: add 'lose_arbitration' injector · 63e57b6f
      Wolfram Sang authored
      Add a fault injector simulating 'arbitration lost' from multi-master
      setups. Read the docs for its usage.
      
      A helper function for future fault injectors using SCL interrupts is
      created to achieve this.
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      63e57b6f
    • Sowjanya Komatineni's avatar
      i2c: tegra: remove multi-master support · 6b9932bc
      Sowjanya Komatineni authored
      Multi-master support is defeatured on Tegra210 and Tegra186 due to
      known bugs.
      
      This patch removes multi-master support for Tegra210 and Tegra186
      I2C HW feature.
      Acked-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      6b9932bc
    • Sowjanya Komatineni's avatar
      i2c: tegra: remove master fifo support on tegra186 · 9ffc125c
      Sowjanya Komatineni authored
      Tegra186 does not have master FIFO  control register and instead
      uses FIFO control register like prior Tegra chipset.
      
      This patch fixes this and prevents crashing during boot when
      accessing FIFO control registers.
      Acked-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      9ffc125c
  3. 15 Feb, 2019 3 commits
  4. 14 Feb, 2019 21 commits
  5. 10 Feb, 2019 7 commits
  6. 09 Feb, 2019 1 commit