Merge branches 'clk-range', 'clk-uniphier', 'clk-apple' and 'clk-qcom' into clk-next
authorStephen Boyd <sboyd@kernel.org>
Tue, 29 Mar 2022 17:19:36 +0000 (10:19 -0700)
committerStephen Boyd <sboyd@kernel.org>
Tue, 29 Mar 2022 17:19:36 +0000 (10:19 -0700)
 - Make clk_set_rate_range() re-evaluate the limits each time
 - Introduce various clk_set_rate_range() tests
 - Add clk_drop_range() to drop a previously set range
 - Support for NCO blocks on Apple SoCs

* clk-range:
  clk: Drop the rate range on clk_put()
  clk: test: Test clk_set_rate_range on orphan mux
  clk: Initialize orphan req_rate
  clk: bcm: rpi: Run some clocks at the minimum rate allowed
  clk: bcm: rpi: Set a default minimum rate
  clk: bcm: rpi: Add variant structure
  clk: Add clk_drop_range
  clk: Always set the rate on clk_set_range_rate
  clk: Use clamp instead of open-coding our own
  clk: Always clamp the rounded rate
  clk: Enforce that disjoints limits are invalid
  clk: Introduce Kunit Tests for the framework
  clk: Fix clk_hw_get_clk() when dev is NULL

* clk-uniphier:
  clk: uniphier: Fix fixed-rate initialization

* clk-apple:
  clk: clk-apple-nco: Allow and fix module building
  MAINTAINERS: Add clk-apple-nco under ARM/APPLE MACHINE
  clk: clk-apple-nco: Add driver for Apple NCO
  dt-bindings: clock: Add Apple NCO

* clk-qcom: (61 commits)
  clk: qcom: gcc-msm8994: Fix gpll4 width
  dt-bindings: clock: fix dt_binding_check error for qcom,gcc-other.yaml
  clk: qcom: Add display clock controller driver for SM6125
  dt-bindings: clock: add QCOM SM6125 display clock bindings
  clk: qcom: Fix sorting of SDX_GCC_65 in Makefile and Kconfig
  clk: qcom: gcc: Add emac GDSC support for SM8150
  clk: qcom: gcc: sm8150: Fix some identation issues
  clk: qcom: gcc: Add UFS_CARD and UFS_PHY GDSCs for SM8150
  clk: qcom: gcc: Add PCIe0 and PCIe1 GDSC for SM8150
  clk: qcom: clk-rcg2: Update the frac table for pixel clock
  clk: qcom: clk-rcg2: Update logic to calculate D value for RCG
  clk: qcom: smd: Add missing MSM8998 RPM clocks
  clk: qcom: smd: Add missing RPM clocks for msm8992/4
  dt-bindings: clock: qcom: rpmcc: Add RPM Modem SubSystem (MSS) clocks
  clk: qcom: gcc-ipq806x: add CryptoEngine resets
  dt-bindings: reset: add ipq8064 ce5 resets
  clk: qcom: gcc-ipq806x: add CryptoEngine clocks
  dt-bindings: clock: add ipq8064 ce5 clk define
  clk: qcom: gcc-ipq806x: add additional freq for sdc table
  clk: qcom: clk-rcg: add clk_rcg_floor_ops ops
  ...

1  2  3  4  5 
MAINTAINERS
drivers/clk/Kconfig
drivers/clk/Makefile
drivers/clk/clk.c

diff --combined MAINTAINERS
@@@@@@ -190,9 -190,8 -190,8 -190,8 -190,8 +190,9 @@@@@@ M:      Johannes Berg <johannes@sipsolutions
     L: linux-wireless@vger.kernel.org
     S: Maintained
     W: https://wireless.wiki.kernel.org/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
 ++++Q: https://patchwork.kernel.org/project/linux-wireless/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
     F: Documentation/driver-api/80211/cfg80211.rst
     F: Documentation/networking/regulatory.rst
     F: include/linux/ieee80211.h
@@@@@@ -1620,7 -1619,6 -1619,6 -1619,6 -1619,6 +1620,7 @@@@@@ M:        Olof Johansson <olof@lixom.net
     M: soc@kernel.org
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     S: Maintained
 ++++C: irc://irc.libera.chat/armlinux
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
     F: arch/arm/boot/dts/Makefile
     F: arch/arm64/boot/dts/Makefile
     ARM SUB-ARCHITECTURES
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     S: Maintained
 ++++C: irc://irc.libera.chat/armlinux
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
     F: arch/arm/mach-*/
     F: arch/arm/plat-*/
