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
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-*/
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
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
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
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
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>
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
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
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
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
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
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]
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
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/
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/
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/
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>
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
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>
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
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/
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
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
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
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
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
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>
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>
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/
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
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,
*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)
{
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
}
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;
__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;
}
}
}
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);
};
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);
}
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);