• Mark Brown's avatar
    Merge series "Fix regulators coupling for Exynos5800" from Marek Szyprowski... · c1f615e4
    Mark Brown authored
    Merge series "Fix regulators coupling for Exynos5800" from Marek Szyprowski <m.szyprowski@samsung.com>:
    
    Hi!
    
    This patchset is another attempt to fix the regulator coupling on
    Exynos5800/5422 SoCs. Here are links to the previous attempts:
    
    https://lore.kernel.org/linux-samsung-soc/20191008101709.qVNy8eijBi0LynOteWFMnTg4GUwKG599n6OyYoX1Abs@z/
    https://lore.kernel.org/lkml/20191017102758.8104-1-m.szyprowski@samsung.com/
    https://lore.kernel.org/linux-pm/cover.1589528491.git.viresh.kumar@linaro.org/
    https://lore.kernel.org/linux-pm/20200528131130.17984-1-m.szyprowski@samsung.com/
    
    The problem is with "vdd_int" regulator coupled with "vdd_arm" on Odroid
    XU3/XU4 boards family. "vdd_arm" is handled by CPUfreq. "vdd_int" is
    handled by devfreq. CPUfreq initialized quite early during boot and it
    starts changing OPPs and "vdd_arm" value. Sometimes CPU activity during
    boot goes down and some low-frequency OPPs are selected, what in turn
    causes lowering "vdd_arm". This happens before devfreq applies its
    requirements on "vdd_int". Regulator balancing code reduces "vdd_arm"
    voltage value, what in turn causes lowering "vdd_int" value to the lowest
    possible value. This is much below the operation point of the wcore bus,
    which still runs at the highest frequency.
    
    The issue was hard to notice because in the most cases the board managed
    to boot properly, even when the regulator was set to lowest value allowed
    by the regulator constraints. However, it caused some random issues,
    which can be observed as "Unhandled prefetch abort" or low USB stability.
    
    Adding more and more special cases to the generic code has been rejected,
    so the only way to ensure the desired behavior on Exynos5800-based SoCs
    is to make a custom regulator coupler driver.
    
    Best regards,
    Marek Szyprowski
    
    Patch summary:
    
    Marek Szyprowski (2):
      regulator: extract voltage balancing code to separate function
      soc: samsung: Add simple voltage coupler for Exynos5800
    
     arch/arm/mach-exynos/Kconfig                  |  1 +
     drivers/regulator/core.c                      | 49 ++++++++-------
     drivers/soc/samsung/Kconfig                   |  3 +
     drivers/soc/samsung/Makefile                  |  1 +
     .../soc/samsung/exynos-regulator-coupler.c    | 59 +++++++++++++++++++
     include/linux/regulator/coupler.h             |  8 +++
     6 files changed, 101 insertions(+), 20 deletions(-)
     create mode 100644 drivers/soc/samsung/exynos-regulator-coupler.c
    
    --
    2.17.1
    
    base-commit: 8f3d9f35
    c1f615e4
core.c 148 KB