Skip to content

Commit

Permalink
Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kerne…
Browse files Browse the repository at this point in the history
…l/git/clk/linux

Pull more clk updates from Stephen Boyd:
 "This is the second batch of clk driver updates that needed a little
  more time to soak in linux-next.

   - Use modern i2c probe in vc5

   - Cleanup some includes

   - Update links to datasheets

   - Add UniPhier NX1 SoC clk support

   - Fix DT bindings for SiFive FU740

   - Revert the module platform driver support for Rockchip because it
     wasn't actually tested

   - Fix the composite clk code again as the previous fix had a one line
     bug that broke rate changes for clks that want to use the same
     parent still

   - Use the right table for a divider in ast2600 driver

   - Get rid of gcc_aggre1_pnoc_ahb_clk in qcom clk driver again because
     its critical but unused"

* tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
  clk: qcom: gcc-msm8996: Drop (again) gcc_aggre1_pnoc_ahb_clk
  clk: imx8m: Do not set IMX_COMPOSITE_CORE for non-regular composites
  clk/ast2600: Fix soc revision for AHB
  clk: composite: Fix 'switching' to same clock
  clk: rockchip: drop module parts from rk3399 and rk3568 drivers
  Revert "clk: rockchip: use module_platform_driver_probe"
  clk:mediatek: remove duplicate include in clk-mt8195-imp_iic_wrap.c
  dt-bindings: clock: fu740-prci: add reset-cells
  clk: uniphier: Add SoC-glue clock source selector support for Pro4
  dt-bindings: clock: uniphier: Add clock binding for SoC-glue
  clk: uniphier: Add NX1 clock support
  dt-bindings: clock: uniphier: Add NX1 clock binding
  clk: uniphier: Add audio system and video input clock control for PXs3
  clk: si5351: Update datasheet references
  clk: vc5: Use i2c .probe_new
  clk/actions/owl-factor.c: remove superfluous headers
  clk: ingenic: Fix bugs with divided dividers
  • Loading branch information
torvalds committed Nov 13, 2021
2 parents f44c7db + 05cf3ec commit 3ad7bef
Show file tree
Hide file tree
Showing 19 changed files with 105 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ properties:
"#clock-cells":
const: 1

"#reset-cells":
const: 1

required:
- compatible
- reg
Expand All @@ -57,4 +60,5 @@ examples:
reg = <0x10000000 0x1000>;
clocks = <&hfclk>, <&rtcclk>;
#clock-cells = <1>;
#reset-cells = <1>;
};
2 changes: 1 addition & 1 deletion Documentation/devicetree/bindings/clock/silabs,si5351.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Binding for Silicon Labs Si5351a/b/c programmable i2c clock generator.

Reference
[1] Si5351A/B/C Data Sheet
https://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351.pdf
https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si5351-B.pdf

The Si5351a/b/c are programmable i2c clock generators with up to 8 output
clocks. Si5351a also has a reduced pin-count package (MSOP10) where only
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ properties:
- socionext,uniphier-ld11-clock
- socionext,uniphier-ld20-clock
- socionext,uniphier-pxs3-clock
- socionext,uniphier-nx1-clock
- description: Media I/O (MIO) clock, SD clock
enum:
- socionext,uniphier-ld4-mio-clock
Expand All @@ -33,6 +34,7 @@ properties:
- socionext,uniphier-ld11-mio-clock
- socionext,uniphier-ld20-sd-clock
- socionext,uniphier-pxs3-sd-clock
- socionext,uniphier-nx1-sd-clock
- description: Peripheral clock
enum:
- socionext,uniphier-ld4-peri-clock
Expand All @@ -43,6 +45,10 @@ properties:
- socionext,uniphier-ld11-peri-clock
- socionext,uniphier-ld20-peri-clock
- socionext,uniphier-pxs3-peri-clock
- socionext,uniphier-nx1-peri-clock
- description: SoC-glue clock
enum:
- socionext,uniphier-pro4-sg-clock

"#clock-cells":
const: 1
Expand Down
1 change: 0 additions & 1 deletion drivers/clk/actions/owl-factor.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

#include <linux/clk-provider.h>
#include <linux/regmap.h>
#include <linux/slab.h>

#include "owl-factor.h"

Expand Down
12 changes: 7 additions & 5 deletions drivers/clk/clk-ast2600.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ static DEFINE_SPINLOCK(aspeed_g6_clk_lock);
static struct clk_hw_onecell_data *aspeed_g6_clk_data;

static void __iomem *scu_g6_base;
/* AST2600 revision: A0, A1, A2, etc */
static u8 soc_rev;

