Commit c0e6265e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux

Pull clk fixes from Stephen Boyd:
 "A semi-large pile of clk driver fixes this time around.

  Nothing is touching the core so these fixes are fairly well contained
  to specific devices that use these clk drivers.

   - Some Allwinner SoC fixes to gracefully handle errors and mark an
     RTC clk as critical so that the RTC keeps ticking.

   - Fix AXI bus clks and RTC clk design for Microchip PolarFire SoC
     driver introduced this cycle. This has some devicetree bits acked
     by riscv maintainers. We're fixing it now so that the prior
     bindings aren't released in a major kernel version.

   - Remove a reset on Microchip PolarFire SoCs that broke when enabling
     CONFIG_PM.

   - Set a min/max for the Qualcomm graphics clk. This got broken by the
     clk rate range patches introduced this cycle"

* tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
  clk: sunxi: sun9i-mmc: check return value after calling platform_get_resource()
  clk: sunxi-ng: sun6i-rtc: Mark rtc-32k as critical
  riscv: dts: microchip: reparent mpfs clocks
  clk: microchip: mpfs: add RTCREF clock control
  clk: microchip: mpfs: re-parent the configurable clocks
  dt-bindings: rtc: add refclk to mpfs-rtc
  dt-bindings: clk: mpfs: add defines for two new clocks
  dt-bindings: clk: mpfs document msspll dri registers
  riscv: dts: microchip: fix usage of fic clocks on mpfs
  clk: microchip: mpfs: mark CLK_ATHENA as critical
  clk: microchip: mpfs: fix parents for FIC clocks
  clk: qcom: clk-rcg2: fix gfx3d frequency calculation
  clk: microchip: mpfs: don't reset disabled peripherals
  clk: sunxi-ng: fix not NULL terminated coccicheck error