@@@@@@ -1768,6 -1765,6 -1765,6 -1765,7 -1765,6 +1768,7 @@@@@@ C:        irc://irc.oftc.net/asahi-de
     T: git https://github.com/AsahiLinux/linux.git
     F: Documentation/devicetree/bindings/arm/apple.yaml
     F: Documentation/devicetree/bindings/arm/apple/*
+++ +F: Documentation/devicetree/bindings/clock/apple,nco.yaml
     F: Documentation/devicetree/bindings/i2c/apple,i2c.yaml
     F: Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
     F: Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
@@@@@@ -1776,13 -1773,12 -1773,12 -1774,13 -1773,12 +1777,14 @@@@@@ F:  Documentation/devicetree/bindings/pi
     F: Documentation/devicetree/bindings/power/apple*
     F: Documentation/devicetree/bindings/watchdog/apple,wdt.yaml
     F: arch/arm64/boot/dts/apple/
+++ +F: drivers/clk/clk-apple-nco.c
     F: drivers/i2c/busses/i2c-pasemi-core.c
     F: drivers/i2c/busses/i2c-pasemi-platform.c
     F: drivers/irqchip/irq-apple-aic.c
     F: drivers/mailbox/apple-mailbox.c
     F: drivers/pinctrl/pinctrl-apple-gpio.c
     F: drivers/soc/apple/*
 ++++F: drivers/watchdog/apple_wdt.c
     F: include/dt-bindings/interrupt-controller/apple-aic.h
     F: include/dt-bindings/pinctrl/apple.h
     F: include/linux/apple-mailbox.h
@@@@@@ -2573,13 -2569,10 -2569,10 -2571,10 -2569,10 +2575,13 @@@@@@ N:  rockchi
     
     ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
     M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 ++++R: Alim Akhtar <alim.akhtar@samsung.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     L: linux-samsung-soc@vger.kernel.org
     S: Maintained
 ++++C: irc://irc.libera.chat/linux-exynos
     Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
     F: Documentation/arm/samsung/
     F: Documentation/devicetree/bindings/arm/samsung/
     F: Documentation/devicetree/bindings/power/pd-samsung.yaml
@@@@@@ -4163,8 -4156,9 -4156,9 -4158,9 -4156,9 +4165,8 @@@@@@ N:        csk
     K: csky
     
     CA8210 IEEE-802.15.4 RADIO DRIVER
 ----M: Harry Morris <h.morris@cascoda.com>
     L: linux-wpan@vger.kernel.org
 ----S: Maintained
 ++++S: Orphan
     W: https://github.com/Cascoda/ca8210-linux.git
     F: Documentation/devicetree/bindings/net/ieee802154/ca8210.txt
     F: drivers/net/ieee802154/ca8210.c
@@@@@@ -5778,7 -5772,7 -5772,7 -5774,7 -5772,7 +5780,7 @@@@@@ F:        tools/testing/selftests/dma
     
     DMA-BUF HEAPS FRAMEWORK
     M: Sumit Semwal <sumit.semwal@linaro.org>
 ----R: Benjamin Gaignard <benjamin.gaignard@linaro.org>
 ++++R: Benjamin Gaignard <benjamin.gaignard@collabora.com>
     R: Liam Mark <lmark@codeaurora.org>
     R: Laura Abbott <labbott@redhat.com>
     R: Brian Starkey <Brian.Starkey@arm.com>
@@@@@@ -6508,7 -6502,7 -6502,7 -6504,7 -6502,7 +6510,7 @@@@@@ F:        Documentation/devicetree/bindings/di
     F: drivers/gpu/drm/rockchip/
     
     DRM DRIVERS FOR STI
 ----M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
 ++++M: Alain Volmat <alain.volmat@foss.st.com>
     L: dri-devel@lists.freedesktop.org
     S: Maintained
     T: git git://anongit.freedesktop.org/drm/drm-misc
@@@@@@ -6517,8 -6511,8 -6511,8 -6513,8 -6511,8 +6519,8 @@@@@@ F:        drivers/gpu/drm/st
     
     DRM DRIVERS FOR STM
     M: Yannick Fertre <yannick.fertre@foss.st.com>
 ++++M: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
     M: Philippe Cornu <philippe.cornu@foss.st.com>
 ----M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
     L: dri-devel@lists.freedesktop.org
     S: Maintained
     T: git git://anongit.freedesktop.org/drm/drm-misc
@@@@@@ -7214,10 -7208,8 -7208,8 -7210,8 -7208,8 +7216,10 @@@@@@ F:      drivers/net/mdio/of_mdio.
     F: drivers/net/pcs/
     F: drivers/net/phy/
     F: include/dt-bindings/net/qca-ar803x.h
 ++++F: include/linux/linkmode.h
     F: include/linux/*mdio*.h
     F: include/linux/mdio/*.h
 ++++F: include/linux/mii.h
     F: include/linux/of_net.h
     F: include/linux/phy.h
     F: include/linux/phy_fixed.h
@@@@@@ -7581,12 -7573,6 -7573,6 -7575,6 -7573,6 +7583,12 @@@@@@ S:      Maintaine
     W: http://floatingpoint.sourceforge.net/emulator/index.html
     F: arch/x86/math-emu/
     
 ++++FRAMEBUFFER CORE
 ++++M: Daniel Vetter <daniel@ffwll.ch>
 ++++F: drivers/video/fbdev/core/
 ++++S: Odd Fixes
 ++++T: git git://anongit.freedesktop.org/drm/drm-misc
 ++++
     FRAMEBUFFER LAYER
     M: Helge Deller <deller@gmx.de>
     L: linux-fbdev@vger.kernel.org
@@@@@@ -10891,12 -10877,6 -10877,6 -10879,6 -10877,6 +10893,12 @@@@@@ T:        git git://git.kernel.org/pub/scm/lin
     F: drivers/ata/pata_arasan_cf.c
     F: include/linux/pata_arasan_cf_data.h
     
 ++++LIBATA PATA DRIVERS
 ++++R: Sergey Shtylyov <s.shtylyov@omp.ru>
 ++++L: linux-ide@vger.kernel.org
 ++++F: drivers/ata/ata_*.c
 ++++F: drivers/ata/pata_*.c
 ++++
     LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
     M: Linus Walleij <linus.walleij@linaro.org>
     L: linux-ide@vger.kernel.org
@@@@@@ -11386,9 -11366,8 -11366,8 -11368,8 -11366,8 +11388,9 @@@@@@ M:  Johannes Berg <johannes@sipsolutions
     L: linux-wireless@vger.kernel.org
     S: Maintained
     W: https://wireless.wiki.kernel.org/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
 ++++Q: https://patchwork.kernel.org/project/linux-wireless/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
     F: Documentation/networking/mac80211-injection.rst
     F: Documentation/networking/mac80211_hwsim/mac80211_hwsim.rst
     F: drivers/net/wireless/mac80211_hwsim.[ch]
@@@@@@ -12417,7 -12396,7 -12396,7 -12398,7 -12396,7 +12419,7 @@@@@@ F:  include/uapi/linux/membarrier.
     F: kernel/sched/membarrier.c
     
     MEMBLOCK
 ----M: Mike Rapoport <rppt@linux.ibm.com>
 ++++M: Mike Rapoport <rppt@kernel.org>
     L: linux-mm@kvack.org
     S: Maintained
     F: Documentation/core-api/boot-time-mm.rst
@@@@@@ -13315,8 -13294,8 -13294,8 -13296,8 -13294,8 +13317,8 @@@@@@ W:  http://www.iptables.org
     W: http://www.nftables.org/
     Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/
     C: irc://irc.libera.chat/netfilter
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git
     F: include/linux/netfilter*
     F: include/linux/netfilter/
     F: include/net/netfilter/
@@@@@@ -13395,10 -13374,9 -13374,9 -13376,9 -13374,9 +13397,10 @@@@@@ NETWORKING DRIVERS (WIRELESS
     M: Kalle Valo <kvalo@kernel.org>
     L: linux-wireless@vger.kernel.org
     S: Maintained
 ----Q: http://patchwork.kernel.org/project/linux-wireless/list/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git
 ++++W: https://wireless.wiki.kernel.org/
 ++++Q: https://patchwork.kernel.org/project/linux-wireless/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
     F: Documentation/devicetree/bindings/net/wireless/
     F: drivers/net/wireless/
     
@@@@@@ -13471,11 -13449,7 -13449,7 -13451,7 -13449,7 +13473,11 @@@@@@ L:        netdev@vger.kernel.or
     S: Maintained
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
     F: arch/x86/net/*
 ++++F: include/linux/ip.h
 ++++F: include/linux/ipv6*
 ++++F: include/net/fib*
     F: include/net/ip*
 ++++F: include/net/route.h
     F: net/ipv4/
     F: net/ipv6/
     
@@@@@@ -13536,6 -13510,10 -13510,10 -13512,10 -13510,10 +13538,6 @@@@@@ F:      include/net/tls.
     F: include/uapi/linux/tls.h
     F: net/tls/*
     
 ----NETWORKING [WIRELESS]
 ----L: linux-wireless@vger.kernel.org
 ----Q: http://patchwork.kernel.org/project/linux-wireless/list/
 ----
     NETXEN (1/10) GbE SUPPORT
     M: Manish Chopra <manishc@marvell.com>
     M: Rahul Verma <rahulv@marvell.com>
@@@@@@ -13583,7 -13561,7 -13561,7 -13563,7 -13561,7 +13585,7 @@@@@@ F:  tools/testing/selftests/nci
     
     NFS, SUNRPC, AND LOCKD CLIENTS
     M: Trond Myklebust <trond.myklebust@hammerspace.com>
 ----M: Anna Schumaker <anna.schumaker@netapp.com>
 ++++M: Anna Schumaker <anna@kernel.org>
     L: linux-nfs@vger.kernel.org
     S: Maintained
     W: http://client.linux-nfs.org
@@@@@@ -13840,10 -13818,7 -13818,7 -13820,7 -13818,7 +13842,10 @@@@@@ M:        Abel Vesa <abel.vesa@nxp.com
     L: linux-clk@vger.kernel.org
     L: linux-imx@nxp.com
     S: Maintained
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux.git clk/imx
 ++++F: Documentation/devicetree/bindings/clock/imx*
     F: drivers/clk/imx/
 ++++F: include/dt-bindings/clock/imx*
     
     NXP i.MX 8MQ DCSS DRIVER
     M: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
@@@@@@ -14404,7 -14379,6 -14379,6 -14381,6 -14379,6 +14406,7 @@@@@@ M:  Rob Herring <robh+dt@kernel.org
     M: Frank Rowand <frowand.list@gmail.com>
     L: devicetree@vger.kernel.org
     S: Maintained
 ++++C: irc://irc.libera.chat/devicetree
     W: http://www.devicetree.org/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
     F: Documentation/ABI/testing/sysfs-firmware-ofw
@@@@@@ -14416,7 -14390,6 -14390,6 -14392,6 -14390,6 +14418,7 @@@@@@ OPEN FIRMWARE AND FLATTENED DEVICE TRE
     M: Rob Herring <robh+dt@kernel.org>
     L: devicetree@vger.kernel.org
     S: Maintained
 ++++C: irc://irc.libera.chat/devicetree
     Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
     F: Documentation/devicetree/
@@@@@@ -15307,11 -15280,9 -15280,9 -15282,9 -15280,9 +15309,11 @@@@@@ PIN CONTROLLER - SAMSUN
     M: Tomasz Figa <tomasz.figa@gmail.com>
     M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
     M: Sylwester Nawrocki <s.nawrocki@samsung.com>
 ++++R: Alim Akhtar <alim.akhtar@samsung.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     L: linux-samsung-soc@vger.kernel.org
     S: Maintained
 ++++C: irc://irc.libera.chat/linux-exynos
     Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
     F: Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt
@@@@@@ -16493,14 -16464,6 -16464,6 -16466,6 -16464,6 +16495,14 @@@@@@ F:        Documentation/devicetree/bindings/i2
     F: drivers/i2c/busses/i2c-rcar.c
     F: drivers/i2c/busses/i2c-sh_mobile.c
     
 ++++RENESAS R-CAR SATA DRIVER
 ++++R: Sergey Shtylyov <s.shtylyov@omp.ru>
 ++++S: Supported
 ++++L: linux-ide@vger.kernel.org
 ++++L: linux-renesas-soc@vger.kernel.org
 ++++F: Documentation/devicetree/bindings/ata/renesas,rcar-sata.yaml
 ++++F: drivers/ata/sata_rcar.c
 ++++
     RENESAS R-CAR THERMAL DRIVERS
     M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
     L: linux-renesas-soc@vger.kernel.org
@@@@@@ -16569,9 -16532,8 -16532,8 -16534,8 -16532,8 +16571,9 @@@@@@ M:  Johannes Berg <johannes@sipsolutions
     L: linux-wireless@vger.kernel.org
     S: Maintained
     W: https://wireless.wiki.kernel.org/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
 ++++Q: https://patchwork.kernel.org/project/linux-wireless/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
     F: Documentation/ABI/stable/sysfs-class-rfkill
     F: Documentation/driver-api/rfkill.rst
     F: include/linux/rfkill.h
@@@@@@ -16836,8 -16798,8 -16798,8 -16800,8 -16798,8 +16838,8 @@@@@@ F:  drivers/video/fbdev/savage
     S390
     M: Heiko Carstens <hca@linux.ibm.com>
     M: Vasily Gorbik <gor@linux.ibm.com>
 ----M: Christian Borntraeger <borntraeger@linux.ibm.com>
 ----R: Alexander Gordeev <agordeev@linux.ibm.com>
 ++++M: Alexander Gordeev <agordeev@linux.ibm.com>
 ++++R: Christian Borntraeger <borntraeger@linux.ibm.com>
     R: Sven Schnelle <svens@linux.ibm.com>
     L: linux-s390@vger.kernel.org
     S: Supported
@@@@@@ -17108,7 -17070,6 -17070,6 -17072,6 -17070,6 +17110,7 @@@@@@ SAMSUNG SOC CLOCK DRIVER
     M: Sylwester Nawrocki <s.nawrocki@samsung.com>
     M: Tomasz Figa <tomasz.figa@gmail.com>
     M: Chanwoo Choi <cw00.choi@samsung.com>
 ++++R: Alim Akhtar <alim.akhtar@samsung.com>
     L: linux-samsung-soc@vger.kernel.org
     S: Supported
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
@@@@@@ -17745,21 -17706,6 -17706,6 -17708,6 -17706,6 +17747,21 @@@@@@ S:        Maintaine
     W: http://www.winischhofer.at/linuxsisusbvga.shtml
     F: drivers/usb/misc/sisusbvga/
     
 ++++SL28 CPLD MFD DRIVER
 ++++M: Michael Walle <michael@walle.cc>
 ++++S: Maintained
 ++++F: Documentation/devicetree/bindings/gpio/kontron,sl28cpld-gpio.yaml
 ++++F: Documentation/devicetree/bindings/hwmon/kontron,sl28cpld-hwmon.yaml
 ++++F: Documentation/devicetree/bindings/interrupt-controller/kontron,sl28cpld-intc.yaml
 ++++F: Documentation/devicetree/bindings/mfd/kontron,sl28cpld.yaml
 ++++F: Documentation/devicetree/bindings/pwm/kontron,sl28cpld-pwm.yaml
 ++++F: Documentation/devicetree/bindings/watchdog/kontron,sl28cpld-wdt.yaml
 ++++F: drivers/gpio/gpio-sl28cpld.c
 ++++F: drivers/hwmon/sl28cpld-hwmon.c
 ++++F: drivers/irqchip/irq-sl28cpld.c
 ++++F: drivers/pwm/pwm-sl28cpld.c
 ++++F: drivers/watchdog/sl28cpld_wdt.c
 ++++
     SLAB ALLOCATOR
     M: Christoph Lameter <cl@linux.com>
     M: Pekka Enberg <penberg@kernel.org>
@@@@@@ -18430,12 -18376,12 -18376,12 -18378,12 -18376,12 +18432,12 @@@@@@ M:    Ion Badulescu <ionut@badula.org
     S: Odd Fixes
     F: drivers/net/ethernet/adaptec/starfire*
     
 ----STARFIVE JH7100 CLOCK DRIVER
 ++++STARFIVE JH7100 CLOCK DRIVERS
     M: Emil Renner Berthing <kernel@esmil.dk>
     S: Maintained
 ----F: Documentation/devicetree/bindings/clock/starfive,jh7100-clkgen.yaml
 ----F: drivers/clk/starfive/clk-starfive-jh7100.c
 ----F: include/dt-bindings/clock/starfive-jh7100.h
 ++++F: Documentation/devicetree/bindings/clock/starfive,jh7100-*.yaml
 ++++F: drivers/clk/starfive/clk-starfive-jh7100*
 ++++F: include/dt-bindings/clock/starfive-jh7100*.h
     
     STARFIVE JH7100 PINCTRL DRIVER
     M: Emil Renner Berthing <kernel@esmil.dk>
@@@@@@ -18476,7 -18422,7 -18422,7 -18424,7 -18422,7 +18478,7 @@@@@@ F:  Documentation/devicetree/bindings/so
     F: sound/soc/sti/
     
     STI CEC DRIVER
 ----M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
 ++++M: Alain Volmat <alain.volmat@foss.st.com>
     S: Maintained
     F: Documentation/devicetree/bindings/media/stih-cec.txt
     F: drivers/media/cec/platform/sti/
@@@@@@ -19630,14 -19576,6 -19576,6 -19578,6 -19576,6 +19632,14 @@@@@@ F:        Documentation/trace/timerlat-tracer.
     F: Documentation/trace/hwlat_detector.rst
     F: arch/*/kernel/trace.c
     
 ++++Real-time Linux Analysis (RTLA) tools
 ++++M: Daniel Bristot de Oliveira <bristot@kernel.org>
 ++++M: Steven Rostedt <rostedt@goodmis.org>
 ++++L: linux-trace-devel@vger.kernel.org
 ++++S: Maintained
 ++++F: Documentation/tools/rtla/
 ++++F: tools/tracing/rtla/
 ++++
     TRADITIONAL CHINESE DOCUMENTATION
     M: Hu Haowen <src.res@email.cn>
     L: linux-doc-tw-discuss@lists.sourceforge.net