/*
* Clocks marked with CLK_IS_CRITICAL:
Expand Down Expand Up @@ -191,9 +193,8 @@ static struct clk_hw *ast2600_calc_pll(const char *name, u32 val)
static struct clk_hw *ast2600_calc_apll(const char *name, u32 val)
{
unsigned int mult, div;
u32 chip_id = readl(scu_g6_base + ASPEED_G6_SILICON_REV);

if (((chip_id & CHIP_REVISION_ID) >> 16) >= 2) {
if (soc_rev >= 2) {
if (val & BIT(24)) {
/* Pass through mode */
mult = div = 1;
Expand Down Expand Up @@ -707,7 +708,7 @@ static const u32 ast2600_a1_axi_ahb200_tbl[] = {
static void __init aspeed_g6_cc(struct regmap *map)
{
struct clk_hw *hw;
u32 val, div, divbits, chip_id, axi_div, ahb_div;
u32 val, div, divbits, axi_div, ahb_div;

clk_hw_register_fixed_rate(NULL, "clkin", NULL, 0, 25000000);

Expand Down Expand Up @@ -738,8 +739,7 @@ static void __init aspeed_g6_cc(struct regmap *map)
axi_div = 2;

divbits = (val >> 11) & 0x3;
regmap_read(map, ASPEED_G6_SILICON_REV, &chip_id);
if (chip_id & BIT(16)) {
if (soc_rev >= 1) {
if (!divbits) {
ahb_div = ast2600_a1_axi_ahb200_tbl[(val >> 8) & 0x3];
if (val & BIT(16))
Expand Down Expand Up @@ -784,6 +784,8 @@ static void __init aspeed_g6_cc_init(struct device_node *np)
if (!scu_g6_base)
return;

soc_rev = (readl(scu_g6_base + ASPEED_G6_SILICON_REV) & CHIP_REVISION_ID) >> 16;

aspeed_g6_clk_data = kzalloc(struct_size(aspeed_g6_clk_data, hws,
ASPEED_G6_NUM_CLKS), GFP_KERNEL);
if (!aspeed_g6_clk_data)
Expand Down
1 change: 1 addition & 0 deletions drivers/clk/clk-composite.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ static int clk_composite_determine_rate(struct clk_hw *hw,
return ret;

req->rate = tmp_req.rate;
req->best_parent_hw = tmp_req.best_parent_hw;
req->best_parent_rate = tmp_req.best_parent_rate;

return 0;
Expand Down
8 changes: 4 additions & 4 deletions drivers/clk/clk-si5351.c
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* clk-si5351.c: Silicon Laboratories Si5351A/B/C I2C Clock Generator
* clk-si5351.c: Skyworks / Silicon Labs Si5351A/B/C I2C Clock Generator
*
* Sebastian Hesselbarth <[email protected]>
* Rabeeh Khoury <[email protected]>
*
* References:
* [1] "Si5351A/B/C Data Sheet"
* https://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351.pdf
* [2] "Manually Generating an Si5351 Register Map"
* https://www.silabs.com/Support%20Documents/TechnicalDocs/AN619.pdf
* https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si5351-B.pdf
* [2] "AN619: Manually Generating an Si5351 Register Map"
* https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/application-notes/AN619.pdf
*/

#include <linux/module.h>
Expand Down
2 changes: 1 addition & 1 deletion drivers/clk/clk-si5351.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* clk-si5351.h: Silicon Laboratories Si5351A/B/C I2C Clock Generator
* clk-si5351.h: Skyworks / Silicon Labs Si5351A/B/C I2C Clock Generator
*
* Sebastian Hesselbarth <[email protected]>
* Rabeeh Khoury <[email protected]>
Expand Down
4 changes: 2 additions & 2 deletions drivers/clk/clk-versaclock5.c
Original file line number Diff line number Diff line change
Expand Up @@ -905,7 +905,7 @@ static int vc5_get_output_config(struct i2c_client *client,

static const struct of_device_id clk_vc5_of_match[];

static int vc5_probe(struct i2c_client *client, const struct i2c_device_id *id)
static int vc5_probe(struct i2c_client *client)
{
unsigned int oe, sd, src_mask = 0, src_val = 0;
struct vc5_driver_data *vc5;
Expand Down Expand Up @@ -1244,7 +1244,7 @@ static struct i2c_driver vc5_driver = {
.pm = &vc5_pm_ops,
.of_match_table = clk_vc5_of_match,
},
.probe = vc5_probe,
.probe_new = vc5_probe,
.remove = vc5_remove,
.id_table = vc5_id,
};
Expand Down
4 changes: 2 additions & 2 deletions drivers/clk/imx/clk.h
Original file line number Diff line number Diff line change
Expand Up @@ -391,11 +391,11 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name,

#define imx8m_clk_hw_composite(name, parent_names, reg) \
_imx8m_clk_hw_composite(name, parent_names, reg, \
IMX_COMPOSITE_CORE, IMX_COMPOSITE_CLK_FLAGS_DEFAULT)
0, IMX_COMPOSITE_CLK_FLAGS_DEFAULT)

#define imx8m_clk_hw_composite_critical(name, parent_names, reg) \
_imx8m_clk_hw_composite(name, parent_names, reg, \
IMX_COMPOSITE_CORE, IMX_COMPOSITE_CLK_FLAGS_CRITICAL)
0, IMX_COMPOSITE_CLK_FLAGS_CRITICAL)

#define imx8m_clk_hw_composite_bus(name, parent_names, reg) \
_imx8m_clk_hw_composite(name, parent_names, reg, \
Expand Down
6 changes: 3 additions & 3 deletions drivers/clk/ingenic/cgu.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,15 +453,15 @@ ingenic_clk_calc_div(struct clk_hw *hw,
}

/* Impose hardware constraints */
div = min_t(unsigned, div, 1 << clk_info->div.bits);
div = max_t(unsigned, div, 1);
div = clamp_t(unsigned int, div, clk_info->div.div,
clk_info->div.div << clk_info->div.bits);

/*
* If the divider value itself must be divided before being written to
* the divider register, we must ensure we don't have any bits set that
* would be lost as a result of doing so.
*/
div /= clk_info->div.div;
div = DIV_ROUND_UP(div, clk_info->div.div);
div *= clk_info->div.div;

return div;
Expand Down
2 changes: 0 additions & 2 deletions drivers/clk/mediatek/clk-mt8195-imp_iic_wrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
#include <linux/clk-provider.h>
#include <linux/platform_device.h>

#include <dt-bindings/clock/mt8195-clk.h>

static const struct mtk_gate_regs imp_iic_wrap_cg_regs = {
.set_ofs = 0xe08,
.clr_ofs = 0xe04,
Expand Down
15 changes: 0 additions & 15 deletions drivers/clk/qcom/gcc-msm8996.c
Original file line number Diff line number Diff line change
Expand Up @@ -2937,20 +2937,6 @@ static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
},
};

static struct clk_branch gcc_aggre1_pnoc_ahb_clk = {
.halt_reg = 0x82014,
.clkr = {
.enable_reg = 0x82014,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_aggre1_pnoc_ahb_clk",
.parent_names = (const char *[]){ "periph_noc_clk_src" },
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};

static struct clk_branch gcc_aggre2_ufs_axi_clk = {
.halt_reg = 0x83014,
.clkr = {
Expand Down Expand Up @@ -3474,7 +3460,6 @@ static struct clk_regmap *gcc_msm8996_clocks[] = {
[GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
[GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
[GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
[GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr,
[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
Expand Down
4 changes: 2 additions & 2 deletions drivers/clk/rockchip/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,14 @@ config CLK_RK3368
Build the driver for RK3368 Clock Driver.

config CLK_RK3399
tristate "Rockchip RK3399 clock controller support"
bool "Rockchip RK3399 clock controller support"
depends on ARM64 || COMPILE_TEST
default y
help
Build the driver for RK3399 Clock Driver.

config CLK_RK3568
tristate "Rockchip RK3568 clock controller support"
bool "Rockchip RK3568 clock controller support"
depends on ARM64 || COMPILE_TEST
default y
help
Expand Down
6 changes: 1 addition & 5 deletions drivers/clk/rockchip/clk-rk3399.c
Original file line number Diff line number Diff line change
Expand Up @@ -1630,7 +1630,6 @@ static const struct of_device_id clk_rk3399_match_table[] = {
},
{ }
};
MODULE_DEVICE_TABLE(of, clk_rk3399_match_table);

static int __init clk_rk3399_probe(struct platform_device *pdev)
{
Expand All @@ -1656,7 +1655,4 @@ static struct platform_driver clk_rk3399_driver = {
.suppress_bind_attrs = true,
},
};
module_platform_driver_probe(clk_rk3399_driver, clk_rk3399_probe);

MODULE_DESCRIPTION("Rockchip RK3399 Clock Driver");
MODULE_LICENSE("GPL");
builtin_platform_driver_probe(clk_rk3399_driver, clk_rk3399_probe);
6 changes: 1 addition & 5 deletions drivers/clk/rockchip/clk-rk3568.c
Original file line number Diff line number Diff line change
Expand Up @@ -1693,7 +1693,6 @@ static const struct of_device_id clk_rk3568_match_table[] = {
},
{ }
};
MODULE_DEVICE_TABLE(of, clk_rk3568_match_table);

static int __init clk_rk3568_probe(struct platform_device *pdev)
{
Expand All @@ -1719,7 +1718,4 @@ static struct platform_driver clk_rk3568_driver = {
.suppress_bind_attrs = true,
},
};
module_platform_driver_probe(clk_rk3568_driver, clk_rk3568_probe);

MODULE_DESCRIPTION("Rockchip RK3568 Clock Driver");
MODULE_LICENSE("GPL");
builtin_platform_driver_probe(clk_rk3568_driver, clk_rk3568_probe);
17 changes: 17 additions & 0 deletions drivers/clk/uniphier/clk-uniphier-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ static const struct of_device_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-pxs3-clock",
.data = uniphier_pxs3_sys_clk_data,
},
{
.compatible = "socionext,uniphier-nx1-clock",
.data = uniphier_nx1_sys_clk_data,
},
/* Media I/O clock, SD clock */
{
.compatible = "socionext,uniphier-ld4-mio-clock",
Expand Down Expand Up @@ -165,6 +169,10 @@ static const struct of_device_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-pxs3-sd-clock",
.data = uniphier_pro5_sd_clk_data,
},
{
.compatible = "socionext,uniphier-nx1-sd-clock",
.data = uniphier_pro5_sd_clk_data,
},
/* Peripheral clock */
{
.compatible = "socionext,uniphier-ld4-peri-clock",
Expand Down Expand Up @@ -198,6 +206,15 @@ static const struct of_device_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-pxs3-peri-clock",
.data = uniphier_pro4_peri_clk_data,
},
{
.compatible = "socionext,uniphier-nx1-peri-clock",
.data = uniphier_pro4_peri_clk_data,
},
/* SoC-glue clock */
{
.compatible = "socionext,uniphier-pro4-sg-clock",
.data = uniphier_pro4_sg_clk_data,
},
{ /* sentinel */ }
};

Expand Down
47 changes: 47 additions & 0 deletions drivers/clk/uniphier/clk-uniphier-sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 10), \
UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 15)

#define UNIPHIER_NX1_SYS_CLK_SD \
UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 4), \
UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 6)

#define UNIPHIER_LD4_SYS_CLK_NAND(idx) \
UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 32), \
UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x2104, 2)
Expand Down Expand Up @@ -288,6 +292,8 @@ const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[] = {
UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x210c, 7),
UNIPHIER_CLK_GATE("sata1", 29, NULL, 0x210c, 8),
UNIPHIER_CLK_GATE("sata-phy", 30, NULL, 0x210c, 21),
UNIPHIER_LD11_SYS_CLK_AIO(40),
UNIPHIER_LD11_SYS_CLK_EXIV(42),
/* CPU gears */
UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8),
Expand All @@ -300,3 +306,44 @@ const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[] = {
"spll/4", "spll/8", "s2pll/4", "s2pll/8"),
{ /* sentinel */ }
};

const struct uniphier_clk_data uniphier_nx1_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 100, 1), /* ARM: 2500 MHz */
UNIPHIER_CLK_FACTOR("spll", -1, "ref", 32, 1), /* 800 MHz */
UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 6),
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
UNIPHIER_NX1_SYS_CLK_SD,
UNIPHIER_CLK_GATE("emmc", 4, NULL, 0x2108, 8),
UNIPHIER_CLK_GATE("ether", 6, NULL, 0x210c, 0),
UNIPHIER_CLK_GATE("usb30-0", 12, NULL, 0x210c, 16), /* =GIO */
UNIPHIER_CLK_GATE("usb30-1", 13, NULL, 0x210c, 20), /* =GIO1P */
UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 24),
UNIPHIER_CLK_GATE("usb30-ssphy0", 17, NULL, 0x210c, 25),
UNIPHIER_CLK_GATE("usb30-ssphy1", 18, NULL, 0x210c, 26),
UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 8),
UNIPHIER_CLK_GATE("voc", 52, NULL, 0x2110, 0),
UNIPHIER_CLK_GATE("hdmitx", 58, NULL, 0x2110, 8),
/* CPU gears */
UNIPHIER_CLK_DIV5("cpll", 2, 4, 8, 16, 32),
UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 5,
"cpll/2", "cpll/4", "cpll/8", "cpll/16",
"cpll/32"),
{ /* sentinel */ }
};

const struct uniphier_clk_data uniphier_pro4_sg_clk_data[] = {
UNIPHIER_CLK_DIV("gpll", 4),
{
.name = "sata-ref",
.type = UNIPHIER_CLK_TYPE_MUX,
.idx = 0,
.data.mux = {
.parent_names = { "gpll/4", "ref", },
.num_parents = 2,
.reg = 0x1a28,
.masks = { 0x1, 0x1, },
.vals = { 0x0, 0x1, },
},
},
{ /* sentinel */ }
};
Loading

0 comments on commit 3ad7bef

Please sign in to comment.