mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 05:02:31 +00:00
Merge branches 'clk-renesas', 'clk-cleanup', 'clk-hisilicon', 'clk-mediatek' and 'clk-bulk' into clk-next
- Add a devm_clk_bulk_get_all_enable() API to get and enable all clks for a device - Fix some static checker errors in the hisilicon clk driver * clk-renesas: (25 commits) clk: renesas: r8a779h0: Add RPC-IF clock clk: renesas: r8a779h0: Add SYS-DMAC clocks clk: renesas: r8a779h0: Add SDHI clock clk: renesas: r8a779h0: Add EtherAVB clocks clk: renesas: r9a07g04[34]: Fix typo for sel_shdi variable clk: renesas: r9a07g04[34]: Use SEL_SDHI1_STS status configuration for SD1 mux clk: renesas: r8a779f0: Correct PFC/GPIO parent clock clk: renesas: r8a779g0: Correct PFC/GPIO parent clocks clk: renesas: r8a779h0: Add I2C clocks clk: renesas: r8a779h0: Add watchdog clock clk: renesas: r8a779h0: Add PFC/GPIO clocks clk: renesas: r8a779g0: Fix PCIe clock name clk: renesas: cpg-mssr: Add support for R-Car V4M clk: renesas: rcar-gen4: Add support for FRQCRC1 clk: renesas: r9a07g043: Add clock and reset entries for CRU clk: renesas: r9a08g045: Add clock and reset support for watchdog dt-bindings: clock: Add R8A779H0 V4M CPG Core Clock Definitions dt-bindings: clock: renesas,cpg-mssr: Document R-Car V4M support dt-bindings: power: Add r8a779h0 SYSC power domain definitions dt-bindings: power: renesas,rcar-sysc: Document R-Car V4M support ... * clk-cleanup: clk: zynq: Prevent null pointer dereference caused by kmalloc failure clk: fractional-divider: Use bit operations consistently clk: fractional-divider: Move mask calculations out of lock clk: ti: dpll3xxx: use correct function names in kernel-doc clk: clocking-wizard: Remove redundant initialization of pointer div_addr clk: keystone: sci-clk: match func name comment to actual clk: cdce925: Remove redundant assignment to variable 'rate' MAINTAINERS: drop Sekhar Nori * clk-hisilicon: clk: hisilicon: Use devm_kcalloc() instead of devm_kzalloc() clk: hisilicon: hi3559a: Fix an erroneous devm_kfree() clk: hisilicon: hi3519: Release the correct number of gates in hi3519_clk_unregister() * clk-mediatek: clk: mediatek: clk-mt8173-apmixedsys: Use common error handling code in clk_mt8173_apmixed_probe() clk: mediatek: add infracfg reset controller for mt7988 dt-bindings: reset: mediatek: add MT7988 infracfg reset IDs dt-bindings: clock: mediatek: convert SSUSBSYS to the json-schema clock dt-bindings: clock: mediatek: convert PCIESYS to the json-schema clock dt-bindings: clock: mediatek: convert hifsys to the json-schema clock clk: mediatek: mt7981-topckgen: flag SGM_REG_SEL as critical clk: mediatek: mt8183: Correct parent of CLK_INFRA_SSPM_32K_SELF clk: mediatek: mt7622-apmixedsys: Fix an error handling path in clk_mt8135_apmixed_probe() clk: mediatek: mt8135: Fix an error handling path in clk_mt8135_apmixed_probe() * clk-bulk: clk: Provide managed helper to get and enable bulk clocks
This commit is contained in:
commit
cf5f06c8ee
5
CREDITS
5
CREDITS
@ -2942,6 +2942,11 @@ S: 2364 Old Trail Drive
|
||||
S: Reston, Virginia 20191
|
||||
S: USA
|
||||
|
||||
N: Sekhar Nori
|
||||
E: nori.sekhar@gmail.com
|
||||
D: Maintainer of Texas Instruments DaVinci machine support, contributor
|
||||
D: to device drivers relevant to that SoC family.
|
||||
|
||||
N: Fredrik Noring
|
||||
E: noring@nocrew.org
|
||||
W: http://www.lysator.liu.se/~noring/
|
||||
|
@ -1,26 +0,0 @@
|
||||
Mediatek hifsys controller
|
||||
============================
|
||||
|
||||
The Mediatek hifsys controller provides various clocks and reset
|
||||
outputs to the system.
|
||||
|
||||
Required Properties:
|
||||
|
||||
- compatible: Should be:
|
||||
- "mediatek,mt2701-hifsys", "syscon"
|
||||
- "mediatek,mt7622-hifsys", "syscon"
|
||||
- "mediatek,mt7623-hifsys", "mediatek,mt2701-hifsys", "syscon"
|
||||
- #clock-cells: Must be 1
|
||||
|
||||
The hifsys controller uses the common clk binding from
|
||||
Documentation/devicetree/bindings/clock/clock-bindings.txt
|
||||
The available clocks are defined in dt-bindings/clock/mt*-clk.h.
|
||||
|
||||
Example:
|
||||
|
||||
hifsys: clock-controller@1a000000 {
|
||||
compatible = "mediatek,mt2701-hifsys", "syscon";
|
||||
reg = <0 0x1a000000 0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -1,25 +0,0 @@
|
||||
MediaTek PCIESYS controller
|
||||
============================
|
||||
|
||||
The MediaTek PCIESYS controller provides various clocks to the system.
|
||||
|
||||
Required Properties:
|
||||
|
||||
- compatible: Should be:
|
||||
- "mediatek,mt7622-pciesys", "syscon"
|
||||
- "mediatek,mt7629-pciesys", "syscon"
|
||||
- #clock-cells: Must be 1
|
||||
- #reset-cells: Must be 1
|
||||
|
||||
The PCIESYS controller uses the common clk binding from
|
||||
Documentation/devicetree/bindings/clock/clock-bindings.txt
|
||||
The available clocks are defined in dt-bindings/clock/mt*-clk.h.
|
||||
|
||||
Example:
|
||||
|
||||
pciesys: pciesys@1a100800 {
|
||||
compatible = "mediatek,mt7622-pciesys", "syscon";
|
||||
reg = <0 0x1a100800 0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -1,25 +0,0 @@
|
||||
MediaTek SSUSBSYS controller
|
||||
============================
|
||||
|
||||
The MediaTek SSUSBSYS controller provides various clocks to the system.
|
||||
|
||||
Required Properties:
|
||||
|
||||
- compatible: Should be:
|
||||
- "mediatek,mt7622-ssusbsys", "syscon"
|
||||
- "mediatek,mt7629-ssusbsys", "syscon"
|
||||
- #clock-cells: Must be 1
|
||||
- #reset-cells: Must be 1
|
||||
|
||||
The SSUSBSYS controller uses the common clk binding from
|
||||
Documentation/devicetree/bindings/clock/clock-bindings.txt
|
||||
The available clocks are defined in dt-bindings/clock/mt*-clk.h.
|
||||
|
||||
Example:
|
||||
|
||||
ssusbsys: ssusbsys@1a000000 {
|
||||
compatible = "mediatek,mt7622-ssusbsys", "syscon";
|
||||
reg = <0 0x1a000000 0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/mediatek,mt2701-hifsys.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek HIFSYS clock and reset controller
|
||||
|
||||
description:
|
||||
The MediaTek HIFSYS controller provides various clocks and reset outputs to
|
||||
the system.
|
||||
|
||||
maintainers:
|
||||
- Matthias Brugger <matthias.bgg@gmail.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- enum:
|
||||
- mediatek,mt2701-hifsys
|
||||
- mediatek,mt7622-hifsys
|
||||
- items:
|
||||
- enum:
|
||||
- mediatek,mt7623-hifsys
|
||||
- const: mediatek,mt2701-hifsys
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#clock-cells":
|
||||
const: 1
|
||||
description: The available clocks are defined in dt-bindings/clock/mt*-clk.h
|
||||
|
||||
"#reset-cells":
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- reg
|
||||
- "#clock-cells"
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
clock-controller@1a000000 {
|
||||
compatible = "mediatek,mt2701-hifsys";
|
||||
reg = <0x1a000000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -0,0 +1,45 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/mediatek,mt7622-pciesys.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek PCIESYS clock and reset controller
|
||||
|
||||
description:
|
||||
The MediaTek PCIESYS controller provides various clocks to the system.
|
||||
|
||||
maintainers:
|
||||
- Matthias Brugger <matthias.bgg@gmail.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- mediatek,mt7622-pciesys
|
||||
- mediatek,mt7629-pciesys
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#clock-cells":
|
||||
const: 1
|
||||
description: The available clocks are defined in dt-bindings/clock/mt*-clk.h
|
||||
|
||||
"#reset-cells":
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- reg
|
||||
- "#clock-cells"
|
||||
- "#reset-cells"
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
clock-controller@1a100800 {
|
||||
compatible = "mediatek,mt7622-pciesys";
|
||||
reg = <0x1a100800 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -0,0 +1,45 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/mediatek,mt7622-ssusbsys.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek SSUSBSYS clock and reset controller
|
||||
|
||||
description:
|
||||
The MediaTek SSUSBSYS controller provides various clocks to the system.
|
||||
|
||||
maintainers:
|
||||
- Matthias Brugger <matthias.bgg@gmail.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- mediatek,mt7622-ssusbsys
|
||||
- mediatek,mt7629-ssusbsys
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#clock-cells":
|
||||
const: 1
|
||||
description: The available clocks are defined in dt-bindings/clock/mt*-clk.h
|
||||
|
||||
"#reset-cells":
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- reg
|
||||
- "#clock-cells"
|
||||
- "#reset-cells"
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
clock-controller@1a000000 {
|
||||
compatible = "mediatek,mt7622-ssusbsys";
|
||||
reg = <0x1a000000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
@ -21940,7 +21940,6 @@ F: drivers/i2c/busses/i2c-davinci.c
|
||||
|
||||
TI DAVINCI SERIES CLOCK DRIVER
|
||||
M: David Lechner <david@lechnology.com>
|
||||
R: Sekhar Nori <nsekhar@ti.com>
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/clock/ti/davinci/
|
||||
F: drivers/clk/davinci/
|
||||
|
@ -101,7 +101,6 @@ static void cdce925_pll_find_rate(unsigned long rate,
|
||||
|
||||
if (rate <= parent_rate) {
|
||||
/* Can always deliver parent_rate in bypass mode */
|
||||
rate = parent_rate;
|
||||
*n = 0;
|
||||
*m = 0;
|
||||
} else {
|
||||
|
@ -182,6 +182,46 @@ int __must_check devm_clk_bulk_get_all(struct device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all);
|
||||
|
||||
static void devm_clk_bulk_release_all_enable(struct device *dev, void *res)
|
||||
{
|
||||
struct clk_bulk_devres *devres = res;
|
||||
|
||||
clk_bulk_disable_unprepare(devres->num_clks, devres->clks);
|
||||
clk_bulk_put_all(devres->num_clks, devres->clks);
|
||||
}
|
||||
|
||||
int __must_check devm_clk_bulk_get_all_enable(struct device *dev,
|
||||
struct clk_bulk_data **clks)
|
||||
{
|
||||
struct clk_bulk_devres *devres;
|
||||
int ret;
|
||||
|
||||
devres = devres_alloc(devm_clk_bulk_release_all_enable,
|
||||
sizeof(*devres), GFP_KERNEL);
|
||||
if (!devres)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = clk_bulk_get_all(dev, &devres->clks);
|
||||
if (ret > 0) {
|
||||
*clks = devres->clks;
|
||||
devres->num_clks = ret;
|
||||
} else {
|
||||
devres_free(devres);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_bulk_prepare_enable(devres->num_clks, *clks);
|
||||
if (!ret) {
|
||||
devres_add(dev, devres);
|
||||
} else {
|
||||
clk_bulk_put_all(devres->num_clks, devres->clks);
|
||||
devres_free(devres);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all_enable);
|
||||
|
||||
static int devm_clk_match(struct device *dev, void *res, void *data)
|
||||
{
|
||||
struct clk **c = res;
|
||||
|
@ -140,8 +140,8 @@ void clk_fractional_divider_general_approximation(struct clk_hw *hw,
|
||||
}
|
||||
|
||||
if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
|
||||
max_m = 1 << fd->mwidth;
|
||||
max_n = 1 << fd->nwidth;
|
||||
max_m = BIT(fd->mwidth);
|
||||
max_n = BIT(fd->nwidth);
|
||||
} else {
|
||||
max_m = GENMASK(fd->mwidth - 1, 0);
|
||||
max_n = GENMASK(fd->nwidth - 1, 0);
|
||||
@ -182,8 +182,8 @@ static int clk_fd_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
u32 val;
|
||||
|
||||
if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
|
||||
max_m = 1 << fd->mwidth;
|
||||
max_n = 1 << fd->nwidth;
|
||||
max_m = BIT(fd->mwidth);
|
||||
max_n = BIT(fd->nwidth);
|
||||
} else {
|
||||
max_m = GENMASK(fd->mwidth - 1, 0);
|
||||
max_n = GENMASK(fd->nwidth - 1, 0);
|
||||
@ -195,14 +195,14 @@ static int clk_fd_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
n--;
|
||||
}
|
||||
|
||||
mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
|
||||
nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
|
||||
|
||||
if (fd->lock)
|
||||
spin_lock_irqsave(fd->lock, flags);
|
||||
else
|
||||
__acquire(fd->lock);
|
||||
|
||||
mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
|
||||
nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
|
||||
|
||||
val = clk_fd_readl(fd);
|
||||
val &= ~(mmask | nmask);
|
||||
val |= (m << fd->mshift) | (n << fd->nshift);
|
||||
|
@ -130,7 +130,7 @@ static void hi3519_clk_unregister(struct platform_device *pdev)
|
||||
of_clk_del_provider(pdev->dev.of_node);
|
||||
|
||||
hisi_clk_unregister_gate(hi3519_gate_clks,
|
||||
ARRAY_SIZE(hi3519_mux_clks),
|
||||
ARRAY_SIZE(hi3519_gate_clks),
|
||||
crg->clk_data);
|
||||
hisi_clk_unregister_mux(hi3519_mux_clks,
|
||||
ARRAY_SIZE(hi3519_mux_clks),
|
||||
|
@ -461,8 +461,7 @@ static void hisi_clk_register_pll(struct hi3559av100_pll_clock *clks,
|
||||
struct clk_init_data init;
|
||||
int i;
|
||||
|
||||
p_clk = devm_kzalloc(dev, sizeof(*p_clk) * nums, GFP_KERNEL);
|
||||
|
||||
p_clk = devm_kcalloc(dev, nums, sizeof(*p_clk), GFP_KERNEL);
|
||||
if (!p_clk)
|
||||
return;
|
||||
|
||||
@ -491,7 +490,6 @@ static void hisi_clk_register_pll(struct hi3559av100_pll_clock *clks,
|
||||
|
||||
clk = clk_register(NULL, &p_clk->hw);
|
||||
if (IS_ERR(clk)) {
|
||||
devm_kfree(dev, p_clk);
|
||||
dev_err(dev, "%s: failed to register clock %s\n",
|
||||
__func__, clks[i].name);
|
||||
continue;
|
||||
|
@ -272,7 +272,7 @@ static const struct clk_ops sci_clk_ops = {
|
||||
};
|
||||
|
||||
/**
|
||||
* _sci_clk_get - Gets a handle for an SCI clock
|
||||
* _sci_clk_build - Gets a handle for an SCI clock
|
||||
* @provider: Handle to SCI clock provider
|
||||
* @sci_clk: Handle to the SCI clock to populate
|
||||
*
|
||||
|
@ -127,7 +127,6 @@ static void clk_mt7622_apmixed_remove(struct platform_device *pdev)
|
||||
of_clk_del_provider(node);
|
||||
mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
|
||||
mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
|
||||
mtk_free_clk_data(clk_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id of_match_clk_mt7622_apmixed[] = {
|
||||
|
@ -357,8 +357,9 @@ static const struct mtk_mux top_muxes[] = {
|
||||
MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_325M_SEL, "sgm_325m_sel",
|
||||
sgm_325m_parents, 0x050, 0x054, 0x058, 8, 1, 15,
|
||||
0x1C0, 21),
|
||||
MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel", sgm_reg_parents,
|
||||
0x050, 0x054, 0x058, 16, 1, 23, 0x1C0, 22),
|
||||
MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel", sgm_reg_parents,
|
||||
0x050, 0x054, 0x058, 16, 1, 23, 0x1C0, 22,
|
||||
CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
|
||||
MUX_GATE_CLR_SET_UPD(CLK_TOP_EIP97B_SEL, "eip97b_sel", eip97b_parents,
|
||||
0x050, 0x054, 0x058, 24, 3, 31, 0x1C0, 23),
|
||||
/* CLK_CFG_6 */
|
||||
|
@ -14,6 +14,10 @@
|
||||
#include "clk-gate.h"
|
||||
#include "clk-mux.h"
|
||||
#include <dt-bindings/clock/mediatek,mt7988-clk.h>
|
||||
#include <dt-bindings/reset/mediatek,mt7988-resets.h>
|
||||
|
||||
#define MT7988_INFRA_RST0_SET_OFFSET 0x70
|
||||
#define MT7988_INFRA_RST1_SET_OFFSET 0x80
|
||||
|
||||
static DEFINE_SPINLOCK(mt7988_clk_lock);
|
||||
|
||||
@ -249,12 +253,31 @@ static const struct mtk_gate infra_clks[] = {
|
||||
GATE_INFRA3(CLK_INFRA_133M_PCIE_CK_P3, "infra_133m_pcie_ck_p3", "sysaxi_sel", 31),
|
||||
};
|
||||
|
||||
static u16 infra_rst_ofs[] = {
|
||||
MT7988_INFRA_RST0_SET_OFFSET,
|
||||
MT7988_INFRA_RST1_SET_OFFSET,
|
||||
};
|
||||
|
||||
static u16 infra_idx_map[] = {
|
||||
[MT7988_INFRA_RST0_PEXTP_MAC_SWRST] = 0 * RST_NR_PER_BANK + 6,
|
||||
[MT7988_INFRA_RST1_THERM_CTRL_SWRST] = 1 * RST_NR_PER_BANK + 9,
|
||||
};
|
||||
|
||||
static struct mtk_clk_rst_desc infra_rst_desc = {
|
||||
.version = MTK_RST_SET_CLR,
|
||||
.rst_bank_ofs = infra_rst_ofs,
|
||||
.rst_bank_nr = ARRAY_SIZE(infra_rst_ofs),
|
||||
.rst_idx_map = infra_idx_map,
|
||||
.rst_idx_map_nr = ARRAY_SIZE(infra_idx_map),
|
||||
};
|
||||
|
||||
static const struct mtk_clk_desc infra_desc = {
|
||||
.clks = infra_clks,
|
||||
.num_clks = ARRAY_SIZE(infra_clks),
|
||||
.mux_clks = infra_muxes,
|
||||
.num_mux_clks = ARRAY_SIZE(infra_muxes),
|
||||
.clk_lock = &mt7988_clk_lock,
|
||||
.rst_desc = &infra_rst_desc,
|
||||
};
|
||||
|
||||
static const struct of_device_id of_match_clk_mt7988_infracfg[] = {
|
||||
|
@ -59,7 +59,7 @@ static int clk_mt8135_apmixed_probe(struct platform_device *pdev)
|
||||
|
||||
ret = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto free_clk_data;
|
||||
|
||||
ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
|
||||
if (ret)
|
||||
@ -69,6 +69,8 @@ static int clk_mt8135_apmixed_probe(struct platform_device *pdev)
|
||||
|
||||
unregister_plls:
|
||||
mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
|
||||
free_clk_data:
|
||||
mtk_free_clk_data(clk_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -152,8 +152,8 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
|
||||
|
||||
clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
|
||||
if (IS_ERR_OR_NULL(clk_data)) {
|
||||
iounmap(base);
|
||||
return -ENOMEM;
|
||||
r = -ENOMEM;
|
||||
goto unmap_io;
|
||||
}
|
||||
|
||||
fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs));
|
||||
@ -188,6 +188,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
|
||||
ARRAY_SIZE(pllfhs), clk_data);
|
||||
free_clk_data:
|
||||
mtk_free_clk_data(clk_data);
|
||||
unmap_io:
|
||||
iounmap(base);
|
||||
return r;
|
||||
}
|
||||
|
@ -790,7 +790,7 @@ static const struct mtk_gate infra_clks[] = {
|
||||
/* infra_sspm_26m_self is main clock in co-processor, should not be closed in Linux. */
|
||||
GATE_INFRA3_FLAGS(CLK_INFRA_SSPM_26M_SELF, "infra_sspm_26m_self", "f_f26m_ck", 3, CLK_IS_CRITICAL),
|
||||
/* infra_sspm_32k_self is main clock in co-processor, should not be closed in Linux. */
|
||||
GATE_INFRA3_FLAGS(CLK_INFRA_SSPM_32K_SELF, "infra_sspm_32k_self", "f_f26m_ck", 4, CLK_IS_CRITICAL),
|
||||
GATE_INFRA3_FLAGS(CLK_INFRA_SSPM_32K_SELF, "infra_sspm_32k_self", "clk32k", 4, CLK_IS_CRITICAL),
|
||||
GATE_INFRA3(CLK_INFRA_UFS_AXI, "infra_ufs_axi", "axi_sel", 5),
|
||||
GATE_INFRA3(CLK_INFRA_I2C6, "infra_i2c6", "i2c_sel", 6),
|
||||
GATE_INFRA3(CLK_INFRA_AP_MSDC0, "infra_ap_msdc0", "msdc50_hclk_sel", 7),
|
||||
|
@ -928,7 +928,7 @@ void omap3_core_dpll_restore_context(struct clk_hw *hw)
|
||||
}
|
||||
|
||||
/**
|
||||
* omap3_non_core_dpll_save_context - Save the m and n values of the divider
|
||||
* omap3_noncore_dpll_save_context - Save the m and n values of the divider
|
||||
* @hw: pointer struct clk_hw
|
||||
*
|
||||
* Before the dpll registers are lost save the last rounded rate m and n
|
||||
@ -957,7 +957,7 @@ int omap3_noncore_dpll_save_context(struct clk_hw *hw)
|
||||
}
|
||||
|
||||
/**
|
||||
* omap3_core_dpll_restore_context - restore the m and n values of the divider
|
||||
* omap3_noncore_dpll_restore_context - restore the m and n values of the divider
|
||||
* @hw: pointer struct clk_hw
|
||||
*
|
||||
* Restore the last rounded rate m and n
|
||||
|
@ -498,7 +498,7 @@ static int clk_wzrd_dynamic_all_nolock(struct clk_hw *hw, unsigned long rate,
|
||||
{
|
||||
struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
|
||||
unsigned long vco_freq, rate_div, clockout0_div;
|
||||
void __iomem *div_addr = divider->base;
|
||||
void __iomem *div_addr;
|
||||
u32 reg, pre, f;
|
||||
int err;
|
||||
|
||||
|
@ -42,6 +42,7 @@ static void __iomem *zynq_clkc_base;
|
||||
#define SLCR_SWDT_CLK_SEL (zynq_clkc_base + 0x204)
|
||||
|
||||
#define NUM_MIO_PINS 54
|
||||
#define CLK_NAME_LEN 16
|
||||
|
||||
#define DBG_CLK_CTRL_CLKACT_TRC BIT(0)
|
||||
#define DBG_CLK_CTRL_CPU_1XCLKACT BIT(1)
|
||||
@ -215,7 +216,7 @@ static void __init zynq_clk_setup(struct device_node *np)
|
||||
int i;
|
||||
u32 tmp;
|
||||
int ret;
|
||||
char *clk_name;
|
||||
char clk_name[CLK_NAME_LEN];
|
||||
unsigned int fclk_enable = 0;
|
||||
const char *clk_output_name[clk_max];
|
||||
const char *cpu_parents[4];
|
||||
@ -426,12 +427,10 @@ static void __init zynq_clk_setup(struct device_node *np)
|
||||
"gem1_emio_mux", CLK_SET_RATE_PARENT,
|
||||
SLCR_GEM1_CLK_CTRL, 0, 0, &gem1clk_lock);
|
||||
|
||||
tmp = strlen("mio_clk_00x");
|
||||
clk_name = kmalloc(tmp, GFP_KERNEL);
|
||||
for (i = 0; i < NUM_MIO_PINS; i++) {
|
||||
int idx;
|
||||
|
||||
snprintf(clk_name, tmp, "mio_clk_%2.2d", i);
|
||||
snprintf(clk_name, CLK_NAME_LEN, "mio_clk_%2.2d", i);
|
||||
idx = of_property_match_string(np, "clock-names", clk_name);
|
||||
if (idx >= 0)
|
||||
can_mio_mux_parents[i] = of_clk_get_parent_name(np,
|
||||
@ -439,7 +438,6 @@ static void __init zynq_clk_setup(struct device_node *np)
|
||||
else
|
||||
can_mio_mux_parents[i] = dummy_nm;
|
||||
}
|
||||
kfree(clk_name);
|
||||
clk_register_mux(NULL, "can_mux", periph_parents, 4,
|
||||
CLK_SET_RATE_NO_REPARENT, SLCR_CAN_CLK_CTRL, 4, 2, 0,
|
||||
&canclk_lock);
|
||||
|
@ -10,4 +10,10 @@
|
||||
/* ETHWARP resets */
|
||||
#define MT7988_ETHWARP_RST_SWITCH 0
|
||||
|
||||
/* INFRA resets */
|
||||
#define MT7988_INFRA_RST0_PEXTP_MAC_SWRST 0
|
||||
#define MT7988_INFRA_RST1_THERM_CTRL_SWRST 1
|
||||
|
||||
|
||||
#endif /* _DT_BINDINGS_RESET_CONTROLLER_MT7988 */
|
||||
|
||||
|
@ -478,6 +478,22 @@ int __must_check devm_clk_bulk_get_optional(struct device *dev, int num_clks,
|
||||
int __must_check devm_clk_bulk_get_all(struct device *dev,
|
||||
struct clk_bulk_data **clks);
|
||||
|
||||
/**
|
||||
* devm_clk_bulk_get_all_enable - Get and enable all clocks of the consumer (managed)
|
||||
* @dev: device for clock "consumer"
|
||||
* @clks: pointer to the clk_bulk_data table of consumer
|
||||
*
|
||||
* Returns success (0) or negative errno.
|
||||
*
|
||||
* This helper function allows drivers to get all clocks of the
|
||||
* consumer and enables them in one operation with management.
|
||||
* The clks will automatically be disabled and freed when the device
|
||||
* is unbound.
|
||||
*/
|
||||
|
||||
int __must_check devm_clk_bulk_get_all_enable(struct device *dev,
|
||||
struct clk_bulk_data **clks);
|
||||
|
||||
/**
|
||||
* devm_clk_get - lookup and obtain a managed reference to a clock producer.
|
||||
* @dev: device for clock "consumer"
|
||||
@ -968,6 +984,12 @@ static inline int __must_check devm_clk_bulk_get_all(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __must_check devm_clk_bulk_get_all_enable(struct device *dev,
|
||||
struct clk_bulk_data **clks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct clk *devm_get_clk_from_child(struct device *dev,
|
||||
struct device_node *np, const char *con_id)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user