diff --combined drivers/clk/Kconfig
@@@@@@ -59,6 -59,6 -59,6 -59,15 -59,6 +59,15 @@@@@@ config LMK0483
          Say yes here to build support for Texas Instruments' LMK04832 Ultra
          Low-Noise JESD204B Compliant Clock Jitter Cleaner With Dual Loop PLLs
     
+++ +config COMMON_CLK_APPLE_NCO
+++ +   tristate "Clock driver for Apple SoC NCOs"
+++ +   depends on ARCH_APPLE || COMPILE_TEST
+++ +   default ARCH_APPLE
+++ +   help
+++ +     This driver supports NCO (Numerically Controlled Oscillator) blocks
+++ +     found on Apple SoCs such as t8103 (M1). The blocks are typically
+++ +     generators of audio clocks.
+++ +
     config COMMON_CLK_MAX77686
        tristate "Clock driver for Maxim 77620/77686/77802 MFD"
        depends on MFD_MAX77686 || MFD_MAX77620 || COMPILE_TEST
@@@@@@ -197,7 -197,6 -197,6 -206,6 -197,6 +206,7 @@@@@@ config COMMON_CLK_CDCE92
     config COMMON_CLK_CS2000_CP
        tristate "Clock driver for CS2000 Fractional-N Clock Synthesizer & Clock Multiplier"
        depends on I2C
 ++++   select REGMAP_I2C
        help
          If you say yes here you get support for the CS2000 clock multiplier.
     