parents bd3d3ade a91b05f6
...@@ -22,7 +22,16 @@ properties: ...@@ -22,7 +22,16 @@ properties:
const: microchip,mpfs-clkcfg const: microchip,mpfs-clkcfg
reg: reg:
maxItems: 1 items:
- description: |
clock config registers:
These registers contain enable, reset & divider tables for the, cpu,
axi, ahb and rtc/mtimer reference clocks as well as enable and reset
for the peripheral clocks.
- description: |
mss pll dri registers:
Block of registers responsible for dynamic reconfiguration of the mss
pll
clocks: clocks:
maxItems: 1 maxItems: 1
...@@ -51,7 +60,7 @@ examples: ...@@ -51,7 +60,7 @@ examples:
#size-cells = <2>; #size-cells = <2>;
clkcfg: clock-controller@20002000 { clkcfg: clock-controller@20002000 {
compatible = "microchip,mpfs-clkcfg"; compatible = "microchip,mpfs-clkcfg";
reg = <0x0 0x20002000 0x0 0x1000>; reg = <0x0 0x20002000 0x0 0x1000>, <0x0 0x3E001000 0x0 0x1000>;
clocks = <&ref>; clocks = <&ref>;
#clock-cells = <1>; #clock-cells = <1>;
}; };
......
...@@ -31,11 +31,19 @@ properties: ...@@ -31,11 +31,19 @@ properties:
to that of the RTC's count register. to that of the RTC's count register.
clocks: clocks:
maxItems: 1 items:
- description: |
AHB clock
- description: |
Reference clock: divided by the prescaler to create a time-based
strobe (typically 1 Hz) for the calendar counter. By default, the rtc
on the PolarFire SoC shares it's reference with MTIMER so this will
be a 1 MHz clock.
clock-names: clock-names:
items: items:
- const: rtc - const: rtc
- const: rtcref
required: required:
- compatible - compatible
...@@ -48,11 +56,12 @@ additionalProperties: false ...@@ -48,11 +56,12 @@ additionalProperties: false
examples: examples:
- | - |
#include "dt-bindings/clock/microchip,mpfs-clock.h"
rtc@20124000 { rtc@20124000 {
compatible = "microchip,mpfs-rtc"; compatible = "microchip,mpfs-rtc";
reg = <0x20124000 0x1000>; reg = <0x20124000 0x1000>;
clocks = <&clkcfg 21>; clocks = <&clkcfg CLK_RTC>, <&clkcfg CLK_RTCREF>;
clock-names = "rtc"; clock-names = "rtc", "rtcref";
interrupts = <80>, <81>; interrupts = <80>, <81>;
}; };
... ...
...@@ -7,7 +7,7 @@ core_pwm0: pwm@41000000 { ...@@ -7,7 +7,7 @@ core_pwm0: pwm@41000000 {
reg = <0x0 0x41000000 0x0 0xF0>; reg = <0x0 0x41000000 0x0 0xF0>;
microchip,sync-update-mask = /bits/ 32 <0>; microchip,sync-update-mask = /bits/ 32 <0>;
#pwm-cells = <2>; #pwm-cells = <2>;
clocks = <&clkcfg CLK_FIC3>; clocks = <&fabric_clk3>;
status = "disabled"; status = "disabled";
}; };
...@@ -16,10 +16,22 @@ i2c2: i2c@44000000 { ...@@ -16,10 +16,22 @@ i2c2: i2c@44000000 {
reg = <0x0 0x44000000 0x0 0x1000>; reg = <0x0 0x44000000 0x0 0x1000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
clocks = <&clkcfg CLK_FIC3>; clocks = <&fabric_clk3>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <122>; interrupts = <122>;
clock-frequency = <100000>; clock-frequency = <100000>;
status = "disabled"; status = "disabled";
}; };
fabric_clk3: fabric-clk3 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <62500000>;
};
fabric_clk1: fabric-clk1 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <125000000>;
};
}; };
...@@ -45,7 +45,7 @@ ddrc_cache_hi: memory@1000000000 { ...@@ -45,7 +45,7 @@ ddrc_cache_hi: memory@1000000000 {
}; };
&refclk { &refclk {
clock-frequency = <600000000>; clock-frequency = <125000000>;
}; };
&mmuart1 { &mmuart1 {
......
...@@ -141,7 +141,7 @@ cpu4_intc: interrupt-controller { ...@@ -141,7 +141,7 @@ cpu4_intc: interrupt-controller {
}; };
}; };
refclk: msspllclk { refclk: mssrefclk {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0>; #clock-cells = <0>;
}; };
...@@ -190,7 +190,7 @@ plic: interrupt-controller@c000000 { ...@@ -190,7 +190,7 @@ plic: interrupt-controller@c000000 {
clkcfg: clkcfg@20002000 { clkcfg: clkcfg@20002000 {
compatible = "microchip,mpfs-clkcfg"; compatible = "microchip,mpfs-clkcfg";
reg = <0x0 0x20002000 0x0 0x1000>; reg = <0x0 0x20002000 0x0 0x1000>, <0x0 0x3E001000 0x0 0x1000>;
clocks = <&refclk>; clocks = <&refclk>;
#clock-cells = <1>; #clock-cells = <1>;
}; };
...@@ -393,8 +393,8 @@ rtc: rtc@20124000 { ...@@ -393,8 +393,8 @@ rtc: rtc@20124000 {
reg = <0x0 0x20124000 0x0 0x1000>; reg = <0x0 0x20124000 0x0 0x1000>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <80>, <81>; interrupts = <80>, <81>;
clocks = <&clkcfg CLK_RTC>; clocks = <&clkcfg CLK_RTC>, <&clkcfg CLK_RTCREF>;
clock-names = "rtc"; clock-names = "rtc", "rtcref";
status = "disabled"; status = "disabled";
}; };
...@@ -424,7 +424,7 @@ pcie: pcie@2000000000 { ...@@ -424,7 +424,7 @@ pcie: pcie@2000000000 {
<0 0 0 3 &pcie_intc 2>, <0 0 0 3 &pcie_intc 2>,
<0 0 0 4 &pcie_intc 3>; <0 0 0 4 &pcie_intc 3>;
interrupt-map-mask = <0 0 0 7>; interrupt-map-mask = <0 0 0 7>;
clocks = <&clkcfg CLK_FIC0>, <&clkcfg CLK_FIC1>, <&clkcfg CLK_FIC3>; clocks = <&fabric_clk1>, <&fabric_clk1>, <&fabric_clk3>;
clock-names = "fic0", "fic1", "fic3"; clock-names = "fic0", "fic1", "fic3";
ranges = <0x3000000 0x0 0x8000000 0x20 0x8000000 0x0 0x80000000>; ranges = <0x3000000 0x0 0x8000000 0x20 0x8000000 0x0 0x80000000>;
msi-parent = <&pcie>; msi-parent = <&pcie>;
......
This diff is collapsed.
...@@ -818,7 +818,7 @@ EXPORT_SYMBOL_GPL(clk_pixel_ops); ...@@ -818,7 +818,7 @@ EXPORT_SYMBOL_GPL(clk_pixel_ops);
static int clk_gfx3d_determine_rate(struct clk_hw *hw, static int clk_gfx3d_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req) struct clk_rate_request *req)
{ {
struct clk_rate_request parent_req = { }; struct clk_rate_request parent_req = { .min_rate = 0, .max_rate = ULONG_MAX };
struct clk_rcg2_gfx3d *cgfx = to_clk_rcg2_gfx3d(hw); struct clk_rcg2_gfx3d *cgfx = to_clk_rcg2_gfx3d(hw);
struct clk_hw *xo, *p0, *p1, *p2; struct clk_hw *xo, *p0, *p1, *p2;
unsigned long p0_rate; unsigned long p0_rate;
......
...@@ -241,6 +241,7 @@ static struct clk_init_data rtc_32k_init_data = { ...@@ -241,6 +241,7 @@ static struct clk_init_data rtc_32k_init_data = {
.ops = &ccu_mux_ops, .ops = &ccu_mux_ops,
.parent_hws = rtc_32k_parents, .parent_hws = rtc_32k_parents,
.num_parents = ARRAY_SIZE(rtc_32k_parents), /* updated during probe */ .num_parents = ARRAY_SIZE(rtc_32k_parents), /* updated during probe */
.flags = CLK_IS_CRITICAL,
}; };
static struct ccu_mux rtc_32k_clk = { static struct ccu_mux rtc_32k_clk = {
...@@ -346,6 +347,7 @@ static const struct of_device_id sun6i_rtc_ccu_match[] = { ...@@ -346,6 +347,7 @@ static const struct of_device_id sun6i_rtc_ccu_match[] = {
.compatible = "allwinner,sun50i-r329-rtc", .compatible = "allwinner,sun50i-r329-rtc",
.data = &sun50i_r329_rtc_ccu_data, .data = &sun50i_r329_rtc_ccu_data,
}, },
{},
}; };
int sun6i_rtc_ccu_probe(struct device *dev, void __iomem *reg) int sun6i_rtc_ccu_probe(struct device *dev, void __iomem *reg)
......
...@@ -109,6 +109,8 @@ static int sun9i_a80_mmc_config_clk_probe(struct platform_device *pdev) ...@@ -109,6 +109,8 @@ static int sun9i_a80_mmc_config_clk_probe(struct platform_device *pdev)
spin_lock_init(&data->lock); spin_lock_init(&data->lock);
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!r)
return -EINVAL;
/* one clock/reset pair per word */ /* one clock/reset pair per word */
count = DIV_ROUND_UP((resource_size(r)), SUN9I_MMC_WIDTH); count = DIV_ROUND_UP((resource_size(r)), SUN9I_MMC_WIDTH);
data->membase = devm_ioremap_resource(&pdev->dev, r); data->membase = devm_ioremap_resource(&pdev->dev, r);
......
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/* /*
* Daire McNamara,<daire.mcnamara@microchip.com> * Daire McNamara,<daire.mcnamara@microchip.com>
* Copyright (C) 2020 Microchip Technology Inc. All rights reserved. * Copyright (C) 2020-2022 Microchip Technology Inc. All rights reserved.
*/ */
#ifndef _DT_BINDINGS_CLK_MICROCHIP_MPFS_H_ #ifndef _DT_BINDINGS_CLK_MICROCHIP_MPFS_H_
...@@ -42,4 +42,7 @@ ...@@ -42,4 +42,7 @@
#define CLK_ATHENA 31 #define CLK_ATHENA 31
#define CLK_CFM 32 #define CLK_CFM 32
#define CLK_RTCREF 33
#define CLK_MSSPLL 34
#endif /* _DT_BINDINGS_CLK_MICROCHIP_MPFS_H_ */ #endif /* _DT_BINDINGS_CLK_MICROCHIP_MPFS_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment