Commit 36bf7a5b authored by Stephen Boyd's avatar Stephen Boyd

Merge branches 'clk-uniphier', 'clk-warn-critical', 'clk-ux500', 'clk-kconfig'...

Merge branches 'clk-uniphier', 'clk-warn-critical', 'clk-ux500', 'clk-kconfig' and 'clk-at91' into clk-next

 - Warn about critical clks that fail to enable or prepare
 - Detect more PRMCU variants in ux500 driver

* clk-uniphier:
  clk: uniphier: Add SCSSI clock gate for each channel

* clk-warn-critical:
  clk: Warn about critical clks that fail to enable
  clk: Don't try to enable critical clocks if prepare failed
  clk: tegra: Fix double-free in tegra_clk_init()
  clk: samsung: exynos5420: Keep top G3D clocks enabled
  clk: qcom: Avoid SMMU/cx gdsc corner cases
  clk: qcom: gcc-sc7180: Fix setting flag for votable GDSCs
  clk: Move clk_core_reparent_orphans() under CONFIG_OF
  clk: at91: fix possible deadlock
  clk: walk orphan list on clock provider registration
  clk: imx: pll14xx: fix clk_pll14xx_wait_lock
  clk: imx: clk-imx7ulp: Add missing sentinel of ulp_div_table
  clk: imx: clk-composite-8m: add lock to gate/mux

* clk-ux500:
  clk: ux500: Fix up the SGA clock for some variants

* clk-kconfig:
  clk: Fix Kconfig indentation

* clk-at91:
  clk: at91: sam9x60: fix programmable clock prescaler
  clk: at91: sam9x60-pll: adapt PMC_PLL_ACR default value