@@@@@@ -232,7 -231,6 -231,6 -240,6 -231,6 +241,7 @@@@@@ config COMMON_CLK_GEMIN
     
     config COMMON_CLK_LAN966X
        bool "Generic Clock Controller driver for LAN966X SoC"
 ++++   depends on SOC_LAN966 || COMPILE_TEST
        help
          This driver provides support for Generic Clock Controller(GCK) on
          LAN966X SoC. GCK generates and supplies clock to various peripherals
@@@@@@ -332,6 -330,9 -330,9 -339,9 -330,9 +341,6 @@@@@@ config COMMON_CLK_PX
        help
          Support for the Marvell PXA SoC.
     
 ----config COMMON_CLK_PIC32
 ----   def_bool COMMON_CLK && MACH_PIC32
 ----
     config COMMON_CLK_OXNAS
        bool "Clock driver for the OXNAS SoC Family"
        depends on ARCH_OXNAS || COMPILE_TEST
        help
          Support for the OXNAS SoC Family clocks.
     
 ++++config COMMON_CLK_RS9_PCIE
 ++++   tristate "Clock driver for Renesas 9-series PCIe clock generators"
 ++++   depends on I2C
 ++++   depends on OF
 ++++   select REGMAP_I2C
 ++++   help
 ++++     This driver supports the Renesas 9-series PCIe clock generator
 ++++     models 9FGV/9DBV/9DMV/9FGL/9DML/9QXL/9SQ.
 ++++
     config COMMON_CLK_VC5
        tristate "Clock driver for IDT VersaClock 5,6 devices"
        depends on I2C
