lkml.org 
[lkml]   [2021]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v4 00/17] clk: at91: updates for power management and dvfs
    Date
    Hi,

    This series addresses the clock power management for SAMA7G5 and also
    updates the master clock driver and sam9x60-pll driver to accommodate
    the requests at [1] and avoid overclocking of CPU and MCK0 domains while
    changing the frequency via DVFS.

    The power management part is implemented by adding
    save_context()/restore_context() on each clock driver (patch 1/17). Since
    the PM part is necessary only for backup mode (supported on SAMA5D2 and
    SAMA7G5) the pmc.c has been adapted to call the
    save_context()/restore_context() only on switches to/from backup mode
    (patch 2/17).

    Patch 3/17 adds the securam clock on SAMA7G5. This is necessary for
    backup mode of SAMA7G5.

    Patch 4/17 adapt SAMA7G5 MCK1..4 driver to use the defines at
    include/linux/clk/at91_pmc.h introduced in commit ec03f18cc222
    ("clk: at91: add register definition for sama7g5's master clock").

    Patch 5/17 improves a bit readabiblity in some places of master clock
    driver.

    Patch 6/17 enable the suspend/resume for clocks also for SAMA7G5.

    Patches 7-10/17 adds fixes in master clock driver and sam9x60-pll driver.

    Patches 11-12/17 address DVFS by adding notifiers for master clock driver
    and sam9x60-pll driver to avoid overclocking for CPU domain and MCK0
    domain.

    Patch 13/17 removes the master clock prescaler from Linux clock tree
    as it has been discovered a hardware bug on it and it may not lock
    on some scenario although its output clock is stable.

    Patch 14/17 decreases the low limit of MCK0 as it can go even to 32KHz.

    Patch 15/17 uses clk_core_get_rate_recalc() in clk_rate_get().

    Patches 16-17/17 adds minor cleanups on clk.c

    Stephen,

    I added everything in one series and didn't send at 1st the non-DVFS
    patches (as you suggested in [2]) as at the time of proposal patch 4/17
    here depended on commit ec03f18cc222 ("clk: at91: add register definition
    for sama7g5's master clock") which wasn't present on your tree at that
    time.

    Thank you,
    Claudiu Beznea

    [1] https://lore.kernel.org/lkml/20210105104426.4tmgc2l3vyicwedd@vireshk-i7/
    [2] https://lore.kernel.org/lkml/163047507296.42057.10597374695758699868@swboyd.mtv.corp.google.com/

    Changes in v4:
    - removed opp dependencies along with get_cpu_device() in patch 11/17 as
    those functionalities are not available at the initialization time for
    clocks instantiated with CLK_OF_DECLARE

    Changes in v3:
    - minor fixes in patch 1/7 (e.g. use regmap_read() + checks + update +
    regmap_write() sequence instead of regmap_read() + checks +
    regmap_update_bits()
    - patch 4/17 has been updated after commit ec03f18cc222
    ("clk: at91: add register definition for sama7g5's master clock")
    - patch 6-10/17, 14-17/17 are newly introduced
    - notifier for sam9x60 div pll was introduced (patch 11/17) and
    notifier logic for master clock div has been changed (patch 12/17)
    to use safe divider on PRE_RATE_CHANGE events and update clock to highest
    possible rate on POST_RATE_CHANGE events
    - master clock prescaler has been removed from Linux clock tree for
    SAMA7G5

    Changes in v2:
    - addressed code review comments
    - collected tags


    Claudiu Beznea (17):
    clk: at91: re-factor clocks suspend/resume
    clk: at91: pmc: execute suspend/resume only for backup mode
    clk: at91: sama7g5: add securam's peripheral clock
    clk: at91: clk-master: add register definition for sama7g5's master
    clock
    clk: at91: clk-master: improve readability by using local variables
    clk: at91: pmc: add sama7g5 to the list of available pmcs
    clk: at91: sam9x60-pll: use DIV_ROUND_CLOSEST_ULL
    clk: at91: clk-master: check if div or pres is zero
    clk: at91: clk-master: mask mckr against layout->mask
    clk: at91: clk-master: fix prescaler logic
    clk: at91: clk-sam9x60-pll: add notifier for div part of PLL
    clk: at91: clk-master: add notifier for divider
    clk: at91: sama7g5: remove prescaler part of master clock
    clk: at91: sama7g5: set low limit for mck0 at 32KHz
    clk: use clk_core_get_rate_recalc() in clk_rate_get()
    clk: remove extra empty line
    clk: do not initialize ret

    drivers/clk/at91/at91rm9200.c | 2 +-
    drivers/clk/at91/at91sam9260.c | 2 +-
    drivers/clk/at91/at91sam9g45.c | 2 +-
    drivers/clk/at91/at91sam9n12.c | 2 +-
    drivers/clk/at91/at91sam9rl.c | 2 +-
    drivers/clk/at91/at91sam9x5.c | 2 +-
    drivers/clk/at91/clk-generated.c | 46 ++-
    drivers/clk/at91/clk-main.c | 66 ++++
    drivers/clk/at91/clk-master.c | 463 ++++++++++++++++++++++------
    drivers/clk/at91/clk-peripheral.c | 40 ++-
    drivers/clk/at91/clk-pll.c | 39 +++
    drivers/clk/at91/clk-programmable.c | 29 +-
    drivers/clk/at91/clk-sam9x60-pll.c | 174 +++++++++--
    drivers/clk/at91/clk-system.c | 20 ++
    drivers/clk/at91/clk-usb.c | 27 ++
    drivers/clk/at91/clk-utmi.c | 39 +++
    drivers/clk/at91/dt-compat.c | 2 +-
    drivers/clk/at91/pmc.c | 183 +++--------
    drivers/clk/at91/pmc.h | 29 +-
    drivers/clk/at91/sam9x60.c | 6 +-
    drivers/clk/at91/sama5d2.c | 2 +-
    drivers/clk/at91/sama5d3.c | 2 +-
    drivers/clk/at91/sama5d4.c | 2 +-
    drivers/clk/at91/sama7g5.c | 29 +-
    drivers/clk/clk.c | 5 +-
    25 files changed, 899 insertions(+), 316 deletions(-)

    --
    2.25.1

    \
     
     \ /
      Last update: 2021-09-23 15:22    [W:2.851 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site