...@@ -27,7 +27,7 @@ config COMMON_CLK_WM831X ...@@ -27,7 +27,7 @@ config COMMON_CLK_WM831X
tristate "Clock driver for WM831x/2x PMICs" tristate "Clock driver for WM831x/2x PMICs"
depends on MFD_WM831X depends on MFD_WM831X
---help--- ---help---
Supports the clocking subsystem of the WM831x/2x series of Supports the clocking subsystem of the WM831x/2x series of
PMICs from Wolfson Microelectronics. PMICs from Wolfson Microelectronics.
source "drivers/clk/versatile/Kconfig" source "drivers/clk/versatile/Kconfig"
......
...@@ -348,7 +348,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np, ...@@ -348,7 +348,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); mainxtal_name = of_clk_get_parent_name(np, i);
regmap = syscon_node_to_regmap(np); regmap = device_node_to_regmap(np);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return; return;
......
...@@ -83,7 +83,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np) ...@@ -83,7 +83,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); mainxtal_name = of_clk_get_parent_name(np, i);
regmap = syscon_node_to_regmap(np); regmap = device_node_to_regmap(np);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return; return;
......
...@@ -146,7 +146,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np, ...@@ -146,7 +146,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); mainxtal_name = of_clk_get_parent_name(np, i);
regmap = syscon_node_to_regmap(np); regmap = device_node_to_regmap(np);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return; return;
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
#define PMC_PLL_CTRL1_MUL_MSK GENMASK(30, 24) #define PMC_PLL_CTRL1_MUL_MSK GENMASK(30, 24)
#define PMC_PLL_ACR 0x18 #define PMC_PLL_ACR 0x18
#define PMC_PLL_ACR_DEFAULT 0x1b040010UL #define PMC_PLL_ACR_DEFAULT_UPLL 0x12020010UL
#define PMC_PLL_ACR_DEFAULT_PLLA 0x00020010UL
#define PMC_PLL_ACR_UTMIVR BIT(12) #define PMC_PLL_ACR_UTMIVR BIT(12)
#define PMC_PLL_ACR_UTMIBG BIT(13) #define PMC_PLL_ACR_UTMIBG BIT(13)
#define PMC_PLL_ACR_LOOP_FILTER_MSK GENMASK(31, 24) #define PMC_PLL_ACR_LOOP_FILTER_MSK GENMASK(31, 24)
...@@ -88,7 +89,10 @@ static int sam9x60_pll_prepare(struct clk_hw *hw) ...@@ -88,7 +89,10 @@ static int sam9x60_pll_prepare(struct clk_hw *hw)
} }
/* Recommended value for PMC_PLL_ACR */ /* Recommended value for PMC_PLL_ACR */
val = PMC_PLL_ACR_DEFAULT; if (pll->characteristics->upll)
val = PMC_PLL_ACR_DEFAULT_UPLL;
else
val = PMC_PLL_ACR_DEFAULT_PLLA;
regmap_write(regmap, PMC_PLL_ACR, val); regmap_write(regmap, PMC_PLL_ACR, val);
regmap_write(regmap, PMC_PLL_CTRL1, regmap_write(regmap, PMC_PLL_CTRL1,
......
...@@ -275,7 +275,7 @@ static int __init pmc_register_ops(void) ...@@ -275,7 +275,7 @@ static int __init pmc_register_ops(void)
np = of_find_matching_node(NULL, sama5d2_pmc_dt_ids); np = of_find_matching_node(NULL, sama5d2_pmc_dt_ids);
pmcreg = syscon_node_to_regmap(np); pmcreg = device_node_to_regmap(np);
if (IS_ERR(pmcreg)) if (IS_ERR(pmcreg))
return PTR_ERR(pmcreg); return PTR_ERR(pmcreg);
......
...@@ -47,6 +47,7 @@ static const struct clk_programmable_layout sam9x60_programmable_layout = { ...@@ -47,6 +47,7 @@ static const struct clk_programmable_layout sam9x60_programmable_layout = {
.pres_shift = 8, .pres_shift = 8,
.css_mask = 0x1f, .css_mask = 0x1f,
.have_slck_mck = 0, .have_slck_mck = 0,
.is_pres_direct = 1,
}; };
static const struct clk_pcr_layout sam9x60_pcr_layout = { static const struct clk_pcr_layout sam9x60_pcr_layout = {
......
...@@ -162,7 +162,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) ...@@ -162,7 +162,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); mainxtal_name = of_clk_get_parent_name(np, i);
regmap = syscon_node_to_regmap(np); regmap = device_node_to_regmap(np);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return; return;
......
...@@ -136,7 +136,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np) ...@@ -136,7 +136,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np)
return; return;
mainxtal_name = of_clk_get_parent_name(np, i); mainxtal_name = of_clk_get_parent_name(np, i);
regmap = syscon_node_to_regmap(np); regmap = device_node_to_regmap(np);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return; return;
......
...@@ -3249,6 +3249,34 @@ static inline void clk_debug_unregister(struct clk_core *core) ...@@ -3249,6 +3249,34 @@ static inline void clk_debug_unregister(struct clk_core *core)
} }
#endif #endif
static void clk_core_reparent_orphans_nolock(void)
{
struct clk_core *orphan;
struct hlist_node *tmp2;
/*
* walk the list of orphan clocks and reparent any that newly finds a
* parent.
*/
hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
struct clk_core *parent = __clk_init_parent(orphan);
/*
* We need to use __clk_set_parent_before() and _after() to
* to properly migrate any prepare/enable count of the orphan
* clock. This is important for CLK_IS_CRITICAL clocks, which
* are enabled during init but might not have a parent yet.
*/
if (parent) {
/* update the clk tree topology */
__clk_set_parent_before(orphan, parent);
__clk_set_parent_after(orphan, parent, NULL);
__clk_recalc_accuracies(orphan);
__clk_recalc_rates(orphan, 0);
}
}
}
/** /**
* __clk_core_init - initialize the data structures in a struct clk_core * __clk_core_init - initialize the data structures in a struct clk_core
* @core: clk_core being initialized * @core: clk_core being initialized
...@@ -3259,8 +3287,6 @@ static inline void clk_debug_unregister(struct clk_core *core) ...@@ -3259,8 +3287,6 @@ static inline void clk_debug_unregister(struct clk_core *core)
static int __clk_core_init(struct clk_core *core) static int __clk_core_init(struct clk_core *core)
{ {
int ret; int ret;
struct clk_core *orphan;
struct hlist_node *tmp2;
unsigned long rate; unsigned long rate;
if (!core) if (!core)
...@@ -3409,34 +3435,26 @@ static int __clk_core_init(struct clk_core *core) ...@@ -3409,34 +3435,26 @@ static int __clk_core_init(struct clk_core *core)
if (core->flags & CLK_IS_CRITICAL) { if (core->flags & CLK_IS_CRITICAL) {
unsigned long flags; unsigned long flags;
clk_core_prepare(core); ret = clk_core_prepare(core);
if (ret) {
pr_warn("%s: critical clk '%s' failed to prepare\n",
__func__, core->name);
goto out;
}
flags = clk_enable_lock(); flags = clk_enable_lock();
clk_core_enable(core); ret = clk_core_enable(core);
clk_enable_unlock(flags); clk_enable_unlock(flags);
if (ret) {
pr_warn("%s: critical clk '%s' failed to enable\n",
__func__, core->name);
clk_core_unprepare(core);
goto out;
}
} }
/* clk_core_reparent_orphans_nolock();
* walk the list of orphan clocks and reparent any that newly finds a
* parent.
*/
hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
struct clk_core *parent = __clk_init_parent(orphan);
/*
* We need to use __clk_set_parent_before() and _after() to
* to properly migrate any prepare/enable count of the orphan
* clock. This is important for CLK_IS_CRITICAL clocks, which
* are enabled during init but might not have a parent yet.
*/
if (parent) {
/* update the clk tree topology */
__clk_set_parent_before(orphan, parent);
__clk_set_parent_after(orphan, parent, NULL);
__clk_recalc_accuracies(orphan);
__clk_recalc_rates(orphan, 0);
}
}
kref_init(&core->ref); kref_init(&core->ref);
out: out:
...@@ -4216,6 +4234,13 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb) ...@@ -4216,6 +4234,13 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
EXPORT_SYMBOL_GPL(clk_notifier_unregister); EXPORT_SYMBOL_GPL(clk_notifier_unregister);
#ifdef CONFIG_OF #ifdef CONFIG_OF
static void clk_core_reparent_orphans(void)
{
clk_prepare_lock();
clk_core_reparent_orphans_nolock();
clk_prepare_unlock();
}
/** /**
* struct of_clk_provider - Clock provider registration structure * struct of_clk_provider - Clock provider registration structure
* @link: Entry in global list of clock providers * @link: Entry in global list of clock providers
...@@ -4311,6 +4336,8 @@ int of_clk_add_provider(struct device_node *np, ...@@ -4311,6 +4336,8 @@ int of_clk_add_provider(struct device_node *np,
mutex_unlock(&of_clk_mutex); mutex_unlock(&of_clk_mutex);
pr_debug("Added clock from %pOF\n", np); pr_debug("Added clock from %pOF\n", np);
clk_core_reparent_orphans();
ret = of_clk_set_defaults(np, true); ret = of_clk_set_defaults(np, true);
if (ret < 0) if (ret < 0)
of_clk_del_provider(np); of_clk_del_provider(np);
...@@ -4346,6 +4373,8 @@ int of_clk_add_hw_provider(struct device_node *np, ...@@ -4346,6 +4373,8 @@ int of_clk_add_hw_provider(struct device_node *np,
mutex_unlock(&of_clk_mutex); mutex_unlock(&of_clk_mutex);
pr_debug("Added clk_hw provider from %pOF\n", np); pr_debug("Added clk_hw provider from %pOF\n", np);
clk_core_reparent_orphans();
ret = of_clk_set_defaults(np, true); ret = of_clk_set_defaults(np, true);
if (ret < 0) if (ret < 0)
of_clk_del_provider(np); of_clk_del_provider(np);
......
...@@ -142,6 +142,7 @@ struct clk *imx8m_clk_composite_flags(const char *name, ...@@ -142,6 +142,7 @@ struct clk *imx8m_clk_composite_flags(const char *name,
mux->reg = reg; mux->reg = reg;
mux->shift = PCG_PCS_SHIFT; mux->shift = PCG_PCS_SHIFT;
mux->mask = PCG_PCS_MASK; mux->mask = PCG_PCS_MASK;
mux->lock = &imx_ccm_lock;
div = kzalloc(sizeof(*div), GFP_KERNEL); div = kzalloc(sizeof(*div), GFP_KERNEL);
if (!div) if (!div)
...@@ -161,6 +162,7 @@ struct clk *imx8m_clk_composite_flags(const char *name, ...@@ -161,6 +162,7 @@ struct clk *imx8m_clk_composite_flags(const char *name,
gate_hw = &gate->hw; gate_hw = &gate->hw;
gate->reg = reg; gate->reg = reg;
gate->bit_idx = PCG_CGC_SHIFT; gate->bit_idx = PCG_CGC_SHIFT;
gate->lock = &imx_ccm_lock;
hw = clk_hw_register_composite(NULL, name, parent_names, num_parents, hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
mux_hw, &clk_mux_ops, div_hw, mux_hw, &clk_mux_ops, div_hw,
......
...@@ -40,6 +40,7 @@ static const struct clk_div_table ulp_div_table[] = { ...@@ -40,6 +40,7 @@ static const struct clk_div_table ulp_div_table[] = {
{ .val = 5, .div = 16, }, { .val = 5, .div = 16, },
{ .val = 6, .div = 32, }, { .val = 6, .div = 32, },
{ .val = 7, .div = 64, }, { .val = 7, .div = 64, },
{ /* sentinel */ },
}; };
static const int pcc2_uart_clk_ids[] __initconst = { static const int pcc2_uart_clk_ids[] __initconst = {
......
...@@ -159,7 +159,7 @@ static int clk_pll14xx_wait_lock(struct clk_pll14xx *pll) ...@@ -159,7 +159,7 @@ static int clk_pll14xx_wait_lock(struct clk_pll14xx *pll)
{ {
u32 val; u32 val;
return readl_poll_timeout(pll->base, val, val & LOCK_TIMEOUT_US, 0, return readl_poll_timeout(pll->base, val, val & LOCK_STATUS, 0,
LOCK_TIMEOUT_US); LOCK_TIMEOUT_US);
} }
......
...@@ -174,36 +174,36 @@ config COMMON_CLK_MT6779_AUDSYS ...@@ -174,36 +174,36 @@ config COMMON_CLK_MT6779_AUDSYS
This driver supports Mediatek MT6779 audsys clocks. This driver supports Mediatek MT6779 audsys clocks.
config COMMON_CLK_MT6797 config COMMON_CLK_MT6797
bool "Clock driver for MediaTek MT6797" bool "Clock driver for MediaTek MT6797"
depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST
select COMMON_CLK_MEDIATEK select COMMON_CLK_MEDIATEK
default ARCH_MEDIATEK && ARM64 default ARCH_MEDIATEK && ARM64
---help--- ---help---
This driver supports MediaTek MT6797 basic clocks. This driver supports MediaTek MT6797 basic clocks.
config COMMON_CLK_MT6797_MMSYS config COMMON_CLK_MT6797_MMSYS
bool "Clock driver for MediaTek MT6797 mmsys" bool "Clock driver for MediaTek MT6797 mmsys"
depends on COMMON_CLK_MT6797 depends on COMMON_CLK_MT6797
---help--- ---help---
This driver supports MediaTek MT6797 mmsys clocks. This driver supports MediaTek MT6797 mmsys clocks.
config COMMON_CLK_MT6797_IMGSYS config COMMON_CLK_MT6797_IMGSYS
bool "Clock driver for MediaTek MT6797 imgsys" bool "Clock driver for MediaTek MT6797 imgsys"
depends on COMMON_CLK_MT6797 depends on COMMON_CLK_MT6797
---help--- ---help---
This driver supports MediaTek MT6797 imgsys clocks. This driver supports MediaTek MT6797 imgsys clocks.
config COMMON_CLK_MT6797_VDECSYS config COMMON_CLK_MT6797_VDECSYS
bool "Clock driver for MediaTek MT6797 vdecsys" bool "Clock driver for MediaTek MT6797 vdecsys"
depends on COMMON_CLK_MT6797 depends on COMMON_CLK_MT6797
---help--- ---help---
This driver supports MediaTek MT6797 vdecsys clocks. This driver supports MediaTek MT6797 vdecsys clocks.
config COMMON_CLK_MT6797_VENCSYS config COMMON_CLK_MT6797_VENCSYS
bool "Clock driver for MediaTek MT6797 vencsys" bool "Clock driver for MediaTek MT6797 vencsys"
depends on COMMON_CLK_MT6797 depends on COMMON_CLK_MT6797
---help--- ---help---
This driver supports MediaTek MT6797 vencsys clocks. This driver supports MediaTek MT6797 vencsys clocks.
config COMMON_CLK_MT7622 config COMMON_CLK_MT7622
bool "Clock driver for MediaTek MT7622" bool "Clock driver for MediaTek MT7622"
......
...@@ -29,7 +29,7 @@ config ARMADA_39X_CLK ...@@ -29,7 +29,7 @@ config ARMADA_39X_CLK
select MVEBU_CLK_COMMON select MVEBU_CLK_COMMON
config ARMADA_37XX_CLK config ARMADA_37XX_CLK
bool bool
config ARMADA_XP_CLK config ARMADA_XP_CLK
bool bool
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
config KRAIT_CLOCKS config KRAIT_CLOCKS
bool bool
select KRAIT_L2_ACCESSORS select KRAIT_L2_ACCESSORS
config QCOM_GDSC config QCOM_GDSC
bool bool
......
...@@ -2186,7 +2186,8 @@ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { ...@@ -2186,7 +2186,8 @@ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
.pd = { .pd = {
.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON | VOTABLE, .pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
}; };
static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = { static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
...@@ -2194,7 +2195,8 @@ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = { ...@@ -2194,7 +2195,8 @@ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
.pd = { .pd = {
.name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc", .name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON | VOTABLE, .pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
}; };
static struct gdsc *gcc_sc7180_gdscs[] = { static struct gdsc *gcc_sc7180_gdscs[] = {
......
...@@ -242,10 +242,12 @@ static struct clk_branch gfx3d_isense_clk = { ...@@ -242,10 +242,12 @@ static struct clk_branch gfx3d_isense_clk = {
static struct gdsc gpu_cx_gdsc = { static struct gdsc gpu_cx_gdsc = {
.gdscr = 0x1004, .gdscr = 0x1004,
.gds_hw_ctrl = 0x1008,
.pd = { .pd = {
.name = "gpu_cx", .name = "gpu_cx",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
}; };
static struct gdsc gpu_gx_gdsc = { static struct gdsc gpu_gx_gdsc = {
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/clk.h>
#include "clk.h" #include "clk.h"
#include "clk-cpu.h" #include "clk-cpu.h"
...@@ -1646,6 +1647,13 @@ static void __init exynos5x_clk_init(struct device_node *np, ...@@ -1646,6 +1647,13 @@ static void __init exynos5x_clk_init(struct device_node *np,
exynos5x_subcmus); exynos5x_subcmus);
} }
/*
* Keep top part of G3D clock path enabled permanently to ensure
* that the internal busses get their clock regardless of the
* main G3D clock enablement status.
*/
clk_prepare_enable(__clk_lookup("mout_sw_aclk_g3d"));
samsung_clk_of_add_provider(np, ctx); samsung_clk_of_add_provider(np, ctx);
} }
......
...@@ -231,8 +231,10 @@ struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks) ...@@ -231,8 +231,10 @@ struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks)
periph_banks = banks; periph_banks = banks;
clks = kcalloc(num, sizeof(struct clk *), GFP_KERNEL); clks = kcalloc(num, sizeof(struct clk *), GFP_KERNEL);
if (!clks) if (!clks) {
kfree(periph_clk_enb_refcnt); kfree(periph_clk_enb_refcnt);
return NULL;
}
clk_num = num; clk_num = num;
......
...@@ -18,8 +18,8 @@ ...@@ -18,8 +18,8 @@
#define UNIPHIER_PERI_CLK_FI2C(idx, ch) \ #define UNIPHIER_PERI_CLK_FI2C(idx, ch) \
UNIPHIER_CLK_GATE("i2c" #ch, (idx), "i2c", 0x24, 24 + (ch)) UNIPHIER_CLK_GATE("i2c" #ch, (idx), "i2c", 0x24, 24 + (ch))
#define UNIPHIER_PERI_CLK_SCSSI(idx) \ #define UNIPHIER_PERI_CLK_SCSSI(idx, ch) \
UNIPHIER_CLK_GATE("scssi", (idx), "spi", 0x20, 17) UNIPHIER_CLK_GATE("scssi" #ch, (idx), "spi", 0x20, 17 + (ch))
#define UNIPHIER_PERI_CLK_MCSSI(idx) \ #define UNIPHIER_PERI_CLK_MCSSI(idx) \
UNIPHIER_CLK_GATE("mcssi", (idx), "spi", 0x24, 14) UNIPHIER_CLK_GATE("mcssi", (idx), "spi", 0x24, 14)
...@@ -35,7 +35,7 @@ const struct uniphier_clk_data uniphier_ld4_peri_clk_data[] = { ...@@ -35,7 +35,7 @@ const struct uniphier_clk_data uniphier_ld4_peri_clk_data[] = {
UNIPHIER_PERI_CLK_I2C(6, 2), UNIPHIER_PERI_CLK_I2C(6, 2),
UNIPHIER_PERI_CLK_I2C(7, 3), UNIPHIER_PERI_CLK_I2C(7, 3),
UNIPHIER_PERI_CLK_I2C(8, 4), UNIPHIER_PERI_CLK_I2C(8, 4),
UNIPHIER_PERI_CLK_SCSSI(11), UNIPHIER_PERI_CLK_SCSSI(11, 0),
{ /* sentinel */ } { /* sentinel */ }
}; };
...@@ -51,7 +51,10 @@ const struct uniphier_clk_data uniphier_pro4_peri_clk_data[] = { ...@@ -51,7 +51,10 @@ const struct uniphier_clk_data uniphier_pro4_peri_clk_data[] = {
UNIPHIER_PERI_CLK_FI2C(8, 4), UNIPHIER_PERI_CLK_FI2C(8, 4),
UNIPHIER_PERI_CLK_FI2C(9, 5), UNIPHIER_PERI_CLK_FI2C(9, 5),
UNIPHIER_PERI_CLK_FI2C(10, 6), UNIPHIER_PERI_CLK_FI2C(10, 6),
UNIPHIER_PERI_CLK_SCSSI(11), UNIPHIER_PERI_CLK_SCSSI(11, 0),
UNIPHIER_PERI_CLK_MCSSI(12), UNIPHIER_PERI_CLK_SCSSI(12, 1),
UNIPHIER_PERI_CLK_SCSSI(13, 2),
UNIPHIER_PERI_CLK_SCSSI(14, 3),
UNIPHIER_PERI_CLK_MCSSI(15),
{ /* sentinel */ } { /* sentinel */ }
}; };
...@@ -99,8 +99,10 @@ static void u8500_clk_init(struct device_node *np) ...@@ -99,8 +99,10 @@ static void u8500_clk_init(struct device_node *np)
if (fw_version != NULL) { if (fw_version != NULL) {
switch (fw_version->project) { switch (fw_version->project) {
case PRCMU_FW_PROJECT_U8500_C2: case PRCMU_FW_PROJECT_U8500_C2:
case PRCMU_FW_PROJECT_U8500_MBL:
case PRCMU_FW_PROJECT_U8520: case PRCMU_FW_PROJECT_U8520:
case PRCMU_FW_PROJECT_U8420: case PRCMU_FW_PROJECT_U8420:
case PRCMU_FW_PROJECT_U8420_SYSCLK:
sgaclk_parent = "soc0_pll"; sgaclk_parent = "soc0_pll";
break; break;
default: default:
......
...@@ -9,7 +9,7 @@ config COMMON_CLK_VERSATILE ...@@ -9,7 +9,7 @@ config COMMON_CLK_VERSATILE
COMPILE_TEST COMPILE_TEST
select REGMAP_MMIO select REGMAP_MMIO
---help--- ---help---
Supports clocking on ARM Reference designs: Supports clocking on ARM Reference designs:
- Integrator/AP and Integrator/CP - Integrator/AP and Integrator/CP
- RealView PB1176, EB, PB11MP and PBX - RealView PB1176, EB, PB11MP and PBX
- Versatile Express - Versatile Express
......
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