@@@@@@ -415,7 -407,6 -407,6 -416,6 -407,6 +424,7 @@@@@@ source "drivers/clk/keystone/Kconfig
     source "drivers/clk/mediatek/Kconfig"
     source "drivers/clk/meson/Kconfig"
     source "drivers/clk/mstar/Kconfig"
 ++++source "drivers/clk/microchip/Kconfig"
     source "drivers/clk/mvebu/Kconfig"
     source "drivers/clk/pistachio/Kconfig"
     source "drivers/clk/qcom/Kconfig"
@@@@@@ -437,12 -428,19 -428,4 -437,4 -428,4 +446,19 @@@@@@ source "drivers/clk/x86/Kconfig
     source "drivers/clk/xilinx/Kconfig"
     source "drivers/clk/zynqmp/Kconfig"
     
  +++# Kunit test cases
+ +++config CLK_KUNIT_TEST
+ +++   tristate "Basic Clock Framework Kunit Tests" if !KUNIT_ALL_TESTS
+ +++   depends on KUNIT
+ +++   default KUNIT_ALL_TESTS
+ +++   help
+ +++     Kunit tests for the common clock framework.
+ +++
  +++config CLK_GATE_KUNIT_TEST
  +++   tristate "Basic gate type Kunit test" if !KUNIT_ALL_TESTS
  +++   depends on KUNIT
  +++   default KUNIT_ALL_TESTS
  +++   help
  +++     Kunit test for the basic clk gate type.
  +++
     endif
diff --combined drivers/clk/Makefile
     # common clock types
     obj-$(CONFIG_HAVE_CLK)             += clk-devres.o clk-bulk.o clkdev.o
     obj-$(CONFIG_COMMON_CLK)   += clk.o
+ +++obj-$(CONFIG_CLK_KUNIT_TEST)       += clk_test.o
     obj-$(CONFIG_COMMON_CLK)   += clk-divider.o
     obj-$(CONFIG_COMMON_CLK)   += clk-fixed-factor.o
     obj-$(CONFIG_COMMON_CLK)   += clk-fixed-rate.o
     obj-$(CONFIG_COMMON_CLK)   += clk-gate.o
  +++obj-$(CONFIG_CLK_GATE_KUNIT_TEST) += clk-gate_test.o
     obj-$(CONFIG_COMMON_CLK)   += clk-multiplier.o
     obj-$(CONFIG_COMMON_CLK)   += clk-mux.o
     obj-$(CONFIG_COMMON_CLK)   += clk-composite.o
@@@@@@ -18,6 -19,6 -17,6 -17,7 -17,6 +19,7 @@@@@@ endi
     
     # hardware specific clock types
     # please keep this section sorted lexicographically by file path name
+++ +obj-$(CONFIG_COMMON_CLK_APPLE_NCO)         += clk-apple-nco.o
     obj-$(CONFIG_MACH_ASM9260)         += clk-asm9260.o
     obj-$(CONFIG_COMMON_CLK_AXI_CLKGEN)        += clk-axi-clkgen.o
     obj-$(CONFIG_ARCH_AXXIA)           += clk-axm5516.o
@@@@@@ -68,7 -69,6 -67,6 -68,6 -67,6 +70,7 @@@@@@ obj-$(CONFIG_COMMON_CLK_STM32MP157)   += 
     obj-$(CONFIG_COMMON_CLK_TPS68470)      += clk-tps68470.o
     obj-$(CONFIG_CLK_TWL6040)          += clk-twl6040.o
     obj-$(CONFIG_ARCH_VT8500)          += clk-vt8500.o
 ++++obj-$(CONFIG_COMMON_CLK_RS9_PCIE)  += clk-renesas-pcie.o
     obj-$(CONFIG_COMMON_CLK_VC5)               += clk-versaclock5.o
     obj-$(CONFIG_COMMON_CLK_WM831X)            += clk-wm831x.o
     obj-$(CONFIG_COMMON_CLK_XGENE)             += clk-xgene.o
@@@@@@ -93,7 -93,7 -91,7 -92,7 -91,7 +95,7 @@@@@@ obj-$(CONFIG_ARCH_KEYSTONE)           += keyston
     obj-$(CONFIG_MACH_LOONGSON32)              += loongson1/
     obj-y                                      += mediatek/
     obj-$(CONFIG_ARCH_MESON)           += meson/
 ----obj-$(CONFIG_MACH_PIC32)           += microchip/
 ++++obj-y                                      += microchip/
     ifeq ($(CONFIG_COMMON_CLK), y)
     obj-$(CONFIG_ARCH_MMP)                     += mmp/
     endif
diff --combined drivers/clk/clk.c
@@@@@@ -37,7 -37,7 -37,7 -37,7 -37,7 +37,7 @@@@@@ static HLIST_HEAD(clk_root_list)
     static HLIST_HEAD(clk_orphan_list);
     static LIST_HEAD(clk_notifier_list);
     
 ----static struct hlist_head *all_lists[] = {
 ++++static const struct hlist_head *all_lists[] = {
        &clk_root_list,
        &clk_orphan_list,
        NULL,
@@@@@@ -632,6 -632,24 -632,6 -632,6 -632,6 +632,24 @@@@@@ static void clk_core_get_boundaries(str
                *max_rate = min(*max_rate, clk_user->max_rate);
     }
     
+ +++static bool clk_core_check_boundaries(struct clk_core *core,
+ +++                                 unsigned long min_rate,
+ +++                                 unsigned long max_rate)
+ +++{
+ +++   struct clk *user;
+ +++
+ +++   lockdep_assert_held(&prepare_lock);
+ +++
+ +++   if (min_rate > core->max_rate || max_rate < core->min_rate)
+ +++           return false;
+ +++
+ +++   hlist_for_each_entry(user, &core->clks, clks_node)
+ +++           if (min_rate > user->max_rate || max_rate < user->min_rate)
+ +++                   return false;
+ +++
+ +++   return true;
+ +++}
+ +++
     void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
                           unsigned long max_rate)
     {
@@@@@@ -1330,6 -1348,8 -1330,6 -1330,6 -1330,6 +1348,8 @@@@@@ static int clk_core_determine_round_nol
        if (!core)
                return 0;
     
+ +++   req->rate = clamp(req->rate, req->min_rate, req->max_rate);
+ +++
        /*
         * At this point, core protection will be disabled
         * - if the provider is not protected at all
@@@@@@ -2312,19 -2332,15 -2312,19 -2312,19 -2312,19 +2332,15 @@@@@@ int clk_set_rate_exclusive(struct clk *
     }
     EXPORT_SYMBOL_GPL(clk_set_rate_exclusive);
     
- ---/**
- --- * clk_set_rate_range - set a rate range for a clock source
- --- * @clk: clock source
- --- * @min: desired minimum clock rate in Hz, inclusive
- --- * @max: desired maximum clock rate in Hz, inclusive
- --- *
- --- * Returns success (0) or negative errno.
- --- */
- ---int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
+ +++static int clk_set_rate_range_nolock(struct clk *clk,
+ +++                                unsigned long min,
+ +++                                unsigned long max)
     {
        int ret = 0;
        unsigned long old_min, old_max, rate;
     
+ +++   lockdep_assert_held(&prepare_lock);
+ +++
        if (!clk)
                return 0;
     
                return -EINVAL;
        }
     
- ---   clk_prepare_lock();
- ---
        if (clk->exclusive_count)
                clk_core_rate_unprotect(clk->core);
     
        clk->min_rate = min;
        clk->max_rate = max;
     
- ---   rate = clk_core_get_rate_nolock(clk->core);
- ---   if (rate < min || rate > max) {
- ---           /*
- ---            * FIXME:
- ---            * We are in bit of trouble here, current rate is outside the
- ---            * the requested range. We are going try to request appropriate
- ---            * range boundary but there is a catch. It may fail for the
- ---            * usual reason (clock broken, clock protected, etc) but also
- ---            * because:
- ---            * - round_rate() was not favorable and fell on the wrong
- ---            *   side of the boundary
- ---            * - the determine_rate() callback does not really check for
- ---            *   this corner case when determining the rate
- ---            */
- ---
- ---           if (rate < min)
- ---                   rate = min;
- ---           else
- ---                   rate = max;
+ +++   if (!clk_core_check_boundaries(clk->core, min, max)) {
+ +++           ret = -EINVAL;
+ +++           goto out;
+ +++   }
     
- ---           ret = clk_core_set_rate_nolock(clk->core, rate);
- ---           if (ret) {
- ---                   /* rollback the changes */
- ---                   clk->min_rate = old_min;
- ---                   clk->max_rate = old_max;
- ---           }
+ +++   /*
+ +++    * Since the boundaries have been changed, let's give the
+ +++    * opportunity to the provider to adjust the clock rate based on
+ +++    * the new boundaries.
+ +++    *
+ +++    * We also need to handle the case where the clock is currently
+ +++    * outside of the boundaries. Clamping the last requested rate
+ +++    * to the current minimum and maximum will also handle this.
+ +++    *
+ +++    * FIXME:
+ +++    * There is a catch. It may fail for the usual reason (clock
+ +++    * broken, clock protected, etc) but also because:
+ +++    * - round_rate() was not favorable and fell on the wrong
+ +++    *   side of the boundary
+ +++    * - the determine_rate() callback does not really check for
+ +++    *   this corner case when determining the rate
+ +++    */
+ +++   rate = clamp(clk->core->req_rate, min, max);
+ +++   ret = clk_core_set_rate_nolock(clk->core, rate);
+ +++   if (ret) {
+ +++           /* rollback the changes */
+ +++           clk->min_rate = old_min;
+ +++           clk->max_rate = old_max;
        }
     
+ +++out:
        if (clk->exclusive_count)
                clk_core_rate_protect(clk->core);
     
+ +++   return ret;
+ +++}
+ +++
+ +++/**
+ +++ * clk_set_rate_range - set a rate range for a clock source
+ +++ * @clk: clock source
+ +++ * @min: desired minimum clock rate in Hz, inclusive
+ +++ * @max: desired maximum clock rate in Hz, inclusive
+ +++ *
+ +++ * Return: 0 for success or negative errno on failure.
+ +++ */
+ +++int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
+ +++{
+ +++   int ret;
+ +++
+ +++   if (!clk)
+ +++           return 0;
+ +++
+ +++   clk_prepare_lock();
+ +++
+ +++   ret = clk_set_rate_range_nolock(clk, min, max);
+ +++
        clk_prepare_unlock();
     
        return ret;
@@@@@@ -3456,6 -3495,19 -3456,6 -3456,6 -3456,6 +3495,19 @@@@@@ static void clk_core_reparent_orphans_n
                        __clk_set_parent_after(orphan, parent, NULL);
                        __clk_recalc_accuracies(orphan);
                        __clk_recalc_rates(orphan, 0);
+ +++
+ +++                   /*
+ +++                    * __clk_init_parent() will set the initial req_rate to
+ +++                    * 0 if the clock doesn't have clk_ops::recalc_rate and
+ +++                    * is an orphan when it's registered.
+ +++                    *
+ +++                    * 'req_rate' is used by clk_set_rate_range() and
+ +++                    * clk_put() to trigger a clk_set_rate() call whenever
+ +++                    * the boundaries are modified. Let's make sure
+ +++                    * 'req_rate' is set to something non-zero so that
+ +++                    * clk_set_rate_range() doesn't drop the frequency.
+ +++                    */
+ +++                   orphan->req_rate = orphan->rate;
                }
        }
     }
@@@@@@ -3773,8 -3825,9 -3773,8 -3773,8 -3773,8 +3825,9 @@@@@@ struct clk *clk_hw_create_clk(struct de
     struct clk *clk_hw_get_clk(struct clk_hw *hw, const char *con_id)
     {
        struct device *dev = hw->core->dev;
+ +++   const char *name = dev ? dev_name(dev) : NULL;
     
- ---   return clk_hw_create_clk(dev, hw, dev_name(dev), con_id);
+ +++   return clk_hw_create_clk(dev, hw, name, con_id);
     }
     EXPORT_SYMBOL(clk_hw_get_clk);
     
@@@@@@ -4079,7 -4132,7 -4079,7 -4079,7 -4079,7 +4132,7 @@@@@@ static const struct clk_ops clk_nodrv_o
     };
     
     static void clk_core_evict_parent_cache_subtree(struct clk_core *root,
 ----                                           struct clk_core *target)
 ++++                                           const struct clk_core *target)
     {
        int i;
        struct clk_core *child;
     /* Remove this clk from all parent caches */
     static void clk_core_evict_parent_cache(struct clk_core *core)
     {
 ----   struct hlist_head **lists;
 ++++   const struct hlist_head **lists;
        struct clk_core *root;
     
        lockdep_assert_held(&prepare_lock);
@@@@@@ -4366,9 -4419,7 -4366,9 -4366,9 -4366,9 +4419,7 @@@@@@ void __clk_put(struct clk *clk
        }
     
        hlist_del(&clk->clks_node);
- ---   if (clk->min_rate > clk->core->req_rate ||
- ---       clk->max_rate < clk->core->req_rate)
- ---           clk_core_set_rate_nolock(clk->core, clk->core->req_rate);
+ +++   clk_set_rate_range_nolock(clk, 0, ULONG_MAX);
     
        owner = clk->core->owner;
        kref_put(&clk->core->ref, __clk_release);