mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
Merge branches 'clk-bindings', 'clk-cleanup', 'clk-renesas', 'clk-thead' and 'clk-spacemit' into clk-next
* clk-bindings: dt-bindings: clock: mediatek: Add power-domains property dt-bindings: clock: silabs,si5341: Add missing properties dt-bindings: clock: adi,axi-clkgen: add clock-output-names property dt-bindings: clock: Remove unused fujitsu,mb86s70-crg11 binding dt-bindings: clock: Convert silabs,si570 to DT schema dt-bindings: clock: Convert silabs,si5341 to DT schema dt-bindings: clock: Convert silabs,si514/544 to DT schema * clk-cleanup: clk: tegra: do not overallocate memory for bpmp clocks clk: ep93xx: Use int type to store negative error codes dt-bindings: clock: st: flexgen: remove deprecated compatibles clk: st: flexgen: remove unused compatible clk: clk-axi-clkgen: remove unneeded semicolon clk: tegra: Remove redundant semicolons clk: npcm: select CONFIG_AUXILIARY_BUS clk: remove unneeded 'fast_io' parameter in regmap_config * clk-renesas: (27 commits) clk: renesas: r9a09g05[67]: Reduce differences clk: renesas: r9a09g047: Add USB3.0 clocks/resets clk: renesas: cpg-mssr: Fix memory leak in cpg_mssr_reserved_init() clk: renesas: r9a09g056: Add clock and reset entries for I3C clk: renesas: r9a09g057: Add clock and reset entries for I3C dt-bindings: clock: renesas,r9a09g047-cpg: Add USB3.0 core clocks clk: renesas: r9a09g077: Add Ethernet Subsystem core and module clocks clk: renesas: rzv2h: Simplify polling condition in __rzv2h_cpg_assert() clk: renesas: rzv2h: Re-assert reset on deassert timeout clk: renesas: rzg2l: Re-assert reset on deassert timeout clk: renesas: rzg2l: Simplify rzg2l_cpg_assert() and rzg2l_cpg_deassert() dt-bindings: clock: renesas,r9a09g077/87: Add Ethernet clock IDs clk: renesas: r9a09g047: Add GPT clocks and resets clk: renesas: r9a09g077: Add module clocks for SCI1-SCI5 clk: renesas: rzv2h: remove round_rate() in favor of determine_rate() clk: renesas: rzg2l: convert from round_rate() to determine_rate() clk: renesas: r9a07g04[34]: Use tabs instead of spaces clk: renesas: r9a07g043: Add MSTOP for RZ/G2UL clk: renesas: r9a07g044: Add MSTOP for RZ/G2L clk: renesas: r9a08g045: Add MSTOP for GPIO ... * clk-thead: clk: thead: th1520-ap: set all AXI clocks to CLK_IS_CRITICAL clk: thead: support changing DPU pixel clock rate clk: thead: add support for enabling/disabling PLLs clk: thead: Correct parent for DPU pixel clocks clk: thead: th1520-ap: fix parent of padctrl0 clock clk: thead: th1520-ap: describe gate clocks with clk_gate * clk-spacemit: clk: spacemit: fix i2s clock clk: spacemit: introduce pre-div for ddn clock dt-bindings: clock: spacemit: introduce i2s pre-clock to fix i2s clock clk: spacemit: ccu_pll: convert from round_rate() to determine_rate() clk: spacemit: ccu_mix: convert from round_rate() to determine_rate() clk: spacemit: ccu_ddn: convert from round_rate() to determine_rate() clk: spacemit: fix sspax_clk dt-bindings: clock: spacemit: CLK_SSPA_I2S_BCLK for SSPA
This commit is contained in:
@@ -64,12 +64,9 @@ Required properties:
|
||||
audio use case)
|
||||
"st,flexgen-video", "st,flexgen" (enable clock propagation on parent
|
||||
and activate synchronous mode)
|
||||
"st,flexgen-stih407-a0"
|
||||
"st,flexgen-stih410-a0"
|
||||
"st,flexgen-stih407-c0"
|
||||
"st,flexgen-stih410-c0"
|
||||
"st,flexgen-stih418-c0"
|
||||
"st,flexgen-stih407-d0"
|
||||
"st,flexgen-stih410-d0"
|
||||
"st,flexgen-stih407-d2"
|
||||
"st,flexgen-stih418-d2"
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/pinctrl/renesas,r9a09g077-pinctrl.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Renesas RZ/T2H and RZ/N2H Pin and GPIO controller
|
||||
|
||||
maintainers:
|
||||
- Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
|
||||
|
||||
description:
|
||||
The Renesas RZ/T2H and RZ/N2H SoCs feature a combined Pin and GPIO controller.
|
||||
Pin multiplexing and GPIO configuration are performed on a per-pin basis.
|
||||
Each port supports up to 8 pins, each configurable for either GPIO (port mode)
|
||||
or alternate function mode. Each pin supports function mode values ranging from
|
||||
0x0 to 0x2A, allowing selection from up to 43 different functions.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- renesas,r9a09g077-pinctrl # RZ/T2H
|
||||
- renesas,r9a09g087-pinctrl # RZ/N2H
|
||||
|
||||
reg:
|
||||
minItems: 1
|
||||
items:
|
||||
- description: Non-safety I/O Port base
|
||||
- description: Safety I/O Port safety region base
|
||||
- description: Safety I/O Port Non-safety region base
|
||||
|
||||
reg-names:
|
||||
minItems: 1
|
||||
items:
|
||||
- const: nsr
|
||||
- const: srs
|
||||
- const: srn
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
'#gpio-cells':
|
||||
const: 2
|
||||
description:
|
||||
The first cell contains the global GPIO port index, constructed using the
|
||||
RZT2H_GPIO() helper macro from <dt-bindings/pinctrl/renesas,r9a09g077-pinctrl.h>
|
||||
(e.g. "RZT2H_GPIO(3, 0)" for P03_0). The second cell represents the consumer
|
||||
flag. Use the macros defined in include/dt-bindings/gpio/gpio.h.
|
||||
|
||||
gpio-ranges:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
|
||||
definitions:
|
||||
renesas-rzt2h-n2h-pins-node:
|
||||
type: object
|
||||
allOf:
|
||||
- $ref: pincfg-node.yaml#
|
||||
- $ref: pinmux-node.yaml#
|
||||
properties:
|
||||
pinmux:
|
||||
description:
|
||||
Values are constructed from I/O port number, pin number, and
|
||||
alternate function configuration number using the RZT2H_PORT_PINMUX()
|
||||
helper macro from <dt-bindings/pinctrl/renesas,r9a09g077-pinctrl.h>.
|
||||
pins: true
|
||||
phandle: true
|
||||
input: true
|
||||
input-enable: true
|
||||
output-enable: true
|
||||
oneOf:
|
||||
- required: [pinmux]
|
||||
- required: [pins]
|
||||
additionalProperties: false
|
||||
|
||||
patternProperties:
|
||||
# Grouping nodes: allow multiple "-pins" subnodes within a "-group"
|
||||
'.*-group$':
|
||||
type: object
|
||||
description:
|
||||
Pin controller client devices can organize pin configuration entries into
|
||||
grouping nodes ending in "-group". These group nodes may contain multiple
|
||||
child nodes each ending in "-pins" to configure distinct sets of pins.
|
||||
additionalProperties: false
|
||||
patternProperties:
|
||||
'-pins$':
|
||||
$ref: '#/definitions/renesas-rzt2h-n2h-pins-node'
|
||||
|
||||
# Standalone "-pins" nodes under client devices or groups
|
||||
'-pins$':
|
||||
$ref: '#/definitions/renesas-rzt2h-n2h-pins-node'
|
||||
|
||||
'-hog$':
|
||||
type: object
|
||||
description: GPIO hog node
|
||||
properties:
|
||||
gpio-hog: true
|
||||
gpios: true
|
||||
input: true
|
||||
output-high: true
|
||||
output-low: true
|
||||
line-name: true
|
||||
required:
|
||||
- gpio-hog
|
||||
- gpios
|
||||
additionalProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: pinctrl.yaml#
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- reg-names
|
||||
- gpio-controller
|
||||
- '#gpio-cells'
|
||||
- gpio-ranges
|
||||
- clocks
|
||||
- power-domains
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/renesas,r9a09g077-cpg-mssr.h>
|
||||
#include <dt-bindings/pinctrl/renesas,r9a09g077-pinctrl.h>
|
||||
|
||||
pinctrl@802c0000 {
|
||||
compatible = "renesas,r9a09g077-pinctrl";
|
||||
reg = <0x802c0000 0x2000>,
|
||||
<0x812c0000 0x2000>,
|
||||
<0x802b0000 0x2000>;
|
||||
reg-names = "nsr", "srs", "srn";
|
||||
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKM>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-ranges = <&pinctrl 0 0 288>;
|
||||
power-domains = <&cpg>;
|
||||
|
||||
serial0-pins {
|
||||
pinmux = <RZT2H_PORT_PINMUX(38, 0, 1)>, /* Tx */
|
||||
<RZT2H_PORT_PINMUX(38, 1, 1)>; /* Rx */
|
||||
};
|
||||
|
||||
sd1-pwr-en-hog {
|
||||
gpio-hog;
|
||||
gpios = <RZT2H_GPIO(39, 2) 0>;
|
||||
output-high;
|
||||
line-name = "sd1_pwr_en";
|
||||
};
|
||||
|
||||
i2c0-pins {
|
||||
pins = "RIIC0_SDA", "RIIC0_SCL";
|
||||
input-enable;
|
||||
};
|
||||
|
||||
sd0-sd-group {
|
||||
ctrl-pins {
|
||||
pinmux = <RZT2H_PORT_PINMUX(12, 0, 0x29)>, /* SD0_CLK */
|
||||
<RZT2H_PORT_PINMUX(12, 1, 0x29)>; /* SD0_CMD */
|
||||
};
|
||||
|
||||
data-pins {
|
||||
pinmux = <RZT2H_PORT_PINMUX(12, 0, 0x29)>, /* SD0_CLK */
|
||||
<RZT2H_PORT_PINMUX(12, 1, 0x29)>; /* SD0_CMD */
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -364,6 +364,7 @@ config COMMON_CLK_LOCHNAGAR
|
||||
config COMMON_CLK_NPCM8XX
|
||||
tristate "Clock driver for the NPCM8XX SoC Family"
|
||||
depends on ARCH_NPCM || COMPILE_TEST
|
||||
select AUXILIARY_BUS
|
||||
help
|
||||
This driver supports the clocks on the Nuvoton BMC NPCM8XX SoC Family,
|
||||
all the clocks are initialized by the bootloader, so this driver
|
||||
|
||||
@@ -18,7 +18,6 @@ static const struct regmap_config owl_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x00cc,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static void owl_clk_set_regmap(const struct owl_clk_desc *desc,
|
||||
|
||||
@@ -540,7 +540,7 @@ static int axi_clkgen_setup_limits(struct axi_clkgen *axi_clkgen,
|
||||
default:
|
||||
return dev_err_probe(dev, -ENODEV, "Unknown speed grade %d\n",
|
||||
speed_grade);
|
||||
};
|
||||
}
|
||||
|
||||
/* Overwrite vco limits for ultrascale+ */
|
||||
if (tech == ADI_AXI_FPGA_TECH_ULTRASCALE_PLUS) {
|
||||
|
||||
@@ -529,7 +529,6 @@ static const struct regmap_config axmclk_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x1fffc,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static const struct of_device_id axmclk_match_table[] = {
|
||||
|
||||
@@ -486,9 +486,10 @@ static const struct ep93xx_gate ep93xx_uarts[] = {
|
||||
static int ep93xx_uart_clock_init(struct ep93xx_clk_priv *priv)
|
||||
{
|
||||
struct clk_parent_data parent_data = { };
|
||||
unsigned int i, idx, ret, clk_uart_div;
|
||||
unsigned int i, idx, clk_uart_div;
|
||||
struct ep93xx_clk *clk;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
regmap_read(priv->map, EP93XX_SYSCON_PWRCNT, &val);
|
||||
if (val & EP93XX_SYSCON_PWRCNT_UARTBAUD)
|
||||
|
||||
@@ -68,7 +68,6 @@ static const struct regmap_config lpc32xx_scb_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_format_endian = REGMAP_ENDIAN_LITTLE,
|
||||
.max_register = 0x114,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static struct regmap *clk_regmap;
|
||||
|
||||
@@ -33,7 +33,6 @@ static const struct regmap_config a53pll_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x40,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static struct pll_freq_tbl *qcom_a53pll_get_freq_tbl(struct device *dev)
|
||||
|
||||
@@ -50,7 +50,6 @@ static const struct regmap_config a7pll_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x1000,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static int qcom_a7pll_probe(struct platform_device *pdev)
|
||||
|
||||
@@ -169,7 +169,6 @@ static const struct regmap_config ipq_pll_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x40,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static int apss_ipq_pll_probe(struct platform_device *pdev)
|
||||
|
||||
@@ -212,7 +212,6 @@ static const struct regmap_config cbf_msm8996_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x10000,
|
||||
.fast_io = true,
|
||||
.val_format_endian = REGMAP_ENDIAN_LITTLE,
|
||||
};
|
||||
|
||||
|
||||
@@ -411,7 +411,6 @@ static const struct regmap_config cpu_msm8996_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x80210,
|
||||
.fast_io = true,
|
||||
.val_format_endian = REGMAP_ENDIAN_LITTLE,
|
||||
};
|
||||
|
||||
|
||||
@@ -99,7 +99,6 @@ static const struct regmap_config hfpll_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x30,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static int qcom_hfpll_probe(struct platform_device *pdev)
|
||||
|
||||
@@ -108,7 +108,6 @@ static const struct regmap_config ipq_cmn_pll_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x7fc,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static const struct cmn_pll_fixed_output_clk ipq5018_output_clks[] = {
|
||||
|
||||
@@ -303,6 +303,9 @@ void cpg_mstp_detach_dev(struct generic_pm_domain *unused, struct device *dev)
|
||||
pm_clk_destroy(dev);
|
||||
}
|
||||
|
||||
static struct device_node *cpg_mstp_pd_np __initdata = NULL;
|
||||
static struct generic_pm_domain *cpg_mstp_pd_genpd __initdata = NULL;
|
||||
|
||||
void __init cpg_mstp_add_clk_domain(struct device_node *np)
|
||||
{
|
||||
struct generic_pm_domain *pd;
|
||||
@@ -324,5 +327,20 @@ void __init cpg_mstp_add_clk_domain(struct device_node *np)
|
||||
pd->detach_dev = cpg_mstp_detach_dev;
|
||||
pm_genpd_init(pd, &pm_domain_always_on_gov, false);
|
||||
|
||||
of_genpd_add_provider_simple(np, pd);
|
||||
cpg_mstp_pd_np = of_node_get(np);
|
||||
cpg_mstp_pd_genpd = pd;
|
||||
}
|
||||
|
||||
static int __init cpg_mstp_pd_init_provider(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!cpg_mstp_pd_np)
|
||||
return -ENODEV;
|
||||
|
||||
error = of_genpd_add_provider_simple(cpg_mstp_pd_np, cpg_mstp_pd_genpd);
|
||||
|
||||
of_node_put(cpg_mstp_pd_np);
|
||||
return error;
|
||||
}
|
||||
postcore_initcall(cpg_mstp_pd_init_provider);
|
||||
|
||||
@@ -164,143 +164,143 @@ static const struct cpg_core_clk r9a07g043_core_clks[] __initconst = {
|
||||
static const struct rzg2l_mod_clk r9a07g043_mod_clks[] = {
|
||||
#ifdef CONFIG_ARM64
|
||||
DEF_MOD("gic", R9A07G043_GIC600_GICCLK, R9A07G043_CLK_P1,
|
||||
0x514, 0, 0),
|
||||
0x514, 0, MSTOP(BUS_REG1, BIT(7))),
|
||||
DEF_MOD("ia55_pclk", R9A07G043_IA55_PCLK, R9A07G043_CLK_P2,
|
||||
0x518, 0, 0),
|
||||
0x518, 0, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
DEF_MOD("ia55_clk", R9A07G043_IA55_CLK, R9A07G043_CLK_P1,
|
||||
0x518, 1, 0),
|
||||
0x518, 1, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
#endif
|
||||
#ifdef CONFIG_RISCV
|
||||
DEF_MOD("iax45_pclk", R9A07G043_IAX45_PCLK, R9A07G043_CLK_P2,
|
||||
0x518, 0, 0),
|
||||
0x518, 0, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
DEF_MOD("iax45_clk", R9A07G043_IAX45_CLK, R9A07G043_CLK_P1,
|
||||
0x518, 1, 0),
|
||||
0x518, 1, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
#endif
|
||||
DEF_MOD("dmac_aclk", R9A07G043_DMAC_ACLK, R9A07G043_CLK_P1,
|
||||
0x52c, 0, 0),
|
||||
0x52c, 0, MSTOP(BUS_REG1, BIT(2))),
|
||||
DEF_MOD("dmac_pclk", R9A07G043_DMAC_PCLK, CLK_P1_DIV2,
|
||||
0x52c, 1, 0),
|
||||
0x52c, 1, MSTOP(BUS_REG1, BIT(3))),
|
||||
DEF_MOD("ostm0_pclk", R9A07G043_OSTM0_PCLK, R9A07G043_CLK_P0,
|
||||
0x534, 0, 0),
|
||||
0x534, 0, MSTOP(BUS_REG0, BIT(4))),
|
||||
DEF_MOD("ostm1_pclk", R9A07G043_OSTM1_PCLK, R9A07G043_CLK_P0,
|
||||
0x534, 1, 0),
|
||||
0x534, 1, MSTOP(BUS_REG0, BIT(5))),
|
||||
DEF_MOD("ostm2_pclk", R9A07G043_OSTM2_PCLK, R9A07G043_CLK_P0,
|
||||
0x534, 2, 0),
|
||||
0x534, 2, MSTOP(BUS_REG0, BIT(6))),
|
||||
DEF_MOD("mtu_x_mck", R9A07G043_MTU_X_MCK_MTU3, R9A07G043_CLK_P0,
|
||||
0x538, 0, 0),
|
||||
0x538, 0, MSTOP(BUS_MCPU1, BIT(2))),
|
||||
DEF_MOD("wdt0_pclk", R9A07G043_WDT0_PCLK, R9A07G043_CLK_P0,
|
||||
0x548, 0, 0),
|
||||
0x548, 0, MSTOP(BUS_REG0, BIT(2))),
|
||||
DEF_MOD("wdt0_clk", R9A07G043_WDT0_CLK, R9A07G043_OSCCLK,
|
||||
0x548, 1, 0),
|
||||
0x548, 1, MSTOP(BUS_REG0, BIT(2))),
|
||||
DEF_MOD("spi_clk2", R9A07G043_SPI_CLK2, R9A07G043_CLK_SPI1,
|
||||
0x550, 0, 0),
|
||||
0x550, 0, MSTOP(BUS_MCPU1, BIT(1))),
|
||||
DEF_MOD("spi_clk", R9A07G043_SPI_CLK, R9A07G043_CLK_SPI0,
|
||||
0x550, 1, 0),
|
||||
0x550, 1, MSTOP(BUS_MCPU1, BIT(1))),
|
||||
DEF_MOD("sdhi0_imclk", R9A07G043_SDHI0_IMCLK, CLK_SD0_DIV4,
|
||||
0x554, 0, 0),
|
||||
0x554, 0, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_imclk2", R9A07G043_SDHI0_IMCLK2, CLK_SD0_DIV4,
|
||||
0x554, 1, 0),
|
||||
0x554, 1, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_clk_hs", R9A07G043_SDHI0_CLK_HS, R9A07G043_CLK_SD0,
|
||||
0x554, 2, 0),
|
||||
0x554, 2, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_aclk", R9A07G043_SDHI0_ACLK, R9A07G043_CLK_P1,
|
||||
0x554, 3, 0),
|
||||
0x554, 3, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi1_imclk", R9A07G043_SDHI1_IMCLK, CLK_SD1_DIV4,
|
||||
0x554, 4, 0),
|
||||
0x554, 4, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_imclk2", R9A07G043_SDHI1_IMCLK2, CLK_SD1_DIV4,
|
||||
0x554, 5, 0),
|
||||
0x554, 5, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_clk_hs", R9A07G043_SDHI1_CLK_HS, R9A07G043_CLK_SD1,
|
||||
0x554, 6, 0),
|
||||
0x554, 6, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_aclk", R9A07G043_SDHI1_ACLK, R9A07G043_CLK_P1,
|
||||
0x554, 7, 0),
|
||||
0x554, 7, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
#ifdef CONFIG_ARM64
|
||||
DEF_MOD("cru_sysclk", R9A07G043_CRU_SYSCLK, CLK_M2_DIV2,
|
||||
0x564, 0, 0),
|
||||
DEF_MOD("cru_vclk", R9A07G043_CRU_VCLK, R9A07G043_CLK_M2,
|
||||
0x564, 1, 0),
|
||||
DEF_MOD("cru_pclk", R9A07G043_CRU_PCLK, R9A07G043_CLK_ZT,
|
||||
0x564, 2, 0),
|
||||
DEF_MOD("cru_aclk", R9A07G043_CRU_ACLK, R9A07G043_CLK_M0,
|
||||
0x564, 3, 0),
|
||||
DEF_MOD("cru_sysclk", R9A07G043_CRU_SYSCLK, CLK_M2_DIV2,
|
||||
0x564, 0, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_vclk", R9A07G043_CRU_VCLK, R9A07G043_CLK_M2,
|
||||
0x564, 1, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_pclk", R9A07G043_CRU_PCLK, R9A07G043_CLK_ZT,
|
||||
0x564, 2, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_aclk", R9A07G043_CRU_ACLK, R9A07G043_CLK_M0,
|
||||
0x564, 3, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_COUPLED("lcdc_clk_a", R9A07G043_LCDC_CLK_A, R9A07G043_CLK_M0,
|
||||
0x56c, 0, 0),
|
||||
0x56c, 0, MSTOP(BUS_PERI_VIDEO, GENMASK(8, 7))),
|
||||
DEF_COUPLED("lcdc_clk_p", R9A07G043_LCDC_CLK_P, R9A07G043_CLK_ZT,
|
||||
0x56c, 0, 0),
|
||||
0x56c, 0, MSTOP(BUS_PERI_VIDEO, GENMASK(8, 7))),
|
||||
DEF_MOD("lcdc_clk_d", R9A07G043_LCDC_CLK_D, R9A07G043_CLK_M3,
|
||||
0x56c, 1, 0),
|
||||
0x56c, 1, MSTOP(BUS_PERI_VIDEO, BIT(9))),
|
||||
#endif
|
||||
DEF_MOD("ssi0_pclk", R9A07G043_SSI0_PCLK2, R9A07G043_CLK_P0,
|
||||
0x570, 0, 0),
|
||||
0x570, 0, MSTOP(BUS_MCPU1, BIT(10))),
|
||||
DEF_MOD("ssi0_sfr", R9A07G043_SSI0_PCLK_SFR, R9A07G043_CLK_P0,
|
||||
0x570, 1, 0),
|
||||
0x570, 1, MSTOP(BUS_MCPU1, BIT(10))),
|
||||
DEF_MOD("ssi1_pclk", R9A07G043_SSI1_PCLK2, R9A07G043_CLK_P0,
|
||||
0x570, 2, 0),
|
||||
0x570, 2, MSTOP(BUS_MCPU1, BIT(11))),
|
||||
DEF_MOD("ssi1_sfr", R9A07G043_SSI1_PCLK_SFR, R9A07G043_CLK_P0,
|
||||
0x570, 3, 0),
|
||||
0x570, 3, MSTOP(BUS_MCPU1, BIT(11))),
|
||||
DEF_MOD("ssi2_pclk", R9A07G043_SSI2_PCLK2, R9A07G043_CLK_P0,
|
||||
0x570, 4, 0),
|
||||
0x570, 4, MSTOP(BUS_MCPU1, BIT(12))),
|
||||
DEF_MOD("ssi2_sfr", R9A07G043_SSI2_PCLK_SFR, R9A07G043_CLK_P0,
|
||||
0x570, 5, 0),
|
||||
0x570, 5, MSTOP(BUS_MCPU1, BIT(12))),
|
||||
DEF_MOD("ssi3_pclk", R9A07G043_SSI3_PCLK2, R9A07G043_CLK_P0,
|
||||
0x570, 6, 0),
|
||||
0x570, 6, MSTOP(BUS_MCPU1, BIT(13))),
|
||||
DEF_MOD("ssi3_sfr", R9A07G043_SSI3_PCLK_SFR, R9A07G043_CLK_P0,
|
||||
0x570, 7, 0),
|
||||
0x570, 7, MSTOP(BUS_MCPU1, BIT(13))),
|
||||
DEF_MOD("usb0_host", R9A07G043_USB_U2H0_HCLK, R9A07G043_CLK_P1,
|
||||
0x578, 0, 0),
|
||||
0x578, 0, MSTOP(BUS_PERI_COM, BIT(5))),
|
||||
DEF_MOD("usb1_host", R9A07G043_USB_U2H1_HCLK, R9A07G043_CLK_P1,
|
||||
0x578, 1, 0),
|
||||
0x578, 1, MSTOP(BUS_PERI_COM, BIT(7))),
|
||||
DEF_MOD("usb0_func", R9A07G043_USB_U2P_EXR_CPUCLK, R9A07G043_CLK_P1,
|
||||
0x578, 2, 0),
|
||||
0x578, 2, MSTOP(BUS_PERI_COM, BIT(6))),
|
||||
DEF_MOD("usb_pclk", R9A07G043_USB_PCLK, R9A07G043_CLK_P1,
|
||||
0x578, 3, 0),
|
||||
0x578, 3, MSTOP(BUS_PERI_COM, BIT(4))),
|
||||
DEF_COUPLED("eth0_axi", R9A07G043_ETH0_CLK_AXI, R9A07G043_CLK_M0,
|
||||
0x57c, 0, 0),
|
||||
0x57c, 0, MSTOP(BUS_PERI_COM, BIT(2))),
|
||||
DEF_COUPLED("eth0_chi", R9A07G043_ETH0_CLK_CHI, R9A07G043_CLK_ZT,
|
||||
0x57c, 0, 0),
|
||||
0x57c, 0, MSTOP(BUS_PERI_COM, BIT(2))),
|
||||
DEF_COUPLED("eth1_axi", R9A07G043_ETH1_CLK_AXI, R9A07G043_CLK_M0,
|
||||
0x57c, 1, 0),
|
||||
0x57c, 1, MSTOP(BUS_PERI_COM, BIT(3))),
|
||||
DEF_COUPLED("eth1_chi", R9A07G043_ETH1_CLK_CHI, R9A07G043_CLK_ZT,
|
||||
0x57c, 1, 0),
|
||||
0x57c, 1, MSTOP(BUS_PERI_COM, BIT(3))),
|
||||
DEF_MOD("i2c0", R9A07G043_I2C0_PCLK, R9A07G043_CLK_P0,
|
||||
0x580, 0, 0),
|
||||
0x580, 0, MSTOP(BUS_MCPU2, BIT(10))),
|
||||
DEF_MOD("i2c1", R9A07G043_I2C1_PCLK, R9A07G043_CLK_P0,
|
||||
0x580, 1, 0),
|
||||
0x580, 1, MSTOP(BUS_MCPU2, BIT(11))),
|
||||
DEF_MOD("i2c2", R9A07G043_I2C2_PCLK, R9A07G043_CLK_P0,
|
||||
0x580, 2, 0),
|
||||
0x580, 2, MSTOP(BUS_MCPU2, BIT(12))),
|
||||
DEF_MOD("i2c3", R9A07G043_I2C3_PCLK, R9A07G043_CLK_P0,
|
||||
0x580, 3, 0),
|
||||
0x580, 3, MSTOP(BUS_MCPU2, BIT(13))),
|
||||
DEF_MOD("scif0", R9A07G043_SCIF0_CLK_PCK, R9A07G043_CLK_P0,
|
||||
0x584, 0, 0),
|
||||
0x584, 0, MSTOP(BUS_MCPU2, BIT(1))),
|
||||
DEF_MOD("scif1", R9A07G043_SCIF1_CLK_PCK, R9A07G043_CLK_P0,
|
||||
0x584, 1, 0),
|
||||
0x584, 1, MSTOP(BUS_MCPU2, BIT(2))),
|
||||
DEF_MOD("scif2", R9A07G043_SCIF2_CLK_PCK, R9A07G043_CLK_P0,
|
||||
0x584, 2, 0),
|
||||
0x584, 2, MSTOP(BUS_MCPU2, BIT(3))),
|
||||
DEF_MOD("scif3", R9A07G043_SCIF3_CLK_PCK, R9A07G043_CLK_P0,
|
||||
0x584, 3, 0),
|
||||
0x584, 3, MSTOP(BUS_MCPU2, BIT(4))),
|
||||
DEF_MOD("scif4", R9A07G043_SCIF4_CLK_PCK, R9A07G043_CLK_P0,
|
||||
0x584, 4, 0),
|
||||
0x584, 4, MSTOP(BUS_MCPU2, BIT(5))),
|
||||
DEF_MOD("sci0", R9A07G043_SCI0_CLKP, R9A07G043_CLK_P0,
|
||||
0x588, 0, 0),
|
||||
0x588, 0, MSTOP(BUS_MCPU2, BIT(7))),
|
||||
DEF_MOD("sci1", R9A07G043_SCI1_CLKP, R9A07G043_CLK_P0,
|
||||
0x588, 1, 0),
|
||||
0x588, 1, MSTOP(BUS_MCPU2, BIT(8))),
|
||||
DEF_MOD("rspi0", R9A07G043_RSPI0_CLKB, R9A07G043_CLK_P0,
|
||||
0x590, 0, 0),
|
||||
0x590, 0, MSTOP(BUS_MCPU1, BIT(14))),
|
||||
DEF_MOD("rspi1", R9A07G043_RSPI1_CLKB, R9A07G043_CLK_P0,
|
||||
0x590, 1, 0),
|
||||
0x590, 1, MSTOP(BUS_MCPU1, BIT(15))),
|
||||
DEF_MOD("rspi2", R9A07G043_RSPI2_CLKB, R9A07G043_CLK_P0,
|
||||
0x590, 2, 0),
|
||||
0x590, 2, MSTOP(BUS_MCPU2, BIT(0))),
|
||||
DEF_MOD("canfd", R9A07G043_CANFD_PCLK, R9A07G043_CLK_P0,
|
||||
0x594, 0, 0),
|
||||
0x594, 0, MSTOP(BUS_MCPU2, BIT(9))),
|
||||
DEF_MOD("gpio", R9A07G043_GPIO_HCLK, R9A07G043_OSCCLK,
|
||||
0x598, 0, 0),
|
||||
0x598, 0, MSTOP(BUS_PERI_CPU, BIT(6))),
|
||||
DEF_MOD("adc_adclk", R9A07G043_ADC_ADCLK, R9A07G043_CLK_TSU,
|
||||
0x5a8, 0, 0),
|
||||
0x5a8, 0, MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("adc_pclk", R9A07G043_ADC_PCLK, R9A07G043_CLK_P0,
|
||||
0x5a8, 1, 0),
|
||||
0x5a8, 1, MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("tsu_pclk", R9A07G043_TSU_PCLK, R9A07G043_CLK_TSU,
|
||||
0x5ac, 0, 0),
|
||||
0x5ac, 0, MSTOP(BUS_MCPU2, BIT(15))),
|
||||
#ifdef CONFIG_RISCV
|
||||
DEF_MOD("nceplic_aclk", R9A07G043_NCEPLIC_ACLK, R9A07G043_CLK_P1,
|
||||
0x608, 0, 0),
|
||||
0x608, 0, MSTOP(BUS_REG1, BIT(7))),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -242,163 +242,163 @@ static const struct {
|
||||
} mod_clks = {
|
||||
.common = {
|
||||
DEF_MOD("gic", R9A07G044_GIC600_GICCLK, R9A07G044_CLK_P1,
|
||||
0x514, 0, 0),
|
||||
0x514, 0, MSTOP(BUS_REG1, BIT(7))),
|
||||
DEF_MOD("ia55_pclk", R9A07G044_IA55_PCLK, R9A07G044_CLK_P2,
|
||||
0x518, 0, 0),
|
||||
0x518, 0, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
DEF_MOD("ia55_clk", R9A07G044_IA55_CLK, R9A07G044_CLK_P1,
|
||||
0x518, 1, 0),
|
||||
0x518, 1, MSTOP(BUS_PERI_CPU, BIT(13))),
|
||||
DEF_MOD("dmac_aclk", R9A07G044_DMAC_ACLK, R9A07G044_CLK_P1,
|
||||
0x52c, 0, 0),
|
||||
0x52c, 0, MSTOP(BUS_REG1, BIT(2))),
|
||||
DEF_MOD("dmac_pclk", R9A07G044_DMAC_PCLK, CLK_P1_DIV2,
|
||||
0x52c, 1, 0),
|
||||
0x52c, 1, MSTOP(BUS_REG1, BIT(3))),
|
||||
DEF_MOD("ostm0_pclk", R9A07G044_OSTM0_PCLK, R9A07G044_CLK_P0,
|
||||
0x534, 0, 0),
|
||||
0x534, 0, MSTOP(BUS_REG0, BIT(4))),
|
||||
DEF_MOD("ostm1_pclk", R9A07G044_OSTM1_PCLK, R9A07G044_CLK_P0,
|
||||
0x534, 1, 0),
|
||||
0x534, 1, MSTOP(BUS_REG0, BIT(5))),
|
||||
DEF_MOD("ostm2_pclk", R9A07G044_OSTM2_PCLK, R9A07G044_CLK_P0,
|
||||
0x534, 2, 0),
|
||||
0x534, 2, MSTOP(BUS_REG0, BIT(6))),
|
||||
DEF_MOD("mtu_x_mck", R9A07G044_MTU_X_MCK_MTU3, R9A07G044_CLK_P0,
|
||||
0x538, 0, 0),
|
||||
0x538, 0, MSTOP(BUS_MCPU1, BIT(2))),
|
||||
DEF_MOD("gpt_pclk", R9A07G044_GPT_PCLK, R9A07G044_CLK_P0,
|
||||
0x540, 0, 0),
|
||||
0x540, 0, MSTOP(BUS_MCPU1, BIT(4))),
|
||||
DEF_MOD("poeg_a_clkp", R9A07G044_POEG_A_CLKP, R9A07G044_CLK_P0,
|
||||
0x544, 0, 0),
|
||||
0x544, 0, MSTOP(BUS_MCPU1, BIT(5))),
|
||||
DEF_MOD("poeg_b_clkp", R9A07G044_POEG_B_CLKP, R9A07G044_CLK_P0,
|
||||
0x544, 1, 0),
|
||||
0x544, 1, MSTOP(BUS_MCPU1, BIT(6))),
|
||||
DEF_MOD("poeg_c_clkp", R9A07G044_POEG_C_CLKP, R9A07G044_CLK_P0,
|
||||
0x544, 2, 0),
|
||||
0x544, 2, MSTOP(BUS_MCPU1, BIT(7))),
|
||||
DEF_MOD("poeg_d_clkp", R9A07G044_POEG_D_CLKP, R9A07G044_CLK_P0,
|
||||
0x544, 3, 0),
|
||||
0x544, 3, MSTOP(BUS_MCPU1, BIT(8))),
|
||||
DEF_MOD("wdt0_pclk", R9A07G044_WDT0_PCLK, R9A07G044_CLK_P0,
|
||||
0x548, 0, 0),
|
||||
0x548, 0, MSTOP(BUS_REG0, BIT(2))),
|
||||
DEF_MOD("wdt0_clk", R9A07G044_WDT0_CLK, R9A07G044_OSCCLK,
|
||||
0x548, 1, 0),
|
||||
0x548, 1, MSTOP(BUS_REG0, BIT(2))),
|
||||
DEF_MOD("wdt1_pclk", R9A07G044_WDT1_PCLK, R9A07G044_CLK_P0,
|
||||
0x548, 2, 0),
|
||||
0x548, 2, MSTOP(BUS_REG0, BIT(3))),
|
||||
DEF_MOD("wdt1_clk", R9A07G044_WDT1_CLK, R9A07G044_OSCCLK,
|
||||
0x548, 3, 0),
|
||||
0x548, 3, MSTOP(BUS_REG0, BIT(3))),
|
||||
DEF_MOD("spi_clk2", R9A07G044_SPI_CLK2, R9A07G044_CLK_SPI1,
|
||||
0x550, 0, 0),
|
||||
0x550, 0, MSTOP(BUS_MCPU1, BIT(1))),
|
||||
DEF_MOD("spi_clk", R9A07G044_SPI_CLK, R9A07G044_CLK_SPI0,
|
||||
0x550, 1, 0),
|
||||
0x550, 1, MSTOP(BUS_MCPU1, BIT(1))),
|
||||
DEF_MOD("sdhi0_imclk", R9A07G044_SDHI0_IMCLK, CLK_SD0_DIV4,
|
||||
0x554, 0, 0),
|
||||
0x554, 0, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_imclk2", R9A07G044_SDHI0_IMCLK2, CLK_SD0_DIV4,
|
||||
0x554, 1, 0),
|
||||
0x554, 1, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_clk_hs", R9A07G044_SDHI0_CLK_HS, R9A07G044_CLK_SD0,
|
||||
0x554, 2, 0),
|
||||
0x554, 2, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi0_aclk", R9A07G044_SDHI0_ACLK, R9A07G044_CLK_P1,
|
||||
0x554, 3, 0),
|
||||
0x554, 3, MSTOP(BUS_PERI_COM, BIT(0))),
|
||||
DEF_MOD("sdhi1_imclk", R9A07G044_SDHI1_IMCLK, CLK_SD1_DIV4,
|
||||
0x554, 4, 0),
|
||||
0x554, 4, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_imclk2", R9A07G044_SDHI1_IMCLK2, CLK_SD1_DIV4,
|
||||
0x554, 5, 0),
|
||||
0x554, 5, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_clk_hs", R9A07G044_SDHI1_CLK_HS, R9A07G044_CLK_SD1,
|
||||
0x554, 6, 0),
|
||||
0x554, 6, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("sdhi1_aclk", R9A07G044_SDHI1_ACLK, R9A07G044_CLK_P1,
|
||||
0x554, 7, 0),
|
||||
0x554, 7, MSTOP(BUS_PERI_COM, BIT(1))),
|
||||
DEF_MOD("gpu_clk", R9A07G044_GPU_CLK, R9A07G044_CLK_G,
|
||||
0x558, 0, 0),
|
||||
0x558, 0, MSTOP(BUS_REG1, BIT(4))),
|
||||
DEF_MOD("gpu_axi_clk", R9A07G044_GPU_AXI_CLK, R9A07G044_CLK_P1,
|
||||
0x558, 1, 0),
|
||||
DEF_MOD("gpu_ace_clk", R9A07G044_GPU_ACE_CLK, R9A07G044_CLK_P1,
|
||||
0x558, 2, 0),
|
||||
DEF_MOD("cru_sysclk", R9A07G044_CRU_SYSCLK, CLK_M2_DIV2,
|
||||
0x564, 0, 0),
|
||||
DEF_MOD("cru_vclk", R9A07G044_CRU_VCLK, R9A07G044_CLK_M2,
|
||||
0x564, 1, 0),
|
||||
DEF_MOD("cru_pclk", R9A07G044_CRU_PCLK, R9A07G044_CLK_ZT,
|
||||
0x564, 2, 0),
|
||||
DEF_MOD("cru_aclk", R9A07G044_CRU_ACLK, R9A07G044_CLK_M0,
|
||||
0x564, 3, 0),
|
||||
DEF_MOD("cru_sysclk", R9A07G044_CRU_SYSCLK, CLK_M2_DIV2,
|
||||
0x564, 0, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_vclk", R9A07G044_CRU_VCLK, R9A07G044_CLK_M2,
|
||||
0x564, 1, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_pclk", R9A07G044_CRU_PCLK, R9A07G044_CLK_ZT,
|
||||
0x564, 2, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("cru_aclk", R9A07G044_CRU_ACLK, R9A07G044_CLK_M0,
|
||||
0x564, 3, MSTOP(BUS_PERI_VIDEO, BIT(3))),
|
||||
DEF_MOD("dsi_pll_clk", R9A07G044_MIPI_DSI_PLLCLK, R9A07G044_CLK_M1,
|
||||
0x568, 0, 0),
|
||||
0x568, 0, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_MOD("dsi_sys_clk", R9A07G044_MIPI_DSI_SYSCLK, CLK_M2_DIV2,
|
||||
0x568, 1, 0),
|
||||
0x568, 1, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_MOD("dsi_aclk", R9A07G044_MIPI_DSI_ACLK, R9A07G044_CLK_P1,
|
||||
0x568, 2, 0),
|
||||
0x568, 2, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_MOD("dsi_pclk", R9A07G044_MIPI_DSI_PCLK, R9A07G044_CLK_P2,
|
||||
0x568, 3, 0),
|
||||
0x568, 3, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_MOD("dsi_vclk", R9A07G044_MIPI_DSI_VCLK, R9A07G044_CLK_M3,
|
||||
0x568, 4, 0),
|
||||
0x568, 4, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_MOD("dsi_lpclk", R9A07G044_MIPI_DSI_LPCLK, R9A07G044_CLK_M4,
|
||||
0x568, 5, 0),
|
||||
0x568, 5, MSTOP(BUS_PERI_VIDEO, GENMASK(6, 5))),
|
||||
DEF_COUPLED("lcdc_a", R9A07G044_LCDC_CLK_A, R9A07G044_CLK_M0,
|
||||
0x56c, 0, 0),
|
||||
0x56c, 0, MSTOP(BUS_PERI_VIDEO, GENMASK(8, 7))),
|
||||
DEF_COUPLED("lcdc_p", R9A07G044_LCDC_CLK_P, R9A07G044_CLK_ZT,
|
||||
0x56c, 0, 0),
|
||||
0x56c, 0, MSTOP(BUS_PERI_VIDEO, GENMASK(8, 7))),
|
||||
DEF_MOD("lcdc_clk_d", R9A07G044_LCDC_CLK_D, R9A07G044_CLK_M3,
|
||||
0x56c, 1, 0),
|
||||
0x56c, 1, MSTOP(BUS_PERI_VIDEO, BIT(9))),
|
||||
DEF_MOD("ssi0_pclk", R9A07G044_SSI0_PCLK2, R9A07G044_CLK_P0,
|
||||
0x570, 0, 0),
|
||||
0x570, 0, MSTOP(BUS_MCPU1, BIT(10))),
|
||||
DEF_MOD("ssi0_sfr", R9A07G044_SSI0_PCLK_SFR, R9A07G044_CLK_P0,
|
||||
0x570, 1, 0),
|
||||
0x570, 1, MSTOP(BUS_MCPU1, BIT(10))),
|
||||
DEF_MOD("ssi1_pclk", R9A07G044_SSI1_PCLK2, R9A07G044_CLK_P0,
|
||||
0x570, 2, 0),
|
||||
0x570, 2, MSTOP(BUS_MCPU1, BIT(11))),
|
||||
DEF_MOD("ssi1_sfr", R9A07G044_SSI1_PCLK_SFR, R9A07G044_CLK_P0,
|
||||
0x570, 3, 0),
|
||||
0x570, 3, MSTOP(BUS_MCPU1, BIT(11))),
|
||||
DEF_MOD("ssi2_pclk", R9A07G044_SSI2_PCLK2, R9A07G044_CLK_P0,
|
||||
0x570, 4, 0),
|
||||
0x570, 4, MSTOP(BUS_MCPU1, BIT(12))),
|
||||
DEF_MOD("ssi2_sfr", R9A07G044_SSI2_PCLK_SFR, R9A07G044_CLK_P0,
|
||||
0x570, 5, 0),
|
||||
0x570, 5, MSTOP(BUS_MCPU1, BIT(12))),
|
||||
DEF_MOD("ssi3_pclk", R9A07G044_SSI3_PCLK2, R9A07G044_CLK_P0,
|
||||
0x570, 6, 0),
|
||||
0x570, 6, MSTOP(BUS_MCPU1, BIT(13))),
|
||||
DEF_MOD("ssi3_sfr", R9A07G044_SSI3_PCLK_SFR, R9A07G044_CLK_P0,
|
||||
0x570, 7, 0),
|
||||
0x570, 7, MSTOP(BUS_MCPU1, BIT(13))),
|
||||
DEF_MOD("usb0_host", R9A07G044_USB_U2H0_HCLK, R9A07G044_CLK_P1,
|
||||
0x578, 0, 0),
|
||||
0x578, 0, MSTOP(BUS_PERI_COM, BIT(5))),
|
||||
DEF_MOD("usb1_host", R9A07G044_USB_U2H1_HCLK, R9A07G044_CLK_P1,
|
||||
0x578, 1, 0),
|
||||
0x578, 1, MSTOP(BUS_PERI_COM, BIT(7))),
|
||||
DEF_MOD("usb0_func", R9A07G044_USB_U2P_EXR_CPUCLK, R9A07G044_CLK_P1,
|
||||
0x578, 2, 0),
|
||||
0x578, 2, MSTOP(BUS_PERI_COM, BIT(6))),
|
||||
DEF_MOD("usb_pclk", R9A07G044_USB_PCLK, R9A07G044_CLK_P1,
|
||||
0x578, 3, 0),
|
||||
0x578, 3, MSTOP(BUS_PERI_COM, BIT(4))),
|
||||
DEF_COUPLED("eth0_axi", R9A07G044_ETH0_CLK_AXI, R9A07G044_CLK_M0,
|
||||
0x57c, 0, 0),
|
||||
0x57c, 0, MSTOP(BUS_PERI_COM, BIT(2))),
|
||||
DEF_COUPLED("eth0_chi", R9A07G044_ETH0_CLK_CHI, R9A07G044_CLK_ZT,
|
||||
0x57c, 0, 0),
|
||||
0x57c, 0, MSTOP(BUS_PERI_COM, BIT(2))),
|
||||
DEF_COUPLED("eth1_axi", R9A07G044_ETH1_CLK_AXI, R9A07G044_CLK_M0,
|
||||
0x57c, 1, 0),
|
||||
0x57c, 1, MSTOP(BUS_PERI_COM, BIT(3))),
|
||||
DEF_COUPLED("eth1_chi", R9A07G044_ETH1_CLK_CHI, R9A07G044_CLK_ZT,
|
||||
0x57c, 1, 0),
|
||||
0x57c, 1, MSTOP(BUS_PERI_COM, BIT(3))),
|
||||
DEF_MOD("i2c0", R9A07G044_I2C0_PCLK, R9A07G044_CLK_P0,
|
||||
0x580, 0, 0),
|
||||
0x580, 0, MSTOP(BUS_MCPU2, BIT(10))),
|
||||
DEF_MOD("i2c1", R9A07G044_I2C1_PCLK, R9A07G044_CLK_P0,
|
||||
0x580, 1, 0),
|
||||
0x580, 1, MSTOP(BUS_MCPU2, BIT(11))),
|
||||
DEF_MOD("i2c2", R9A07G044_I2C2_PCLK, R9A07G044_CLK_P0,
|
||||
0x580, 2, 0),
|
||||
0x580, 2, MSTOP(BUS_MCPU2, BIT(12))),
|
||||
DEF_MOD("i2c3", R9A07G044_I2C3_PCLK, R9A07G044_CLK_P0,
|
||||
0x580, 3, 0),
|
||||
0x580, 3, MSTOP(BUS_MCPU2, BIT(13))),
|
||||
DEF_MOD("scif0", R9A07G044_SCIF0_CLK_PCK, R9A07G044_CLK_P0,
|
||||
0x584, 0, 0),
|
||||
0x584, 0, MSTOP(BUS_MCPU2, BIT(1))),
|
||||
DEF_MOD("scif1", R9A07G044_SCIF1_CLK_PCK, R9A07G044_CLK_P0,
|
||||
0x584, 1, 0),
|
||||
0x584, 1, MSTOP(BUS_MCPU2, BIT(2))),
|
||||
DEF_MOD("scif2", R9A07G044_SCIF2_CLK_PCK, R9A07G044_CLK_P0,
|
||||
0x584, 2, 0),
|
||||
0x584, 2, MSTOP(BUS_MCPU2, BIT(3))),
|
||||
DEF_MOD("scif3", R9A07G044_SCIF3_CLK_PCK, R9A07G044_CLK_P0,
|
||||
0x584, 3, 0),
|
||||
0x584, 3, MSTOP(BUS_MCPU2, BIT(4))),
|
||||
DEF_MOD("scif4", R9A07G044_SCIF4_CLK_PCK, R9A07G044_CLK_P0,
|
||||
0x584, 4, 0),
|
||||
0x584, 4, MSTOP(BUS_MCPU2, BIT(5))),
|
||||
DEF_MOD("sci0", R9A07G044_SCI0_CLKP, R9A07G044_CLK_P0,
|
||||
0x588, 0, 0),
|
||||
0x588, 0, MSTOP(BUS_MCPU2, BIT(7))),
|
||||
DEF_MOD("sci1", R9A07G044_SCI1_CLKP, R9A07G044_CLK_P0,
|
||||
0x588, 1, 0),
|
||||
0x588, 1, MSTOP(BUS_MCPU2, BIT(8))),
|
||||
DEF_MOD("rspi0", R9A07G044_RSPI0_CLKB, R9A07G044_CLK_P0,
|
||||
0x590, 0, 0),
|
||||
0x590, 0, MSTOP(BUS_MCPU1, BIT(14))),
|
||||
DEF_MOD("rspi1", R9A07G044_RSPI1_CLKB, R9A07G044_CLK_P0,
|
||||
0x590, 1, 0),
|
||||
0x590, 1, MSTOP(BUS_MCPU1, BIT(15))),
|
||||
DEF_MOD("rspi2", R9A07G044_RSPI2_CLKB, R9A07G044_CLK_P0,
|
||||
0x590, 2, 0),
|
||||
0x590, 2, MSTOP(BUS_MCPU2, BIT(0))),
|
||||
DEF_MOD("canfd", R9A07G044_CANFD_PCLK, R9A07G044_CLK_P0,
|
||||
0x594, 0, 0),
|
||||
0x594, 0, MSTOP(BUS_MCPU2, BIT(9))),
|
||||
DEF_MOD("gpio", R9A07G044_GPIO_HCLK, R9A07G044_OSCCLK,
|
||||
0x598, 0, 0),
|
||||
0x598, 0, MSTOP(BUS_PERI_CPU, BIT(6))),
|
||||
DEF_MOD("adc_adclk", R9A07G044_ADC_ADCLK, R9A07G044_CLK_TSU,
|
||||
0x5a8, 0, 0),
|
||||
0x5a8, 0, MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("adc_pclk", R9A07G044_ADC_PCLK, R9A07G044_CLK_P0,
|
||||
0x5a8, 1, 0),
|
||||
0x5a8, 1, MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("tsu_pclk", R9A07G044_TSU_PCLK, R9A07G044_CLK_TSU,
|
||||
0x5ac, 0, 0),
|
||||
0x5ac, 0, MSTOP(BUS_MCPU2, BIT(15))),
|
||||
},
|
||||
#ifdef CONFIG_CLK_R9A07G054
|
||||
.drp = {
|
||||
|
||||
@@ -183,6 +183,7 @@ static const struct cpg_core_clk r9a08g045_core_clks[] __initconst = {
|
||||
DEF_G3S_DIV("P3", R9A08G045_CLK_P3, CLK_PLL3_DIV2_4, DIVPL3C, G3S_DIVPL3C_STS,
|
||||
dtable_1_32, 0, 0, 0, NULL),
|
||||
DEF_FIXED("P3_DIV2", CLK_P3_DIV2, R9A08G045_CLK_P3, 1, 2),
|
||||
DEF_FIXED("P5", R9A08G045_CLK_P5, CLK_PLL2_DIV2, 1, 4),
|
||||
DEF_FIXED("ZT", R9A08G045_CLK_ZT, CLK_PLL3_DIV2_8, 1, 1),
|
||||
DEF_FIXED("S0", R9A08G045_CLK_S0, CLK_SEL_PLL4, 1, 2),
|
||||
DEF_FIXED("OSC", R9A08G045_OSCCLK, CLK_EXTAL, 1, 1),
|
||||
@@ -284,13 +285,22 @@ static const struct rzg2l_mod_clk r9a08g045_mod_clks[] = {
|
||||
MSTOP(BUS_MCPU2, BIT(5))),
|
||||
DEF_MOD("scif5_clk_pck", R9A08G045_SCIF5_CLK_PCK, R9A08G045_CLK_P0, 0x584, 5,
|
||||
MSTOP(BUS_MCPU3, BIT(4))),
|
||||
DEF_MOD("gpio_hclk", R9A08G045_GPIO_HCLK, R9A08G045_OSCCLK, 0x598, 0, 0),
|
||||
DEF_MOD("gpio_hclk", R9A08G045_GPIO_HCLK, R9A08G045_OSCCLK, 0x598, 0,
|
||||
MSTOP(BUS_PERI_CPU, BIT(6))),
|
||||
DEF_MOD("adc_adclk", R9A08G045_ADC_ADCLK, R9A08G045_CLK_TSU, 0x5a8, 0,
|
||||
MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("adc_pclk", R9A08G045_ADC_PCLK, R9A08G045_CLK_TSU, 0x5a8, 1,
|
||||
MSTOP(BUS_MCPU2, BIT(14))),
|
||||
DEF_MOD("tsu_pclk", R9A08G045_TSU_PCLK, R9A08G045_CLK_TSU, 0x5ac, 0,
|
||||
MSTOP(BUS_MCPU2, BIT(15))),
|
||||
DEF_MOD("pci_aclk", R9A08G045_PCI_ACLK, R9A08G045_CLK_M0, 0x608, 0,
|
||||
MSTOP(BUS_PERI_COM, BIT(10))),
|
||||
DEF_MOD("pci_clkl1pm", R9A08G045_PCI_CLKL1PM, R9A08G045_CLK_ZT, 0x608, 1,
|
||||
MSTOP(BUS_PERI_COM, BIT(10))),
|
||||
DEF_MOD("i3c_pclk", R9A08G045_I3C_PCLK, R9A08G045_CLK_TSU, 0x610, 0,
|
||||
MSTOP(BUS_MCPU3, BIT(10))),
|
||||
DEF_MOD("i3c_tclk", R9A08G045_I3C_TCLK, R9A08G045_CLK_P5, 0x610, 1,
|
||||
MSTOP(BUS_MCPU3, BIT(10))),
|
||||
DEF_MOD("vbat_bclk", R9A08G045_VBAT_BCLK, R9A08G045_OSCCLK, 0x614, 0,
|
||||
MSTOP(BUS_MCPU3, GENMASK(8, 7))),
|
||||
};
|
||||
@@ -331,6 +341,15 @@ static const struct rzg2l_reset r9a08g045_resets[] = {
|
||||
DEF_RST(R9A08G045_ADC_PRESETN, 0x8a8, 0),
|
||||
DEF_RST(R9A08G045_ADC_ADRST_N, 0x8a8, 1),
|
||||
DEF_RST(R9A08G045_TSU_PRESETN, 0x8ac, 0),
|
||||
DEF_RST(R9A08G045_PCI_ARESETN, 0x908, 0),
|
||||
DEF_RST(R9A08G045_PCI_RST_B, 0x908, 1),
|
||||
DEF_RST(R9A08G045_PCI_RST_GP_B, 0x908, 2),
|
||||
DEF_RST(R9A08G045_PCI_RST_PS_B, 0x908, 3),
|
||||
DEF_RST(R9A08G045_PCI_RST_RSM_B, 0x908, 4),
|
||||
DEF_RST(R9A08G045_PCI_RST_CFG_B, 0x908, 5),
|
||||
DEF_RST(R9A08G045_PCI_RST_LOAD_B, 0x908, 6),
|
||||
DEF_RST(R9A08G045_I3C_TRESETN, 0x910, 0),
|
||||
DEF_RST(R9A08G045_I3C_PRESETN, 0x910, 1),
|
||||
DEF_RST(R9A08G045_VBAT_BRESETN, 0x914, 0),
|
||||
};
|
||||
|
||||
@@ -342,6 +361,10 @@ static const unsigned int r9a08g045_crit_mod_clks[] __initconst = {
|
||||
MOD_CLK_BASE + R9A08G045_VBAT_BCLK,
|
||||
};
|
||||
|
||||
static const unsigned int r9a08g045_no_pm_mod_clks[] = {
|
||||
MOD_CLK_BASE + R9A08G045_PCI_CLKL1PM,
|
||||
};
|
||||
|
||||
const struct rzg2l_cpg_info r9a08g045_cpg_info = {
|
||||
/* Core Clocks */
|
||||
.core_clks = r9a08g045_core_clks,
|
||||
@@ -358,6 +381,10 @@ const struct rzg2l_cpg_info r9a08g045_cpg_info = {
|
||||
.num_mod_clks = ARRAY_SIZE(r9a08g045_mod_clks),
|
||||
.num_hw_mod_clks = R9A08G045_VBAT_BCLK + 1,
|
||||
|
||||
/* No PM modules Clocks */
|
||||
.no_pm_mod_clks = r9a08g045_no_pm_mod_clks,
|
||||
.num_no_pm_mod_clks = ARRAY_SIZE(r9a08g045_no_pm_mod_clks),
|
||||
|
||||
/* Resets */
|
||||
.resets = r9a08g045_resets,
|
||||
.num_resets = R9A08G045_VBAT_BRESETN + 1, /* Last reset ID + 1 */
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
enum clk_ids {
|
||||
/* Core Clock Outputs exported to DT */
|
||||
LAST_DT_CORE_CLK = R9A09G047_GBETH_1_CLK_PTP_REF_I,
|
||||
LAST_DT_CORE_CLK = R9A09G047_USB3_0_CLKCORE,
|
||||
|
||||
/* External Input Clocks */
|
||||
CLK_AUDIO_EXTAL,
|
||||
@@ -48,6 +48,8 @@ enum clk_ids {
|
||||
CLK_PLLDTY_ACPU_DIV2,
|
||||
CLK_PLLDTY_ACPU_DIV4,
|
||||
CLK_PLLDTY_DIV8,
|
||||
CLK_PLLDTY_RCPU,
|
||||
CLK_PLLDTY_RCPU_DIV4,
|
||||
CLK_PLLETH_DIV_250_FIX,
|
||||
CLK_PLLETH_DIV_125_FIX,
|
||||
CLK_CSDIV_PLLETH_GBE0,
|
||||
@@ -157,6 +159,8 @@ static const struct cpg_core_clk r9a09g047_core_clks[] __initconst = {
|
||||
DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_gbe1_txclk),
|
||||
DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_gbe1_rxclk),
|
||||
DEF_FIXED(".plldty_div16", CLK_PLLDTY_DIV16, CLK_PLLDTY, 1, 16),
|
||||
DEF_DDIV(".plldty_rcpu", CLK_PLLDTY_RCPU, CLK_PLLDTY, CDDIV3_DIVCTL2, dtable_2_64),
|
||||
DEF_FIXED(".plldty_rcpu_div4", CLK_PLLDTY_RCPU_DIV4, CLK_PLLDTY_RCPU, 1, 4),
|
||||
|
||||
DEF_DDIV(".pllvdo_cru0", CLK_PLLVDO_CRU0, CLK_PLLVDO, CDDIV3_DIVCTL3, dtable_2_4),
|
||||
DEF_DDIV(".pllvdo_gpu", CLK_PLLVDO_GPU, CLK_PLLVDO, CDDIV3_DIVCTL1, dtable_2_64),
|
||||
@@ -177,13 +181,29 @@ static const struct cpg_core_clk r9a09g047_core_clks[] __initconst = {
|
||||
CLK_PLLETH_DIV_125_FIX, 1, 1),
|
||||
DEF_FIXED("gbeth_1_clk_ptp_ref_i", R9A09G047_GBETH_1_CLK_PTP_REF_I,
|
||||
CLK_PLLETH_DIV_125_FIX, 1, 1),
|
||||
DEF_FIXED("usb3_0_ref_alt_clk_p", R9A09G047_USB3_0_REF_ALT_CLK_P, CLK_QEXTAL, 1, 1),
|
||||
DEF_FIXED("usb3_0_core_clk", R9A09G047_USB3_0_CLKCORE, CLK_QEXTAL, 1, 1),
|
||||
};
|
||||
|
||||
static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = {
|
||||
DEF_MOD("dmac_0_aclk", CLK_PLLCM33_GEAR, 0, 0, 0, 0,
|
||||
BUS_MSTOP(5, BIT(9))),
|
||||
DEF_MOD("dmac_1_aclk", CLK_PLLDTY_ACPU_DIV2, 0, 1, 0, 1,
|
||||
BUS_MSTOP(3, BIT(2))),
|
||||
DEF_MOD("dmac_2_aclk", CLK_PLLDTY_ACPU_DIV2, 0, 2, 0, 2,
|
||||
BUS_MSTOP(3, BIT(3))),
|
||||
DEF_MOD("dmac_3_aclk", CLK_PLLDTY_RCPU_DIV4, 0, 3, 0, 3,
|
||||
BUS_MSTOP(10, BIT(11))),
|
||||
DEF_MOD("dmac_4_aclk", CLK_PLLDTY_RCPU_DIV4, 0, 4, 0, 4,
|
||||
BUS_MSTOP(10, BIT(12))),
|
||||
DEF_MOD_CRITICAL("icu_0_pclk_i", CLK_PLLCM33_DIV16, 0, 5, 0, 5,
|
||||
BUS_MSTOP_NONE),
|
||||
DEF_MOD_CRITICAL("gic_0_gicclk", CLK_PLLDTY_ACPU_DIV4, 1, 3, 0, 19,
|
||||
BUS_MSTOP(3, BIT(5))),
|
||||
DEF_MOD("gpt_0_pclk_sfr", CLK_PLLCLN_DIV8, 3, 1, 1, 17,
|
||||
BUS_MSTOP(6, BIT(11))),
|
||||
DEF_MOD("gpt_1_pclk_sfr", CLK_PLLCLN_DIV8, 3, 2, 1, 18,
|
||||
BUS_MSTOP(6, BIT(12))),
|
||||
DEF_MOD("wdt_1_clkp", CLK_PLLCLN_DIV16, 4, 13, 2, 13,
|
||||
BUS_MSTOP(1, BIT(0))),
|
||||
DEF_MOD("wdt_1_clk_loco", CLK_QEXTAL, 4, 14, 2, 14,
|
||||
@@ -258,6 +278,10 @@ static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = {
|
||||
BUS_MSTOP(8, BIT(4))),
|
||||
DEF_MOD("sdhi_2_aclk", CLK_PLLDTY_ACPU_DIV4, 10, 14, 5, 14,
|
||||
BUS_MSTOP(8, BIT(4))),
|
||||
DEF_MOD("usb3_0_aclk", CLK_PLLDTY_DIV8, 10, 15, 5, 15,
|
||||
BUS_MSTOP(7, BIT(12))),
|
||||
DEF_MOD("usb3_0_pclk_usbtst", CLK_PLLDTY_ACPU_DIV4, 11, 0, 5, 16,
|
||||
BUS_MSTOP(7, BIT(14))),
|
||||
DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_tx_i", CLK_SMUX2_GBE0_TXCLK, 11, 8, 5, 24,
|
||||
BUS_MSTOP(8, BIT(5)), 1),
|
||||
DEF_MOD_MUX_EXTERNAL("gbeth_0_clk_rx_i", CLK_SMUX2_GBE0_RXCLK, 11, 9, 5, 25,
|
||||
@@ -300,9 +324,18 @@ static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = {
|
||||
|
||||
static const struct rzv2h_reset r9a09g047_resets[] __initconst = {
|
||||
DEF_RST(3, 0, 1, 1), /* SYS_0_PRESETN */
|
||||
DEF_RST(3, 1, 1, 2), /* DMAC_0_ARESETN */
|
||||
DEF_RST(3, 2, 1, 3), /* DMAC_1_ARESETN */
|
||||
DEF_RST(3, 3, 1, 4), /* DMAC_2_ARESETN */
|
||||
DEF_RST(3, 4, 1, 5), /* DMAC_3_ARESETN */
|
||||
DEF_RST(3, 5, 1, 6), /* DMAC_4_ARESETN */
|
||||
DEF_RST(3, 6, 1, 7), /* ICU_0_PRESETN_I */
|
||||
DEF_RST(3, 8, 1, 9), /* GIC_0_GICRESET_N */
|
||||
DEF_RST(3, 9, 1, 10), /* GIC_0_DBG_GICRESET_N */
|
||||
DEF_RST(5, 9, 2, 10), /* GPT_0_RST_P_REG */
|
||||
DEF_RST(5, 10, 2, 11), /* GPT_0_RST_S_REG */
|
||||
DEF_RST(5, 11, 2, 12), /* GPT_1_RST_P_REG */
|
||||
DEF_RST(5, 12, 2, 13), /* GPT_1_RST_S_REG */
|
||||
DEF_RST(7, 6, 3, 7), /* WDT_1_RESET */
|
||||
DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */
|
||||
DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */
|
||||
@@ -325,6 +358,7 @@ static const struct rzv2h_reset r9a09g047_resets[] __initconst = {
|
||||
DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */
|
||||
DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */
|
||||
DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */
|
||||
DEF_RST(10, 10, 4, 27), /* USB3_0_ARESETN */
|
||||
DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */
|
||||
DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */
|
||||
DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */
|
||||
|
||||
@@ -36,10 +36,10 @@ enum clk_ids {
|
||||
CLK_PLLCM33_DIV4,
|
||||
CLK_PLLCM33_DIV5,
|
||||
CLK_PLLCM33_DIV16,
|
||||
CLK_PLLCM33_GEAR,
|
||||
CLK_SMUX2_XSPI_CLK0,
|
||||
CLK_SMUX2_XSPI_CLK1,
|
||||
CLK_PLLCM33_XSPI,
|
||||
CLK_PLLCM33_GEAR,
|
||||
CLK_PLLCLN_DIV2,
|
||||
CLK_PLLCLN_DIV8,
|
||||
CLK_PLLCLN_DIV16,
|
||||
@@ -120,11 +120,11 @@ static const struct cpg_core_clk r9a09g056_core_clks[] __initconst = {
|
||||
DEF_FIXED(".pllcm33_div4", CLK_PLLCM33_DIV4, CLK_PLLCM33, 1, 4),
|
||||
DEF_FIXED(".pllcm33_div5", CLK_PLLCM33_DIV5, CLK_PLLCM33, 1, 5),
|
||||
DEF_FIXED(".pllcm33_div16", CLK_PLLCM33_DIV16, CLK_PLLCM33, 1, 16),
|
||||
DEF_DDIV(".pllcm33_gear", CLK_PLLCM33_GEAR, CLK_PLLCM33_DIV4, CDDIV0_DIVCTL1, dtable_2_64),
|
||||
DEF_SMUX(".smux2_xspi_clk0", CLK_SMUX2_XSPI_CLK0, SSEL1_SELCTL2, smux2_xspi_clk0),
|
||||
DEF_SMUX(".smux2_xspi_clk1", CLK_SMUX2_XSPI_CLK1, SSEL1_SELCTL3, smux2_xspi_clk1),
|
||||
DEF_CSDIV(".pllcm33_xspi", CLK_PLLCM33_XSPI, CLK_SMUX2_XSPI_CLK1, CSDIV0_DIVCTL3,
|
||||
dtable_2_16),
|
||||
DEF_DDIV(".pllcm33_gear", CLK_PLLCM33_GEAR, CLK_PLLCM33_DIV4, CDDIV0_DIVCTL1, dtable_2_64),
|
||||
|
||||
DEF_FIXED(".pllcln_div2", CLK_PLLCLN_DIV2, CLK_PLLCLN, 1, 2),
|
||||
DEF_FIXED(".pllcln_div8", CLK_PLLCLN_DIV8, CLK_PLLCLN, 1, 8),
|
||||
@@ -205,6 +205,12 @@ static const struct rzv2h_mod_clk r9a09g056_mod_clks[] __initconst = {
|
||||
BUS_MSTOP(5, BIT(13))),
|
||||
DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15,
|
||||
BUS_MSTOP(3, BIT(14))),
|
||||
DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("i3c_0_pclk", CLK_PLLCLN_DIV16, 9, 1, 4, 17,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("i3c_0_tclk", CLK_PLLCLN_DIV8, 9, 2, 4, 18,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("riic_8_ckm", CLK_PLLCM33_DIV16, 9, 3, 4, 19,
|
||||
BUS_MSTOP(3, BIT(13))),
|
||||
DEF_MOD("riic_0_ckm", CLK_PLLCLN_DIV16, 9, 4, 4, 20,
|
||||
@@ -308,6 +314,8 @@ static const struct rzv2h_reset r9a09g056_resets[] __initconst = {
|
||||
DEF_RST(7, 7, 3, 8), /* WDT_2_RESET */
|
||||
DEF_RST(7, 8, 3, 9), /* WDT_3_RESET */
|
||||
DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */
|
||||
DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */
|
||||
DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */
|
||||
DEF_RST(9, 8, 4, 9), /* RIIC_0_MRST */
|
||||
DEF_RST(9, 9, 4, 10), /* RIIC_1_MRST */
|
||||
DEF_RST(9, 10, 4, 11), /* RIIC_2_MRST */
|
||||
@@ -317,8 +325,8 @@ static const struct rzv2h_reset r9a09g056_resets[] __initconst = {
|
||||
DEF_RST(9, 14, 4, 15), /* RIIC_6_MRST */
|
||||
DEF_RST(9, 15, 4, 16), /* RIIC_7_MRST */
|
||||
DEF_RST(10, 0, 4, 17), /* RIIC_8_MRST */
|
||||
DEF_RST(10, 3, 4, 20), /* SPI_HRESETN */
|
||||
DEF_RST(10, 4, 4, 21), /* SPI_ARESETN */
|
||||
DEF_RST(10, 3, 4, 20), /* SPI_HRESETN */
|
||||
DEF_RST(10, 4, 4, 21), /* SPI_ARESETN */
|
||||
DEF_RST(10, 7, 4, 24), /* SDHI_0_IXRST */
|
||||
DEF_RST(10, 8, 4, 25), /* SDHI_1_IXRST */
|
||||
DEF_RST(10, 9, 4, 26), /* SDHI_2_IXRST */
|
||||
|
||||
@@ -134,9 +134,8 @@ static const struct cpg_core_clk r9a09g057_core_clks[] __initconst = {
|
||||
DEF_FIXED(".pllcm33_div3", CLK_PLLCM33_DIV3, CLK_PLLCM33, 1, 3),
|
||||
DEF_FIXED(".pllcm33_div4", CLK_PLLCM33_DIV4, CLK_PLLCM33, 1, 4),
|
||||
DEF_FIXED(".pllcm33_div5", CLK_PLLCM33_DIV5, CLK_PLLCM33, 1, 5),
|
||||
DEF_DDIV(".pllcm33_gear", CLK_PLLCM33_GEAR,
|
||||
CLK_PLLCM33_DIV4, CDDIV0_DIVCTL1, dtable_2_64),
|
||||
DEF_FIXED(".pllcm33_div16", CLK_PLLCM33_DIV16, CLK_PLLCM33, 1, 16),
|
||||
DEF_DDIV(".pllcm33_gear", CLK_PLLCM33_GEAR, CLK_PLLCM33_DIV4, CDDIV0_DIVCTL1, dtable_2_64),
|
||||
DEF_SMUX(".smux2_xspi_clk0", CLK_SMUX2_XSPI_CLK0, SSEL1_SELCTL2, smux2_xspi_clk0),
|
||||
DEF_SMUX(".smux2_xspi_clk1", CLK_SMUX2_XSPI_CLK1, SSEL1_SELCTL3, smux2_xspi_clk1),
|
||||
DEF_CSDIV(".pllcm33_xspi", CLK_PLLCM33_XSPI, CLK_SMUX2_XSPI_CLK1, CSDIV0_DIVCTL3,
|
||||
@@ -260,6 +259,12 @@ static const struct rzv2h_mod_clk r9a09g057_mod_clks[] __initconst = {
|
||||
BUS_MSTOP(11, BIT(2))),
|
||||
DEF_MOD("scif_0_clk_pck", CLK_PLLCM33_DIV16, 8, 15, 4, 15,
|
||||
BUS_MSTOP(3, BIT(14))),
|
||||
DEF_MOD("i3c_0_pclkrw", CLK_PLLCLN_DIV16, 9, 0, 4, 16,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("i3c_0_pclk", CLK_PLLCLN_DIV16, 9, 1, 4, 17,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("i3c_0_tclk", CLK_PLLCLN_DIV8, 9, 2, 4, 18,
|
||||
BUS_MSTOP(10, BIT(15))),
|
||||
DEF_MOD("riic_8_ckm", CLK_PLLCM33_DIV16, 9, 3, 4, 19,
|
||||
BUS_MSTOP(3, BIT(13))),
|
||||
DEF_MOD("riic_0_ckm", CLK_PLLCLN_DIV16, 9, 4, 4, 20,
|
||||
@@ -403,6 +408,8 @@ static const struct rzv2h_reset r9a09g057_resets[] __initconst = {
|
||||
DEF_RST(7, 15, 3, 16), /* RSPI_2_PRESETN */
|
||||
DEF_RST(8, 0, 3, 17), /* RSPI_2_TRESETN */
|
||||
DEF_RST(9, 5, 4, 6), /* SCIF_0_RST_SYSTEM_N */
|
||||
DEF_RST(9, 6, 4, 7), /* I3C_0_PRESETN */
|
||||
DEF_RST(9, 7, 4, 8), /* I3C_0_TRESETN */
|
||||
DEF_RST(9, 8, 4, 9), /* RIIC_0_MRST */
|
||||
DEF_RST(9, 9, 4, 10), /* RIIC_1_MRST */
|
||||
DEF_RST(9, 10, 4, 11), /* RIIC_2_MRST */
|
||||
|
||||
@@ -46,8 +46,13 @@
|
||||
#define DIVCA55C2 CONF_PACK(SCKCR2, 10, 1)
|
||||
#define DIVCA55C3 CONF_PACK(SCKCR2, 11, 1)
|
||||
#define DIVCA55S CONF_PACK(SCKCR2, 12, 1)
|
||||
#define DIVSCI5ASYNC CONF_PACK(SCKCR2, 18, 2)
|
||||
|
||||
#define DIVSCI0ASYNC CONF_PACK(SCKCR3, 6, 2)
|
||||
#define DIVSCI1ASYNC CONF_PACK(SCKCR3, 8, 2)
|
||||
#define DIVSCI2ASYNC CONF_PACK(SCKCR3, 10, 2)
|
||||
#define DIVSCI3ASYNC CONF_PACK(SCKCR3, 12, 2)
|
||||
#define DIVSCI4ASYNC CONF_PACK(SCKCR3, 14, 2)
|
||||
|
||||
#define SEL_PLL CONF_PACK(SCKCR, 22, 1)
|
||||
|
||||
@@ -67,7 +72,7 @@ enum rzt2h_clk_types {
|
||||
|
||||
enum clk_ids {
|
||||
/* Core Clock Outputs exported to DT */
|
||||
LAST_DT_CORE_CLK = R9A09G077_SDHI_CLKHS,
|
||||
LAST_DT_CORE_CLK = R9A09G077_ETCLKE,
|
||||
|
||||
/* External Input Clocks */
|
||||
CLK_EXTAL,
|
||||
@@ -84,6 +89,11 @@ enum clk_ids {
|
||||
CLK_SEL_CLK_PLL4,
|
||||
CLK_PLL4D1,
|
||||
CLK_SCI0ASYNC,
|
||||
CLK_SCI1ASYNC,
|
||||
CLK_SCI2ASYNC,
|
||||
CLK_SCI3ASYNC,
|
||||
CLK_SCI4ASYNC,
|
||||
CLK_SCI5ASYNC,
|
||||
|
||||
/* Module Clocks */
|
||||
MOD_CLK_BASE,
|
||||
@@ -133,6 +143,16 @@ static const struct cpg_core_clk r9a09g077_core_clks[] __initconst = {
|
||||
DEF_FIXED(".pll4d1", CLK_PLL4D1, CLK_SEL_CLK_PLL4, 1, 1),
|
||||
DEF_DIV(".sci0async", CLK_SCI0ASYNC, CLK_PLL4D1, DIVSCI0ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
DEF_DIV(".sci1async", CLK_SCI1ASYNC, CLK_PLL4D1, DIVSCI1ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
DEF_DIV(".sci2async", CLK_SCI2ASYNC, CLK_PLL4D1, DIVSCI2ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
DEF_DIV(".sci3async", CLK_SCI3ASYNC, CLK_PLL4D1, DIVSCI3ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
DEF_DIV(".sci4async", CLK_SCI4ASYNC, CLK_PLL4D1, DIVSCI4ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
DEF_DIV(".sci5async", CLK_SCI5ASYNC, CLK_PLL4D1, DIVSCI5ASYNC,
|
||||
dtable_24_25_30_32),
|
||||
|
||||
/* Core output clk */
|
||||
DEF_DIV("CA55C0", R9A09G077_CLK_CA55C0, CLK_SEL_CLK_PLL0, DIVCA55C0,
|
||||
@@ -146,16 +166,35 @@ static const struct cpg_core_clk r9a09g077_core_clks[] __initconst = {
|
||||
DEF_DIV("CA55S", R9A09G077_CLK_CA55S, CLK_SEL_CLK_PLL0, DIVCA55S,
|
||||
dtable_1_2),
|
||||
DEF_FIXED("PCLKGPTL", R9A09G077_CLK_PCLKGPTL, CLK_SEL_CLK_PLL1, 2, 1),
|
||||
DEF_FIXED("PCLKH", R9A09G077_CLK_PCLKH, CLK_SEL_CLK_PLL1, 4, 1),
|
||||
DEF_FIXED("PCLKM", R9A09G077_CLK_PCLKM, CLK_SEL_CLK_PLL1, 8, 1),
|
||||
DEF_FIXED("PCLKL", R9A09G077_CLK_PCLKL, CLK_SEL_CLK_PLL1, 16, 1),
|
||||
DEF_FIXED("PCLKAH", R9A09G077_CLK_PCLKAH, CLK_PLL4D1, 6, 1),
|
||||
DEF_FIXED("PCLKAM", R9A09G077_CLK_PCLKAM, CLK_PLL4D1, 12, 1),
|
||||
DEF_FIXED("SDHI_CLKHS", R9A09G077_SDHI_CLKHS, CLK_SEL_CLK_PLL2, 1, 1),
|
||||
DEF_FIXED("USB_CLK", R9A09G077_USB_CLK, CLK_PLL4D1, 48, 1),
|
||||
DEF_FIXED("ETCLKA", R9A09G077_ETCLKA, CLK_SEL_CLK_PLL1, 5, 1),
|
||||
DEF_FIXED("ETCLKB", R9A09G077_ETCLKB, CLK_SEL_CLK_PLL1, 8, 1),
|
||||
DEF_FIXED("ETCLKC", R9A09G077_ETCLKC, CLK_SEL_CLK_PLL1, 10, 1),
|
||||
DEF_FIXED("ETCLKD", R9A09G077_ETCLKD, CLK_SEL_CLK_PLL1, 20, 1),
|
||||
DEF_FIXED("ETCLKE", R9A09G077_ETCLKE, CLK_SEL_CLK_PLL1, 40, 1),
|
||||
};
|
||||
|
||||
static const struct mssr_mod_clk r9a09g077_mod_clks[] __initconst = {
|
||||
DEF_MOD("sci0fck", 8, CLK_SCI0ASYNC),
|
||||
DEF_MOD("sci1fck", 9, CLK_SCI1ASYNC),
|
||||
DEF_MOD("sci2fck", 10, CLK_SCI2ASYNC),
|
||||
DEF_MOD("sci3fck", 11, CLK_SCI3ASYNC),
|
||||
DEF_MOD("sci4fck", 12, CLK_SCI4ASYNC),
|
||||
DEF_MOD("iic0", 100, R9A09G077_CLK_PCLKL),
|
||||
DEF_MOD("iic1", 101, R9A09G077_CLK_PCLKL),
|
||||
DEF_MOD("gmac0", 400, R9A09G077_CLK_PCLKM),
|
||||
DEF_MOD("ethsw", 401, R9A09G077_CLK_PCLKM),
|
||||
DEF_MOD("ethss", 403, R9A09G077_CLK_PCLKM),
|
||||
DEF_MOD("usb", 408, R9A09G077_CLK_PCLKAM),
|
||||
DEF_MOD("gmac1", 416, R9A09G077_CLK_PCLKAM),
|
||||
DEF_MOD("gmac2", 417, R9A09G077_CLK_PCLKAM),
|
||||
DEF_MOD("sci5fck", 600, CLK_SCI5ASYNC),
|
||||
DEF_MOD("iic2", 601, R9A09G077_CLK_PCLKL),
|
||||
DEF_MOD("sdhi0", 1212, R9A09G077_CLK_PCLKAM),
|
||||
DEF_MOD("sdhi1", 1213, R9A09G077_CLK_PCLKAM),
|
||||
|
||||
@@ -1082,6 +1082,7 @@ static int __init cpg_mssr_reserved_init(struct cpg_mssr_priv *priv,
|
||||
|
||||
of_for_each_phandle(&it, rc, node, "clocks", "#clock-cells", -1) {
|
||||
int idx;
|
||||
unsigned int *new_ids;
|
||||
|
||||
if (it.node != priv->np)
|
||||
continue;
|
||||
@@ -1092,11 +1093,13 @@ static int __init cpg_mssr_reserved_init(struct cpg_mssr_priv *priv,
|
||||
if (args[0] != CPG_MOD)
|
||||
continue;
|
||||
|
||||
ids = krealloc_array(ids, (num + 1), sizeof(*ids), GFP_KERNEL);
|
||||
if (!ids) {
|
||||
new_ids = krealloc_array(ids, (num + 1), sizeof(*ids), GFP_KERNEL);
|
||||
if (!new_ids) {
|
||||
of_node_put(it.node);
|
||||
kfree(ids);
|
||||
return -ENOMEM;
|
||||
}
|
||||
ids = new_ids;
|
||||
|
||||
if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A)
|
||||
idx = MOD_CLK_PACK_10(args[1]); /* for DEF_MOD_STB() */
|
||||
|
||||
@@ -824,11 +824,10 @@ static unsigned long rzg2l_cpg_sipll5_recalc_rate(struct clk_hw *hw,
|
||||
return pll5_rate;
|
||||
}
|
||||
|
||||
static long rzg2l_cpg_sipll5_round_rate(struct clk_hw *hw,
|
||||
unsigned long rate,
|
||||
unsigned long *parent_rate)
|
||||
static int rzg2l_cpg_sipll5_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
return rate;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rzg2l_cpg_sipll5_set_rate(struct clk_hw *hw,
|
||||
@@ -902,7 +901,7 @@ static int rzg2l_cpg_sipll5_set_rate(struct clk_hw *hw,
|
||||
|
||||
static const struct clk_ops rzg2l_cpg_sipll5_ops = {
|
||||
.recalc_rate = rzg2l_cpg_sipll5_recalc_rate,
|
||||
.round_rate = rzg2l_cpg_sipll5_round_rate,
|
||||
.determine_rate = rzg2l_cpg_sipll5_determine_rate,
|
||||
.set_rate = rzg2l_cpg_sipll5_set_rate,
|
||||
};
|
||||
|
||||
@@ -1639,8 +1638,8 @@ rzg2l_cpg_register_mod_clk(const struct rzg2l_mod_clk *mod,
|
||||
|
||||
#define rcdev_to_priv(x) container_of(x, struct rzg2l_cpg_priv, rcdev)
|
||||
|
||||
static int rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
unsigned long id)
|
||||
static int __rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
unsigned long id, bool assert)
|
||||
{
|
||||
struct rzg2l_cpg_priv *priv = rcdev_to_priv(rcdev);
|
||||
const struct rzg2l_cpg_info *info = priv->info;
|
||||
@@ -1648,9 +1647,13 @@ static int rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
u32 mask = BIT(info->resets[id].bit);
|
||||
s8 monbit = info->resets[id].monbit;
|
||||
u32 value = mask << 16;
|
||||
int ret;
|
||||
|
||||
dev_dbg(rcdev->dev, "assert id:%ld offset:0x%x\n", id, CLK_RST_R(reg));
|
||||
dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
|
||||
assert ? "assert" : "deassert", id, CLK_RST_R(reg));
|
||||
|
||||
if (!assert)
|
||||
value |= mask;
|
||||
writel(value, priv->base + CLK_RST_R(reg));
|
||||
|
||||
if (info->has_clk_mon_regs) {
|
||||
@@ -1664,38 +1667,26 @@ static int rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
return readl_poll_timeout_atomic(priv->base + reg, value,
|
||||
value & mask, 10, 200);
|
||||
ret = readl_poll_timeout_atomic(priv->base + reg, value,
|
||||
assert == !!(value & mask), 10, 200);
|
||||
if (ret && !assert) {
|
||||
value = mask << 16;
|
||||
writel(value, priv->base + CLK_RST_R(info->resets[id].off));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
unsigned long id)
|
||||
{
|
||||
return __rzg2l_cpg_assert(rcdev, id, true);
|
||||
}
|
||||
|
||||
static int rzg2l_cpg_deassert(struct reset_controller_dev *rcdev,
|
||||
unsigned long id)
|
||||
{
|
||||
struct rzg2l_cpg_priv *priv = rcdev_to_priv(rcdev);
|
||||
const struct rzg2l_cpg_info *info = priv->info;
|
||||
unsigned int reg = info->resets[id].off;
|
||||
u32 mask = BIT(info->resets[id].bit);
|
||||
s8 monbit = info->resets[id].monbit;
|
||||
u32 value = (mask << 16) | mask;
|
||||
|
||||
dev_dbg(rcdev->dev, "deassert id:%ld offset:0x%x\n", id,
|
||||
CLK_RST_R(reg));
|
||||
|
||||
writel(value, priv->base + CLK_RST_R(reg));
|
||||
|
||||
if (info->has_clk_mon_regs) {
|
||||
reg = CLK_MRST_R(reg);
|
||||
} else if (monbit >= 0) {
|
||||
reg = CPG_RST_MON;
|
||||
mask = BIT(monbit);
|
||||
} else {
|
||||
/* Wait for at least one cycle of the RCLK clock (@ ca. 32 kHz) */
|
||||
udelay(35);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return readl_poll_timeout_atomic(priv->base + reg, value,
|
||||
!(value & mask), 10, 200);
|
||||
return __rzg2l_cpg_assert(rcdev, id, false);
|
||||
}
|
||||
|
||||
static int rzg2l_cpg_reset(struct reset_controller_dev *rcdev,
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define CPG_BUS_PERI_COM_MSTOP (0xB6C)
|
||||
#define CPG_BUS_PERI_CPU_MSTOP (0xB70)
|
||||
#define CPG_BUS_PERI_DDR_MSTOP (0xB74)
|
||||
#define CPG_BUS_PERI_VIDEO_MSTOP (0xB78)
|
||||
#define CPG_BUS_REG0_MSTOP (0xB7C)
|
||||
#define CPG_BUS_REG1_MSTOP (0xB80)
|
||||
#define CPG_BUS_TZCDDR_MSTOP (0xB84)
|
||||
|
||||
@@ -294,15 +294,6 @@ static unsigned long rzv2h_ddiv_recalc_rate(struct clk_hw *hw,
|
||||
divider->flags, divider->width);
|
||||
}
|
||||
|
||||
static long rzv2h_ddiv_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long *prate)
|
||||
{
|
||||
struct clk_divider *divider = to_clk_divider(hw);
|
||||
|
||||
return divider_round_rate(hw, rate, prate, divider->table,
|
||||
divider->width, divider->flags);
|
||||
}
|
||||
|
||||
static int rzv2h_ddiv_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
@@ -359,7 +350,6 @@ static int rzv2h_ddiv_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
|
||||
static const struct clk_ops rzv2h_ddiv_clk_divider_ops = {
|
||||
.recalc_rate = rzv2h_ddiv_recalc_rate,
|
||||
.round_rate = rzv2h_ddiv_round_rate,
|
||||
.determine_rate = rzv2h_ddiv_determine_rate,
|
||||
.set_rate = rzv2h_ddiv_set_rate,
|
||||
};
|
||||
@@ -864,6 +854,7 @@ static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
u32 mask = BIT(priv->resets[id].reset_bit);
|
||||
u8 monbit = priv->resets[id].mon_bit;
|
||||
u32 value = mask << 16;
|
||||
int ret;
|
||||
|
||||
dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
|
||||
assert ? "assert" : "deassert", id, reg);
|
||||
@@ -875,9 +866,14 @@ static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
|
||||
mask = BIT(monbit);
|
||||
|
||||
return readl_poll_timeout_atomic(priv->base + reg, value,
|
||||
assert ? (value & mask) : !(value & mask),
|
||||
10, 200);
|
||||
ret = readl_poll_timeout_atomic(priv->base + reg, value,
|
||||
assert == !!(value & mask), 10, 200);
|
||||
if (ret && !assert) {
|
||||
value = mask << 16;
|
||||
writel(value, priv->base + GET_RST_OFFSET(priv->resets[id].reset_index));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
|
||||
|
||||
@@ -136,13 +136,33 @@ CCU_GATE_DEFINE(pll1_d3_819p2, CCU_PARENT_HW(pll1_d3), MPMU_ACGR, BIT(14), 0);
|
||||
CCU_GATE_DEFINE(pll1_d2_1228p8, CCU_PARENT_HW(pll1_d2), MPMU_ACGR, BIT(16), 0);
|
||||
|
||||
CCU_GATE_DEFINE(slow_uart, CCU_PARENT_NAME(osc), MPMU_ACGR, BIT(1), CLK_IGNORE_UNUSED);
|
||||
CCU_DDN_DEFINE(slow_uart1_14p74, pll1_d16_153p6, MPMU_SUCCR, 16, 13, 0, 13, 0);
|
||||
CCU_DDN_DEFINE(slow_uart2_48, pll1_d4_614p4, MPMU_SUCCR_1, 16, 13, 0, 13, 0);
|
||||
CCU_DDN_DEFINE(slow_uart1_14p74, pll1_d16_153p6, MPMU_SUCCR, 16, 13, 0, 13, 2, 0);
|
||||
CCU_DDN_DEFINE(slow_uart2_48, pll1_d4_614p4, MPMU_SUCCR_1, 16, 13, 0, 13, 2, 0);
|
||||
|
||||
CCU_GATE_DEFINE(wdt_clk, CCU_PARENT_HW(pll1_d96_25p6), MPMU_WDTPCR, BIT(1), 0);
|
||||
|
||||
CCU_FACTOR_GATE_DEFINE(i2s_sysclk, CCU_PARENT_HW(pll1_d16_153p6), MPMU_ISCCR, BIT(31), 50, 1);
|
||||
CCU_FACTOR_GATE_DEFINE(i2s_bclk, CCU_PARENT_HW(i2s_sysclk), MPMU_ISCCR, BIT(29), 1, 1);
|
||||
CCU_FACTOR_DEFINE(i2s_153p6, CCU_PARENT_HW(pll1_d8_307p2), 2, 1);
|
||||
|
||||
static const struct clk_parent_data i2s_153p6_base_parents[] = {
|
||||
CCU_PARENT_HW(i2s_153p6),
|
||||
CCU_PARENT_HW(pll1_d8_307p2),
|
||||
};
|
||||
CCU_MUX_DEFINE(i2s_153p6_base, i2s_153p6_base_parents, MPMU_FCCR, 29, 1, 0);
|
||||
|
||||
static const struct clk_parent_data i2s_sysclk_src_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d96_25p6),
|
||||
CCU_PARENT_HW(i2s_153p6_base)
|
||||
};
|
||||
CCU_MUX_GATE_DEFINE(i2s_sysclk_src, i2s_sysclk_src_parents, MPMU_ISCCR, 30, 1, BIT(31), 0);
|
||||
|
||||
CCU_DDN_DEFINE(i2s_sysclk, i2s_sysclk_src, MPMU_ISCCR, 0, 15, 15, 12, 1, 0);
|
||||
|
||||
CCU_FACTOR_DEFINE(i2s_bclk_factor, CCU_PARENT_HW(i2s_sysclk), 2, 1);
|
||||
/*
|
||||
* Divider of i2s_bclk always implies a 1/2 factor, which is
|
||||
* described by i2s_bclk_factor.
|
||||
*/
|
||||
CCU_DIV_GATE_DEFINE(i2s_bclk, CCU_PARENT_HW(i2s_bclk_factor), MPMU_ISCCR, 27, 2, BIT(29), 0);
|
||||
|
||||
static const struct clk_parent_data apb_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d96_25p6),
|
||||
@@ -247,7 +267,14 @@ CCU_GATE_DEFINE(aib_clk, CCU_PARENT_NAME(vctcxo_24m), APBC_AIB_CLK_RST, BIT(1),
|
||||
|
||||
CCU_GATE_DEFINE(onewire_clk, CCU_PARENT_NAME(vctcxo_24m), APBC_ONEWIRE_CLK_RST, BIT(1), 0);
|
||||
|
||||
static const struct clk_parent_data sspa_parents[] = {
|
||||
/*
|
||||
* When i2s_bclk is selected as the parent clock of sspa,
|
||||
* the hardware requires bit3 to be set
|
||||
*/
|
||||
CCU_GATE_DEFINE(sspa0_i2s_bclk, CCU_PARENT_HW(i2s_bclk), APBC_SSPA0_CLK_RST, BIT(3), 0);
|
||||
CCU_GATE_DEFINE(sspa1_i2s_bclk, CCU_PARENT_HW(i2s_bclk), APBC_SSPA1_CLK_RST, BIT(3), 0);
|
||||
|
||||
static const struct clk_parent_data sspa0_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d384_6p4),
|
||||
CCU_PARENT_HW(pll1_d192_12p8),
|
||||
CCU_PARENT_HW(pll1_d96_25p6),
|
||||
@@ -255,10 +282,22 @@ static const struct clk_parent_data sspa_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d768_3p2),
|
||||
CCU_PARENT_HW(pll1_d1536_1p6),
|
||||
CCU_PARENT_HW(pll1_d3072_0p8),
|
||||
CCU_PARENT_HW(i2s_bclk),
|
||||
CCU_PARENT_HW(sspa0_i2s_bclk),
|
||||
};
|
||||
CCU_MUX_GATE_DEFINE(sspa0_clk, sspa_parents, APBC_SSPA0_CLK_RST, 4, 3, BIT(1), 0);
|
||||
CCU_MUX_GATE_DEFINE(sspa1_clk, sspa_parents, APBC_SSPA1_CLK_RST, 4, 3, BIT(1), 0);
|
||||
CCU_MUX_GATE_DEFINE(sspa0_clk, sspa0_parents, APBC_SSPA0_CLK_RST, 4, 3, BIT(1), 0);
|
||||
|
||||
static const struct clk_parent_data sspa1_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d384_6p4),
|
||||
CCU_PARENT_HW(pll1_d192_12p8),
|
||||
CCU_PARENT_HW(pll1_d96_25p6),
|
||||
CCU_PARENT_HW(pll1_d48_51p2),
|
||||
CCU_PARENT_HW(pll1_d768_3p2),
|
||||
CCU_PARENT_HW(pll1_d1536_1p6),
|
||||
CCU_PARENT_HW(pll1_d3072_0p8),
|
||||
CCU_PARENT_HW(sspa1_i2s_bclk),
|
||||
};
|
||||
CCU_MUX_GATE_DEFINE(sspa1_clk, sspa1_parents, APBC_SSPA1_CLK_RST, 4, 3, BIT(1), 0);
|
||||
|
||||
CCU_GATE_DEFINE(dro_clk, CCU_PARENT_HW(apb_clk), APBC_DRO_CLK_RST, BIT(1), 0);
|
||||
CCU_GATE_DEFINE(ir_clk, CCU_PARENT_HW(apb_clk), APBC_IR_CLK_RST, BIT(1), 0);
|
||||
CCU_GATE_DEFINE(tsen_clk, CCU_PARENT_HW(apb_clk), APBC_TSEN_CLK_RST, BIT(1), 0);
|
||||
@@ -756,6 +795,10 @@ static struct clk_hw *k1_ccu_mpmu_hws[] = {
|
||||
[CLK_I2S_BCLK] = &i2s_bclk.common.hw,
|
||||
[CLK_APB] = &apb_clk.common.hw,
|
||||
[CLK_WDT_BUS] = &wdt_bus_clk.common.hw,
|
||||
[CLK_I2S_153P6] = &i2s_153p6.common.hw,
|
||||
[CLK_I2S_153P6_BASE] = &i2s_153p6_base.common.hw,
|
||||
[CLK_I2S_SYSCLK_SRC] = &i2s_sysclk_src.common.hw,
|
||||
[CLK_I2S_BCLK_FACTOR] = &i2s_bclk_factor.common.hw,
|
||||
};
|
||||
|
||||
static const struct spacemit_ccu_data k1_ccu_mpmu_data = {
|
||||
@@ -865,6 +908,8 @@ static struct clk_hw *k1_ccu_apbc_hws[] = {
|
||||
[CLK_SSPA1_BUS] = &sspa1_bus_clk.common.hw,
|
||||
[CLK_TSEN_BUS] = &tsen_bus_clk.common.hw,
|
||||
[CLK_IPC_AP2AUD_BUS] = &ipc_ap2aud_bus_clk.common.hw,
|
||||
[CLK_SSPA0_I2S_BCLK] = &sspa0_i2s_bclk.common.hw,
|
||||
[CLK_SSPA1_I2S_BCLK] = &sspa1_i2s_bclk.common.hw,
|
||||
};
|
||||
|
||||
static const struct spacemit_ccu_data k1_ccu_apbc_data = {
|
||||
|
||||
@@ -22,30 +22,33 @@
|
||||
|
||||
#include "ccu_ddn.h"
|
||||
|
||||
static unsigned long ccu_ddn_calc_rate(unsigned long prate,
|
||||
unsigned long num, unsigned long den)
|
||||
static unsigned long ccu_ddn_calc_rate(unsigned long prate, unsigned long num,
|
||||
unsigned long den, unsigned int pre_div)
|
||||
{
|
||||
return prate * den / 2 / num;
|
||||
return prate * den / pre_div / num;
|
||||
}
|
||||
|
||||
static unsigned long ccu_ddn_calc_best_rate(struct ccu_ddn *ddn,
|
||||
unsigned long rate, unsigned long prate,
|
||||
unsigned long *num, unsigned long *den)
|
||||
{
|
||||
rational_best_approximation(rate, prate / 2,
|
||||
rational_best_approximation(rate, prate / ddn->pre_div,
|
||||
ddn->den_mask >> ddn->den_shift,
|
||||
ddn->num_mask >> ddn->num_shift,
|
||||
den, num);
|
||||
return ccu_ddn_calc_rate(prate, *num, *den);
|
||||
return ccu_ddn_calc_rate(prate, *num, *den, ddn->pre_div);
|
||||
}
|
||||
|
||||
static long ccu_ddn_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long *prate)
|
||||
static int ccu_ddn_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
struct ccu_ddn *ddn = hw_to_ccu_ddn(hw);
|
||||
unsigned long num, den;
|
||||
|
||||
return ccu_ddn_calc_best_rate(ddn, rate, *prate, &num, &den);
|
||||
req->rate = ccu_ddn_calc_best_rate(ddn, req->rate,
|
||||
req->best_parent_rate, &num, &den);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long ccu_ddn_recalc_rate(struct clk_hw *hw, unsigned long prate)
|
||||
@@ -58,7 +61,7 @@ static unsigned long ccu_ddn_recalc_rate(struct clk_hw *hw, unsigned long prate)
|
||||
num = (val & ddn->num_mask) >> ddn->num_shift;
|
||||
den = (val & ddn->den_mask) >> ddn->den_shift;
|
||||
|
||||
return ccu_ddn_calc_rate(prate, num, den);
|
||||
return ccu_ddn_calc_rate(prate, num, den, ddn->pre_div);
|
||||
}
|
||||
|
||||
static int ccu_ddn_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
@@ -78,6 +81,6 @@ static int ccu_ddn_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
|
||||
const struct clk_ops spacemit_ccu_ddn_ops = {
|
||||
.recalc_rate = ccu_ddn_recalc_rate,
|
||||
.round_rate = ccu_ddn_round_rate,
|
||||
.determine_rate = ccu_ddn_determine_rate,
|
||||
.set_rate = ccu_ddn_set_rate,
|
||||
};
|
||||
|
||||
@@ -18,13 +18,14 @@ struct ccu_ddn {
|
||||
unsigned int num_shift;
|
||||
unsigned int den_mask;
|
||||
unsigned int den_shift;
|
||||
unsigned int pre_div;
|
||||
};
|
||||
|
||||
#define CCU_DDN_INIT(_name, _parent, _flags) \
|
||||
CLK_HW_INIT_HW(#_name, &_parent.common.hw, &spacemit_ccu_ddn_ops, _flags)
|
||||
|
||||
#define CCU_DDN_DEFINE(_name, _parent, _reg_ctrl, _num_shift, _num_width, \
|
||||
_den_shift, _den_width, _flags) \
|
||||
_den_shift, _den_width, _pre_div, _flags) \
|
||||
static struct ccu_ddn _name = { \
|
||||
.common = { \
|
||||
.reg_ctrl = _reg_ctrl, \
|
||||
@@ -33,7 +34,8 @@ static struct ccu_ddn _name = { \
|
||||
.num_mask = GENMASK(_num_shift + _num_width - 1, _num_shift), \
|
||||
.num_shift = _num_shift, \
|
||||
.den_mask = GENMASK(_den_shift + _den_width - 1, _den_shift), \
|
||||
.den_shift = _den_shift, \
|
||||
.den_shift = _den_shift, \
|
||||
.pre_div = _pre_div, \
|
||||
}
|
||||
|
||||
static inline struct ccu_ddn *hw_to_ccu_ddn(struct clk_hw *hw)
|
||||
|
||||
@@ -80,10 +80,12 @@ static int ccu_mix_trigger_fc(struct clk_hw *hw)
|
||||
MIX_FC_TIMEOUT_US);
|
||||
}
|
||||
|
||||
static long ccu_factor_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long *prate)
|
||||
static int ccu_factor_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
return ccu_factor_recalc_rate(hw, *prate);
|
||||
req->rate = ccu_factor_recalc_rate(hw, req->best_parent_rate);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ccu_factor_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
@@ -198,7 +200,7 @@ const struct clk_ops spacemit_ccu_gate_ops = {
|
||||
};
|
||||
|
||||
const struct clk_ops spacemit_ccu_factor_ops = {
|
||||
.round_rate = ccu_factor_round_rate,
|
||||
.determine_rate = ccu_factor_determine_rate,
|
||||
.recalc_rate = ccu_factor_recalc_rate,
|
||||
.set_rate = ccu_factor_set_rate,
|
||||
};
|
||||
@@ -220,7 +222,7 @@ const struct clk_ops spacemit_ccu_factor_gate_ops = {
|
||||
.enable = ccu_gate_enable,
|
||||
.is_enabled = ccu_gate_is_enabled,
|
||||
|
||||
.round_rate = ccu_factor_round_rate,
|
||||
.determine_rate = ccu_factor_determine_rate,
|
||||
.recalc_rate = ccu_factor_recalc_rate,
|
||||
.set_rate = ccu_factor_set_rate,
|
||||
};
|
||||
|
||||
@@ -125,12 +125,14 @@ static unsigned long ccu_pll_recalc_rate(struct clk_hw *hw,
|
||||
return entry ? entry->rate : 0;
|
||||
}
|
||||
|
||||
static long ccu_pll_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long *prate)
|
||||
static int ccu_pll_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
struct ccu_pll *pll = hw_to_ccu_pll(hw);
|
||||
|
||||
return ccu_pll_lookup_best_rate(pll, rate)->rate;
|
||||
req->rate = ccu_pll_lookup_best_rate(pll, req->rate)->rate;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ccu_pll_init(struct clk_hw *hw)
|
||||
@@ -152,6 +154,6 @@ const struct clk_ops spacemit_ccu_pll_ops = {
|
||||
.disable = ccu_pll_disable,
|
||||
.set_rate = ccu_pll_set_rate,
|
||||
.recalc_rate = ccu_pll_recalc_rate,
|
||||
.round_rate = ccu_pll_round_rate,
|
||||
.determine_rate = ccu_pll_determine_rate,
|
||||
.is_enabled = ccu_pll_is_enabled,
|
||||
};
|
||||
|
||||
@@ -303,16 +303,6 @@ static const struct clkgen_data clkgen_video = {
|
||||
.mode = 1,
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih407_a0_clk_out[] = {
|
||||
/* This clk needs to be on so that memory interface is accessible */
|
||||
{ .name = "clk-ic-lmi0", .flags = CLK_IS_CRITICAL },
|
||||
};
|
||||
|
||||
static const struct clkgen_data clkgen_stih407_a0 = {
|
||||
.outputs = clkgen_stih407_a0_clk_out,
|
||||
.outputs_nb = ARRAY_SIZE(clkgen_stih407_a0_clk_out),
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih410_a0_clk_out[] = {
|
||||
/* Those clks need to be on so that memory interface is accessible */
|
||||
{ .name = "clk-ic-lmi0", .flags = CLK_IS_CRITICAL },
|
||||
@@ -324,51 +314,6 @@ static const struct clkgen_data clkgen_stih410_a0 = {
|
||||
.outputs_nb = ARRAY_SIZE(clkgen_stih410_a0_clk_out),
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih407_c0_clk_out[] = {
|
||||
{ .name = "clk-icn-gpu", },
|
||||
{ .name = "clk-fdma", },
|
||||
{ .name = "clk-nand", },
|
||||
{ .name = "clk-hva", },
|
||||
{ .name = "clk-proc-stfe", },
|
||||
{ .name = "clk-proc-tp", },
|
||||
{ .name = "clk-rx-icn-dmu", },
|
||||
{ .name = "clk-rx-icn-hva", },
|
||||
/* This clk needs to be on to keep bus interconnect alive */
|
||||
{ .name = "clk-icn-cpu", .flags = CLK_IS_CRITICAL },
|
||||
/* This clk needs to be on to keep bus interconnect alive */
|
||||
{ .name = "clk-tx-icn-dmu", .flags = CLK_IS_CRITICAL },
|
||||
{ .name = "clk-mmc-0", },
|
||||
{ .name = "clk-mmc-1", },
|
||||
{ .name = "clk-jpegdec", },
|
||||
/* This clk needs to be on to keep A9 running */
|
||||
{ .name = "clk-ext2fa9", .flags = CLK_IS_CRITICAL },
|
||||
{ .name = "clk-ic-bdisp-0", },
|
||||
{ .name = "clk-ic-bdisp-1", },
|
||||
{ .name = "clk-pp-dmu", },
|
||||
{ .name = "clk-vid-dmu", },
|
||||
{ .name = "clk-dss-lpc", },
|
||||
{ .name = "clk-st231-aud-0", },
|
||||
{ .name = "clk-st231-gp-1", },
|
||||
{ .name = "clk-st231-dmu", },
|
||||
/* This clk needs to be on to keep bus interconnect alive */
|
||||
{ .name = "clk-icn-lmi", .flags = CLK_IS_CRITICAL },
|
||||
{ .name = "clk-tx-icn-disp-1", },
|
||||
/* This clk needs to be on to keep bus interconnect alive */
|
||||
{ .name = "clk-icn-sbc", .flags = CLK_IS_CRITICAL },
|
||||
{ .name = "clk-stfe-frc2", },
|
||||
{ .name = "clk-eth-phy", },
|
||||
{ .name = "clk-eth-ref-phyclk", },
|
||||
{ .name = "clk-flash-promip", },
|
||||
{ .name = "clk-main-disp", },
|
||||
{ .name = "clk-aux-disp", },
|
||||
{ .name = "clk-compo-dvp", },
|
||||
};
|
||||
|
||||
static const struct clkgen_data clkgen_stih407_c0 = {
|
||||
.outputs = clkgen_stih407_c0_clk_out,
|
||||
.outputs_nb = ARRAY_SIZE(clkgen_stih407_c0_clk_out),
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih410_c0_clk_out[] = {
|
||||
{ .name = "clk-icn-gpu", },
|
||||
{ .name = "clk-fdma", },
|
||||
@@ -482,19 +427,6 @@ static const struct clkgen_data clkgen_stih418_c0 = {
|
||||
.outputs_nb = ARRAY_SIZE(clkgen_stih418_c0_clk_out),
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih407_d0_clk_out[] = {
|
||||
{ .name = "clk-pcm-0", },
|
||||
{ .name = "clk-pcm-1", },
|
||||
{ .name = "clk-pcm-2", },
|
||||
{ .name = "clk-spdiff", },
|
||||
};
|
||||
|
||||
static const struct clkgen_data clkgen_stih407_d0 = {
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
.outputs = clkgen_stih407_d0_clk_out,
|
||||
.outputs_nb = ARRAY_SIZE(clkgen_stih407_d0_clk_out),
|
||||
};
|
||||
|
||||
static const struct clkgen_clk_out clkgen_stih410_d0_clk_out[] = {
|
||||
{ .name = "clk-pcm-0", },
|
||||
{ .name = "clk-pcm-1", },
|
||||
@@ -596,18 +528,10 @@ static const struct of_device_id flexgen_of_match[] = {
|
||||
.compatible = "st,flexgen-video",
|
||||
.data = &clkgen_video,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih407-a0",
|
||||
.data = &clkgen_stih407_a0,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih410-a0",
|
||||
.data = &clkgen_stih410_a0,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih407-c0",
|
||||
.data = &clkgen_stih407_c0,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih410-c0",
|
||||
.data = &clkgen_stih410_c0,
|
||||
@@ -616,10 +540,6 @@ static const struct of_device_id flexgen_of_match[] = {
|
||||
.compatible = "st,flexgen-stih418-c0",
|
||||
.data = &clkgen_stih418_c0,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih407-d0",
|
||||
.data = &clkgen_stih407_d0,
|
||||
},
|
||||
{
|
||||
.compatible = "st,flexgen-stih410-d0",
|
||||
.data = &clkgen_stih410_d0,
|
||||
|
||||
@@ -635,7 +635,7 @@ static int tegra_bpmp_register_clocks(struct tegra_bpmp *bpmp,
|
||||
|
||||
bpmp->num_clocks = count;
|
||||
|
||||
bpmp->clocks = devm_kcalloc(bpmp->dev, count, sizeof(struct tegra_bpmp_clk), GFP_KERNEL);
|
||||
bpmp->clocks = devm_kcalloc(bpmp->dev, count, sizeof(*bpmp->clocks), GFP_KERNEL);
|
||||
if (!bpmp->clocks)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -882,7 +882,7 @@ static void dfll_set_frequency_request(struct tegra_dfll *td,
|
||||
{
|
||||
u32 val = 0;
|
||||
int force_val;
|
||||
int coef = 128; /* FIXME: td->cg_scale? */;
|
||||
int coef = 128; /* FIXME: td->cg_scale? */
|
||||
|
||||
force_val = (req->lut_index - td->lut_safe) * coef / td->cg;
|
||||
force_val = clamp(force_val, FORCE_MIN, FORCE_MAX);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#define TH1520_PLL_FBDIV GENMASK(19, 8)
|
||||
#define TH1520_PLL_REFDIV GENMASK(5, 0)
|
||||
#define TH1520_PLL_BYPASS BIT(30)
|
||||
#define TH1520_PLL_VCO_RST BIT(29)
|
||||
#define TH1520_PLL_DSMPD BIT(24)
|
||||
#define TH1520_PLL_FRAC GENMASK(23, 0)
|
||||
#define TH1520_PLL_FRAC_BITS 24
|
||||
@@ -48,12 +49,14 @@ struct ccu_mux {
|
||||
};
|
||||
|
||||
struct ccu_gate {
|
||||
u32 enable;
|
||||
struct ccu_common common;
|
||||
int clkid;
|
||||
u32 reg;
|
||||
struct clk_gate gate;
|
||||
};
|
||||
|
||||
struct ccu_div {
|
||||
u32 enable;
|
||||
u32 div_en;
|
||||
struct ccu_div_internal div;
|
||||
struct ccu_internal mux;
|
||||
struct ccu_common common;
|
||||
@@ -87,12 +90,12 @@ struct ccu_pll {
|
||||
0), \
|
||||
}
|
||||
|
||||
#define CCU_GATE(_clkid, _struct, _name, _parent, _reg, _gate, _flags) \
|
||||
#define CCU_GATE(_clkid, _struct, _name, _parent, _reg, _bit, _flags) \
|
||||
struct ccu_gate _struct = { \
|
||||
.enable = _gate, \
|
||||
.common = { \
|
||||
.clkid = _clkid, \
|
||||
.cfg0 = _reg, \
|
||||
.clkid = _clkid, \
|
||||
.reg = _reg, \
|
||||
.gate = { \
|
||||
.bit_idx = _bit, \
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA( \
|
||||
_name, \
|
||||
_parent, \
|
||||
@@ -120,13 +123,6 @@ static inline struct ccu_div *hw_to_ccu_div(struct clk_hw *hw)
|
||||
return container_of(common, struct ccu_div, common);
|
||||
}
|
||||
|
||||
static inline struct ccu_gate *hw_to_ccu_gate(struct clk_hw *hw)
|
||||
{
|
||||
struct ccu_common *common = hw_to_ccu_common(hw);
|
||||
|
||||
return container_of(common, struct ccu_gate, common);
|
||||
}
|
||||
|
||||
static u8 ccu_get_parent_helper(struct ccu_common *common,
|
||||
struct ccu_internal *mux)
|
||||
{
|
||||
@@ -197,6 +193,55 @@ static unsigned long ccu_div_recalc_rate(struct clk_hw *hw,
|
||||
return rate;
|
||||
}
|
||||
|
||||
static int ccu_div_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
struct ccu_div *cd = hw_to_ccu_div(hw);
|
||||
unsigned int val;
|
||||
|
||||
if (cd->div_en)
|
||||
return divider_determine_rate(hw, req, NULL,
|
||||
cd->div.width, cd->div.flags);
|
||||
|
||||
regmap_read(cd->common.map, cd->common.cfg0, &val);
|
||||
val = val >> cd->div.shift;
|
||||
val &= GENMASK(cd->div.width - 1, 0);
|
||||
return divider_ro_determine_rate(hw, req, NULL, cd->div.width,
|
||||
cd->div.flags, val);
|
||||
}
|
||||
|
||||
static int ccu_div_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
struct ccu_div *cd = hw_to_ccu_div(hw);
|
||||
int val = divider_get_val(rate, parent_rate, NULL,
|
||||
cd->div.width, cd->div.flags);
|
||||
unsigned int curr_val, reg_val;
|
||||
|
||||
if (val < 0)
|
||||
return val;
|
||||
|
||||
regmap_read(cd->common.map, cd->common.cfg0, ®_val);
|
||||
curr_val = reg_val >> cd->div.shift;
|
||||
curr_val &= GENMASK(cd->div.width - 1, 0);
|
||||
|
||||
if (!cd->div_en && curr_val != val)
|
||||
return -EINVAL;
|
||||
|
||||
reg_val &= ~cd->div_en;
|
||||
regmap_write(cd->common.map, cd->common.cfg0, reg_val);
|
||||
udelay(1);
|
||||
|
||||
reg_val &= ~GENMASK(cd->div.width + cd->div.shift - 1, cd->div.shift);
|
||||
reg_val |= val << cd->div.shift;
|
||||
regmap_write(cd->common.map, cd->common.cfg0, reg_val);
|
||||
|
||||
reg_val |= cd->div_en;
|
||||
regmap_write(cd->common.map, cd->common.cfg0, reg_val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u8 ccu_div_get_parent(struct clk_hw *hw)
|
||||
{
|
||||
struct ccu_div *cd = hw_to_ccu_div(hw);
|
||||
@@ -239,9 +284,34 @@ static const struct clk_ops ccu_div_ops = {
|
||||
.get_parent = ccu_div_get_parent,
|
||||
.set_parent = ccu_div_set_parent,
|
||||
.recalc_rate = ccu_div_recalc_rate,
|
||||
.determine_rate = clk_hw_determine_rate_no_reparent,
|
||||
.set_rate = ccu_div_set_rate,
|
||||
.determine_rate = ccu_div_determine_rate,
|
||||
};
|
||||
|
||||
static void ccu_pll_disable(struct clk_hw *hw)
|
||||
{
|
||||
struct ccu_pll *pll = hw_to_ccu_pll(hw);
|
||||
|
||||
regmap_set_bits(pll->common.map, pll->common.cfg1,
|
||||
TH1520_PLL_VCO_RST);
|
||||
}
|
||||
|
||||
static int ccu_pll_enable(struct clk_hw *hw)
|
||||
{
|
||||
struct ccu_pll *pll = hw_to_ccu_pll(hw);
|
||||
|
||||
return regmap_clear_bits(pll->common.map, pll->common.cfg1,
|
||||
TH1520_PLL_VCO_RST);
|
||||
}
|
||||
|
||||
static int ccu_pll_is_enabled(struct clk_hw *hw)
|
||||
{
|
||||
struct ccu_pll *pll = hw_to_ccu_pll(hw);
|
||||
|
||||
return !regmap_test_bits(pll->common.map, pll->common.cfg1,
|
||||
TH1520_PLL_VCO_RST);
|
||||
}
|
||||
|
||||
static unsigned long th1520_pll_vco_recalc_rate(struct clk_hw *hw,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
@@ -299,6 +369,9 @@ static unsigned long ccu_pll_recalc_rate(struct clk_hw *hw,
|
||||
}
|
||||
|
||||
static const struct clk_ops clk_pll_ops = {
|
||||
.disable = ccu_pll_disable,
|
||||
.enable = ccu_pll_enable,
|
||||
.is_enabled = ccu_pll_is_enabled,
|
||||
.recalc_rate = ccu_pll_recalc_rate,
|
||||
};
|
||||
|
||||
@@ -314,7 +387,7 @@ static struct ccu_pll cpu_pll0_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("cpu-pll0",
|
||||
osc_24m_clk,
|
||||
&clk_pll_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -326,7 +399,7 @@ static struct ccu_pll cpu_pll1_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("cpu-pll1",
|
||||
osc_24m_clk,
|
||||
&clk_pll_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -338,7 +411,7 @@ static struct ccu_pll gmac_pll_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("gmac-pll",
|
||||
osc_24m_clk,
|
||||
&clk_pll_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -358,7 +431,7 @@ static struct ccu_pll video_pll_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("video-pll",
|
||||
osc_24m_clk,
|
||||
&clk_pll_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -410,7 +483,7 @@ static struct ccu_pll tee_pll_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("tee-pll",
|
||||
osc_24m_clk,
|
||||
&clk_pll_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -486,7 +559,7 @@ static struct ccu_div axi4_cpusys2_aclk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("axi4-cpusys2-aclk",
|
||||
gmac_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -508,7 +581,7 @@ static struct ccu_div axi_aclk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("axi-aclk",
|
||||
axi_parents,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -657,7 +730,7 @@ static struct ccu_div apb_pclk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_DATA("apb-pclk",
|
||||
apb_parents,
|
||||
&ccu_div_ops,
|
||||
CLK_IGNORE_UNUSED),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -688,7 +761,7 @@ static struct ccu_div vi_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("vi",
|
||||
video_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -713,7 +786,7 @@ static struct ccu_div vo_axi_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("vo-axi",
|
||||
video_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -738,7 +811,7 @@ static struct ccu_div vp_axi_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("vp-axi",
|
||||
video_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
CLK_IGNORE_UNUSED),
|
||||
CLK_IS_CRITICAL),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -756,6 +829,7 @@ static struct ccu_div venc_clk = {
|
||||
};
|
||||
|
||||
static struct ccu_div dpu0_clk = {
|
||||
.div_en = BIT(8),
|
||||
.div = TH_CCU_DIV_FLAGS(0, 8, CLK_DIVIDER_ONE_BASED),
|
||||
.common = {
|
||||
.clkid = CLK_DPU0,
|
||||
@@ -763,11 +837,16 @@ static struct ccu_div dpu0_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("dpu0",
|
||||
dpu0_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_SET_RATE_UNGATE),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct clk_parent_data dpu0_clk_pd[] = {
|
||||
{ .hw = &dpu0_clk.common.hw }
|
||||
};
|
||||
|
||||
static struct ccu_div dpu1_clk = {
|
||||
.div_en = BIT(8),
|
||||
.div = TH_CCU_DIV_FLAGS(0, 8, CLK_DIVIDER_ONE_BASED),
|
||||
.common = {
|
||||
.clkid = CLK_DPU1,
|
||||
@@ -775,10 +854,14 @@ static struct ccu_div dpu1_clk = {
|
||||
.hw.init = CLK_HW_INIT_PARENTS_HW("dpu1",
|
||||
dpu1_pll_clk_parent,
|
||||
&ccu_div_ops,
|
||||
0),
|
||||
CLK_SET_RATE_UNGATE),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct clk_parent_data dpu1_clk_pd[] = {
|
||||
{ .hw = &dpu1_clk.common.hw }
|
||||
};
|
||||
|
||||
static CLK_FIXED_FACTOR_HW(emmc_sdio_ref_clk, "emmc-sdio-ref",
|
||||
&video_pll_clk.common.hw, 4, 1, 0);
|
||||
|
||||
@@ -786,128 +869,132 @@ static const struct clk_parent_data emmc_sdio_ref_clk_pd[] = {
|
||||
{ .hw = &emmc_sdio_ref_clk.hw },
|
||||
};
|
||||
|
||||
static CCU_GATE(CLK_BROM, brom_clk, "brom", ahb2_cpusys_hclk_pd, 0x100, BIT(4), 0);
|
||||
static CCU_GATE(CLK_BMU, bmu_clk, "bmu", axi4_cpusys2_aclk_pd, 0x100, BIT(5), 0);
|
||||
static CCU_GATE(CLK_BROM, brom_clk, "brom", ahb2_cpusys_hclk_pd, 0x100, 4, 0);
|
||||
static CCU_GATE(CLK_BMU, bmu_clk, "bmu", axi4_cpusys2_aclk_pd, 0x100, 5, 0);
|
||||
static CCU_GATE(CLK_AON2CPU_A2X, aon2cpu_a2x_clk, "aon2cpu-a2x", axi4_cpusys2_aclk_pd,
|
||||
0x134, BIT(8), 0);
|
||||
0x134, 8, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_X2X_CPUSYS, x2x_cpusys_clk, "x2x-cpusys", axi4_cpusys2_aclk_pd,
|
||||
0x134, BIT(7), 0);
|
||||
0x134, 7, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_CPU2AON_X2H, cpu2aon_x2h_clk, "cpu2aon-x2h", axi_aclk_pd,
|
||||
0x138, BIT(8), CLK_IGNORE_UNUSED);
|
||||
0x138, 8, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_CPU2PERI_X2H, cpu2peri_x2h_clk, "cpu2peri-x2h", axi4_cpusys2_aclk_pd,
|
||||
0x140, BIT(9), CLK_IGNORE_UNUSED);
|
||||
0x140, 9, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_PERISYS_APB1_HCLK, perisys_apb1_hclk, "perisys-apb1-hclk", perisys_ahb_hclk_pd,
|
||||
0x150, BIT(9), CLK_IGNORE_UNUSED);
|
||||
0x150, 9, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_PERISYS_APB2_HCLK, perisys_apb2_hclk, "perisys-apb2-hclk", perisys_ahb_hclk_pd,
|
||||
0x150, BIT(10), CLK_IGNORE_UNUSED);
|
||||
0x150, 10, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_PERISYS_APB3_HCLK, perisys_apb3_hclk, "perisys-apb3-hclk", perisys_ahb_hclk_pd,
|
||||
0x150, BIT(11), CLK_IGNORE_UNUSED);
|
||||
0x150, 11, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_PERISYS_APB4_HCLK, perisys_apb4_hclk, "perisys-apb4-hclk", perisys_ahb_hclk_pd,
|
||||
0x150, BIT(12), 0);
|
||||
static CCU_GATE(CLK_NPU_AXI, npu_axi_clk, "npu-axi", axi_aclk_pd, 0x1c8, BIT(5), 0);
|
||||
static CCU_GATE(CLK_CPU2VP, cpu2vp_clk, "cpu2vp", axi_aclk_pd, 0x1e0, BIT(13), 0);
|
||||
static CCU_GATE(CLK_EMMC_SDIO, emmc_sdio_clk, "emmc-sdio", emmc_sdio_ref_clk_pd, 0x204, BIT(30), 0);
|
||||
static CCU_GATE(CLK_GMAC1, gmac1_clk, "gmac1", gmac_pll_clk_pd, 0x204, BIT(26), 0);
|
||||
static CCU_GATE(CLK_PADCTRL1, padctrl1_clk, "padctrl1", perisys_apb_pclk_pd, 0x204, BIT(24), 0);
|
||||
static CCU_GATE(CLK_DSMART, dsmart_clk, "dsmart", perisys_apb_pclk_pd, 0x204, BIT(23), 0);
|
||||
static CCU_GATE(CLK_PADCTRL0, padctrl0_clk, "padctrl0", perisys_apb_pclk_pd, 0x204, BIT(22), 0);
|
||||
static CCU_GATE(CLK_GMAC_AXI, gmac_axi_clk, "gmac-axi", axi4_cpusys2_aclk_pd, 0x204, BIT(21), 0);
|
||||
static CCU_GATE(CLK_GPIO3, gpio3_clk, "gpio3-clk", peri2sys_apb_pclk_pd, 0x204, BIT(20), 0);
|
||||
static CCU_GATE(CLK_GMAC0, gmac0_clk, "gmac0", gmac_pll_clk_pd, 0x204, BIT(19), 0);
|
||||
static CCU_GATE(CLK_PWM, pwm_clk, "pwm", perisys_apb_pclk_pd, 0x204, BIT(18), 0);
|
||||
static CCU_GATE(CLK_QSPI0, qspi0_clk, "qspi0", video_pll_clk_pd, 0x204, BIT(17), 0);
|
||||
static CCU_GATE(CLK_QSPI1, qspi1_clk, "qspi1", video_pll_clk_pd, 0x204, BIT(16), 0);
|
||||
static CCU_GATE(CLK_SPI, spi_clk, "spi", video_pll_clk_pd, 0x204, BIT(15), 0);
|
||||
static CCU_GATE(CLK_UART0_PCLK, uart0_pclk, "uart0-pclk", perisys_apb_pclk_pd, 0x204, BIT(14), 0);
|
||||
static CCU_GATE(CLK_UART1_PCLK, uart1_pclk, "uart1-pclk", perisys_apb_pclk_pd, 0x204, BIT(13), 0);
|
||||
static CCU_GATE(CLK_UART2_PCLK, uart2_pclk, "uart2-pclk", perisys_apb_pclk_pd, 0x204, BIT(12), 0);
|
||||
static CCU_GATE(CLK_UART3_PCLK, uart3_pclk, "uart3-pclk", perisys_apb_pclk_pd, 0x204, BIT(11), 0);
|
||||
static CCU_GATE(CLK_UART4_PCLK, uart4_pclk, "uart4-pclk", perisys_apb_pclk_pd, 0x204, BIT(10), 0);
|
||||
static CCU_GATE(CLK_UART5_PCLK, uart5_pclk, "uart5-pclk", perisys_apb_pclk_pd, 0x204, BIT(9), 0);
|
||||
static CCU_GATE(CLK_GPIO0, gpio0_clk, "gpio0-clk", perisys_apb_pclk_pd, 0x204, BIT(8), 0);
|
||||
static CCU_GATE(CLK_GPIO1, gpio1_clk, "gpio1-clk", perisys_apb_pclk_pd, 0x204, BIT(7), 0);
|
||||
static CCU_GATE(CLK_GPIO2, gpio2_clk, "gpio2-clk", peri2sys_apb_pclk_pd, 0x204, BIT(6), 0);
|
||||
static CCU_GATE(CLK_I2C0, i2c0_clk, "i2c0", perisys_apb_pclk_pd, 0x204, BIT(5), 0);
|
||||
static CCU_GATE(CLK_I2C1, i2c1_clk, "i2c1", perisys_apb_pclk_pd, 0x204, BIT(4), 0);
|
||||
static CCU_GATE(CLK_I2C2, i2c2_clk, "i2c2", perisys_apb_pclk_pd, 0x204, BIT(3), 0);
|
||||
static CCU_GATE(CLK_I2C3, i2c3_clk, "i2c3", perisys_apb_pclk_pd, 0x204, BIT(2), 0);
|
||||
static CCU_GATE(CLK_I2C4, i2c4_clk, "i2c4", perisys_apb_pclk_pd, 0x204, BIT(1), 0);
|
||||
static CCU_GATE(CLK_I2C5, i2c5_clk, "i2c5", perisys_apb_pclk_pd, 0x204, BIT(0), 0);
|
||||
static CCU_GATE(CLK_SPINLOCK, spinlock_clk, "spinlock", ahb2_cpusys_hclk_pd, 0x208, BIT(10), 0);
|
||||
static CCU_GATE(CLK_DMA, dma_clk, "dma", axi4_cpusys2_aclk_pd, 0x208, BIT(8), 0);
|
||||
static CCU_GATE(CLK_MBOX0, mbox0_clk, "mbox0", apb3_cpusys_pclk_pd, 0x208, BIT(7), 0);
|
||||
static CCU_GATE(CLK_MBOX1, mbox1_clk, "mbox1", apb3_cpusys_pclk_pd, 0x208, BIT(6), 0);
|
||||
static CCU_GATE(CLK_MBOX2, mbox2_clk, "mbox2", apb3_cpusys_pclk_pd, 0x208, BIT(5), 0);
|
||||
static CCU_GATE(CLK_MBOX3, mbox3_clk, "mbox3", apb3_cpusys_pclk_pd, 0x208, BIT(4), 0);
|
||||
static CCU_GATE(CLK_WDT0, wdt0_clk, "wdt0", apb3_cpusys_pclk_pd, 0x208, BIT(3), 0);
|
||||
static CCU_GATE(CLK_WDT1, wdt1_clk, "wdt1", apb3_cpusys_pclk_pd, 0x208, BIT(2), 0);
|
||||
static CCU_GATE(CLK_TIMER0, timer0_clk, "timer0", apb3_cpusys_pclk_pd, 0x208, BIT(1), 0);
|
||||
static CCU_GATE(CLK_TIMER1, timer1_clk, "timer1", apb3_cpusys_pclk_pd, 0x208, BIT(0), 0);
|
||||
static CCU_GATE(CLK_SRAM0, sram0_clk, "sram0", axi_aclk_pd, 0x20c, BIT(4), 0);
|
||||
static CCU_GATE(CLK_SRAM1, sram1_clk, "sram1", axi_aclk_pd, 0x20c, BIT(3), 0);
|
||||
static CCU_GATE(CLK_SRAM2, sram2_clk, "sram2", axi_aclk_pd, 0x20c, BIT(2), 0);
|
||||
static CCU_GATE(CLK_SRAM3, sram3_clk, "sram3", axi_aclk_pd, 0x20c, BIT(1), 0);
|
||||
0x150, 12, 0);
|
||||
static const struct clk_parent_data perisys_apb4_hclk_pd[] = {
|
||||
{ .hw = &perisys_apb4_hclk.gate.hw },
|
||||
};
|
||||
|
||||
static CCU_GATE(CLK_NPU_AXI, npu_axi_clk, "npu-axi", axi_aclk_pd, 0x1c8, 5, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_CPU2VP, cpu2vp_clk, "cpu2vp", axi_aclk_pd, 0x1e0, 13, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_EMMC_SDIO, emmc_sdio_clk, "emmc-sdio", emmc_sdio_ref_clk_pd, 0x204, 30, 0);
|
||||
static CCU_GATE(CLK_GMAC1, gmac1_clk, "gmac1", gmac_pll_clk_pd, 0x204, 26, 0);
|
||||
static CCU_GATE(CLK_PADCTRL1, padctrl1_clk, "padctrl1", perisys_apb_pclk_pd, 0x204, 24, 0);
|
||||
static CCU_GATE(CLK_DSMART, dsmart_clk, "dsmart", perisys_apb_pclk_pd, 0x204, 23, 0);
|
||||
static CCU_GATE(CLK_PADCTRL0, padctrl0_clk, "padctrl0", perisys_apb4_hclk_pd, 0x204, 22, 0);
|
||||
static CCU_GATE(CLK_GMAC_AXI, gmac_axi_clk, "gmac-axi", axi4_cpusys2_aclk_pd, 0x204, 21, 0);
|
||||
static CCU_GATE(CLK_GPIO3, gpio3_clk, "gpio3-clk", peri2sys_apb_pclk_pd, 0x204, 20, 0);
|
||||
static CCU_GATE(CLK_GMAC0, gmac0_clk, "gmac0", gmac_pll_clk_pd, 0x204, 19, 0);
|
||||
static CCU_GATE(CLK_PWM, pwm_clk, "pwm", perisys_apb_pclk_pd, 0x204, 18, 0);
|
||||
static CCU_GATE(CLK_QSPI0, qspi0_clk, "qspi0", video_pll_clk_pd, 0x204, 17, 0);
|
||||
static CCU_GATE(CLK_QSPI1, qspi1_clk, "qspi1", video_pll_clk_pd, 0x204, 16, 0);
|
||||
static CCU_GATE(CLK_SPI, spi_clk, "spi", video_pll_clk_pd, 0x204, 15, 0);
|
||||
static CCU_GATE(CLK_UART0_PCLK, uart0_pclk, "uart0-pclk", perisys_apb_pclk_pd, 0x204, 14, 0);
|
||||
static CCU_GATE(CLK_UART1_PCLK, uart1_pclk, "uart1-pclk", perisys_apb_pclk_pd, 0x204, 13, 0);
|
||||
static CCU_GATE(CLK_UART2_PCLK, uart2_pclk, "uart2-pclk", perisys_apb_pclk_pd, 0x204, 12, 0);
|
||||
static CCU_GATE(CLK_UART3_PCLK, uart3_pclk, "uart3-pclk", perisys_apb_pclk_pd, 0x204, 11, 0);
|
||||
static CCU_GATE(CLK_UART4_PCLK, uart4_pclk, "uart4-pclk", perisys_apb_pclk_pd, 0x204, 10, 0);
|
||||
static CCU_GATE(CLK_UART5_PCLK, uart5_pclk, "uart5-pclk", perisys_apb_pclk_pd, 0x204, 9, 0);
|
||||
static CCU_GATE(CLK_GPIO0, gpio0_clk, "gpio0-clk", perisys_apb_pclk_pd, 0x204, 8, 0);
|
||||
static CCU_GATE(CLK_GPIO1, gpio1_clk, "gpio1-clk", perisys_apb_pclk_pd, 0x204, 7, 0);
|
||||
static CCU_GATE(CLK_GPIO2, gpio2_clk, "gpio2-clk", peri2sys_apb_pclk_pd, 0x204, 6, 0);
|
||||
static CCU_GATE(CLK_I2C0, i2c0_clk, "i2c0", perisys_apb_pclk_pd, 0x204, 5, 0);
|
||||
static CCU_GATE(CLK_I2C1, i2c1_clk, "i2c1", perisys_apb_pclk_pd, 0x204, 4, 0);
|
||||
static CCU_GATE(CLK_I2C2, i2c2_clk, "i2c2", perisys_apb_pclk_pd, 0x204, 3, 0);
|
||||
static CCU_GATE(CLK_I2C3, i2c3_clk, "i2c3", perisys_apb_pclk_pd, 0x204, 2, 0);
|
||||
static CCU_GATE(CLK_I2C4, i2c4_clk, "i2c4", perisys_apb_pclk_pd, 0x204, 1, 0);
|
||||
static CCU_GATE(CLK_I2C5, i2c5_clk, "i2c5", perisys_apb_pclk_pd, 0x204, 0, 0);
|
||||
static CCU_GATE(CLK_SPINLOCK, spinlock_clk, "spinlock", ahb2_cpusys_hclk_pd, 0x208, 10, 0);
|
||||
static CCU_GATE(CLK_DMA, dma_clk, "dma", axi4_cpusys2_aclk_pd, 0x208, 8, 0);
|
||||
static CCU_GATE(CLK_MBOX0, mbox0_clk, "mbox0", apb3_cpusys_pclk_pd, 0x208, 7, 0);
|
||||
static CCU_GATE(CLK_MBOX1, mbox1_clk, "mbox1", apb3_cpusys_pclk_pd, 0x208, 6, 0);
|
||||
static CCU_GATE(CLK_MBOX2, mbox2_clk, "mbox2", apb3_cpusys_pclk_pd, 0x208, 5, 0);
|
||||
static CCU_GATE(CLK_MBOX3, mbox3_clk, "mbox3", apb3_cpusys_pclk_pd, 0x208, 4, 0);
|
||||
static CCU_GATE(CLK_WDT0, wdt0_clk, "wdt0", apb3_cpusys_pclk_pd, 0x208, 3, 0);
|
||||
static CCU_GATE(CLK_WDT1, wdt1_clk, "wdt1", apb3_cpusys_pclk_pd, 0x208, 2, 0);
|
||||
static CCU_GATE(CLK_TIMER0, timer0_clk, "timer0", apb3_cpusys_pclk_pd, 0x208, 1, 0);
|
||||
static CCU_GATE(CLK_TIMER1, timer1_clk, "timer1", apb3_cpusys_pclk_pd, 0x208, 0, 0);
|
||||
static CCU_GATE(CLK_SRAM0, sram0_clk, "sram0", axi_aclk_pd, 0x20c, 4, 0);
|
||||
static CCU_GATE(CLK_SRAM1, sram1_clk, "sram1", axi_aclk_pd, 0x20c, 3, 0);
|
||||
static CCU_GATE(CLK_SRAM2, sram2_clk, "sram2", axi_aclk_pd, 0x20c, 2, 0);
|
||||
static CCU_GATE(CLK_SRAM3, sram3_clk, "sram3", axi_aclk_pd, 0x20c, 1, 0);
|
||||
|
||||
static CCU_GATE(CLK_AXI4_VO_ACLK, axi4_vo_aclk, "axi4-vo-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(0), 0);
|
||||
video_pll_clk_pd, 0x0, 0, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_GPU_CORE, gpu_core_clk, "gpu-core-clk", video_pll_clk_pd,
|
||||
0x0, BIT(3), 0);
|
||||
0x0, 3, 0);
|
||||
static CCU_GATE(CLK_GPU_CFG_ACLK, gpu_cfg_aclk, "gpu-cfg-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(4), 0);
|
||||
video_pll_clk_pd, 0x0, 4, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_DPU_PIXELCLK0, dpu0_pixelclk, "dpu0-pixelclk",
|
||||
video_pll_clk_pd, 0x0, BIT(5), 0);
|
||||
dpu0_clk_pd, 0x0, 5, CLK_SET_RATE_PARENT);
|
||||
static CCU_GATE(CLK_DPU_PIXELCLK1, dpu1_pixelclk, "dpu1-pixelclk",
|
||||
video_pll_clk_pd, 0x0, BIT(6), 0);
|
||||
dpu1_clk_pd, 0x0, 6, CLK_SET_RATE_PARENT);
|
||||
static CCU_GATE(CLK_DPU_HCLK, dpu_hclk, "dpu-hclk", video_pll_clk_pd, 0x0,
|
||||
BIT(7), 0);
|
||||
7, 0);
|
||||
static CCU_GATE(CLK_DPU_ACLK, dpu_aclk, "dpu-aclk", video_pll_clk_pd, 0x0,
|
||||
BIT(8), 0);
|
||||
8, 0);
|
||||
static CCU_GATE(CLK_DPU_CCLK, dpu_cclk, "dpu-cclk", video_pll_clk_pd, 0x0,
|
||||
BIT(9), 0);
|
||||
9, 0);
|
||||
static CCU_GATE(CLK_HDMI_SFR, hdmi_sfr_clk, "hdmi-sfr-clk", video_pll_clk_pd,
|
||||
0x0, BIT(10), 0);
|
||||
0x0, 10, 0);
|
||||
static CCU_GATE(CLK_HDMI_PCLK, hdmi_pclk, "hdmi-pclk", video_pll_clk_pd, 0x0,
|
||||
BIT(11), 0);
|
||||
11, 0);
|
||||
static CCU_GATE(CLK_HDMI_CEC, hdmi_cec_clk, "hdmi-cec-clk", video_pll_clk_pd,
|
||||
0x0, BIT(12), 0);
|
||||
0x0, 12, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI0_PCLK, mipi_dsi0_pclk, "mipi-dsi0-pclk",
|
||||
video_pll_clk_pd, 0x0, BIT(13), 0);
|
||||
video_pll_clk_pd, 0x0, 13, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI1_PCLK, mipi_dsi1_pclk, "mipi-dsi1-pclk",
|
||||
video_pll_clk_pd, 0x0, BIT(14), 0);
|
||||
video_pll_clk_pd, 0x0, 14, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI0_CFG, mipi_dsi0_cfg_clk, "mipi-dsi0-cfg-clk",
|
||||
video_pll_clk_pd, 0x0, BIT(15), 0);
|
||||
video_pll_clk_pd, 0x0, 15, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI1_CFG, mipi_dsi1_cfg_clk, "mipi-dsi1-cfg-clk",
|
||||
video_pll_clk_pd, 0x0, BIT(16), 0);
|
||||
video_pll_clk_pd, 0x0, 16, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI0_REFCLK, mipi_dsi0_refclk, "mipi-dsi0-refclk",
|
||||
video_pll_clk_pd, 0x0, BIT(17), 0);
|
||||
video_pll_clk_pd, 0x0, 17, 0);
|
||||
static CCU_GATE(CLK_MIPI_DSI1_REFCLK, mipi_dsi1_refclk, "mipi-dsi1-refclk",
|
||||
video_pll_clk_pd, 0x0, BIT(18), 0);
|
||||
video_pll_clk_pd, 0x0, 18, 0);
|
||||
static CCU_GATE(CLK_HDMI_I2S, hdmi_i2s_clk, "hdmi-i2s-clk", video_pll_clk_pd,
|
||||
0x0, BIT(19), 0);
|
||||
0x0, 19, 0);
|
||||
static CCU_GATE(CLK_X2H_DPU1_ACLK, x2h_dpu1_aclk, "x2h-dpu1-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(20), 0);
|
||||
video_pll_clk_pd, 0x0, 20, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_X2H_DPU_ACLK, x2h_dpu_aclk, "x2h-dpu-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(21), 0);
|
||||
video_pll_clk_pd, 0x0, 21, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_AXI4_VO_PCLK, axi4_vo_pclk, "axi4-vo-pclk",
|
||||
video_pll_clk_pd, 0x0, BIT(22), 0);
|
||||
video_pll_clk_pd, 0x0, 22, 0);
|
||||
static CCU_GATE(CLK_IOPMP_VOSYS_DPU_PCLK, iopmp_vosys_dpu_pclk,
|
||||
"iopmp-vosys-dpu-pclk", video_pll_clk_pd, 0x0, BIT(23), 0);
|
||||
"iopmp-vosys-dpu-pclk", video_pll_clk_pd, 0x0, 23, 0);
|
||||
static CCU_GATE(CLK_IOPMP_VOSYS_DPU1_PCLK, iopmp_vosys_dpu1_pclk,
|
||||
"iopmp-vosys-dpu1-pclk", video_pll_clk_pd, 0x0, BIT(24), 0);
|
||||
"iopmp-vosys-dpu1-pclk", video_pll_clk_pd, 0x0, 24, 0);
|
||||
static CCU_GATE(CLK_IOPMP_VOSYS_GPU_PCLK, iopmp_vosys_gpu_pclk,
|
||||
"iopmp-vosys-gpu-pclk", video_pll_clk_pd, 0x0, BIT(25), 0);
|
||||
"iopmp-vosys-gpu-pclk", video_pll_clk_pd, 0x0, 25, 0);
|
||||
static CCU_GATE(CLK_IOPMP_DPU1_ACLK, iopmp_dpu1_aclk, "iopmp-dpu1-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(27), 0);
|
||||
video_pll_clk_pd, 0x0, 27, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_IOPMP_DPU_ACLK, iopmp_dpu_aclk, "iopmp-dpu-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(28), 0);
|
||||
video_pll_clk_pd, 0x0, 28, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_IOPMP_GPU_ACLK, iopmp_gpu_aclk, "iopmp-gpu-aclk",
|
||||
video_pll_clk_pd, 0x0, BIT(29), 0);
|
||||
video_pll_clk_pd, 0x0, 29, CLK_IS_CRITICAL);
|
||||
static CCU_GATE(CLK_MIPIDSI0_PIXCLK, mipi_dsi0_pixclk, "mipi-dsi0-pixclk",
|
||||
video_pll_clk_pd, 0x0, BIT(30), 0);
|
||||
video_pll_clk_pd, 0x0, 30, 0);
|
||||
static CCU_GATE(CLK_MIPIDSI1_PIXCLK, mipi_dsi1_pixclk, "mipi-dsi1-pixclk",
|
||||
video_pll_clk_pd, 0x0, BIT(31), 0);
|
||||
video_pll_clk_pd, 0x0, 31, 0);
|
||||
static CCU_GATE(CLK_HDMI_PIXCLK, hdmi_pixclk, "hdmi-pixclk", video_pll_clk_pd,
|
||||
0x4, BIT(0), 0);
|
||||
0x4, 0, 0);
|
||||
|
||||
static CLK_FIXED_FACTOR_HW(gmac_pll_clk_100m, "gmac-pll-clk-100m",
|
||||
&gmac_pll_clk.common.hw, 10, 1, 0);
|
||||
@@ -963,107 +1050,106 @@ static struct ccu_mux *th1520_mux_clks[] = {
|
||||
&uart_sclk,
|
||||
};
|
||||
|
||||
static struct ccu_common *th1520_gate_clks[] = {
|
||||
&emmc_sdio_clk.common,
|
||||
&aon2cpu_a2x_clk.common,
|
||||
&x2x_cpusys_clk.common,
|
||||
&brom_clk.common,
|
||||
&bmu_clk.common,
|
||||
&cpu2aon_x2h_clk.common,
|
||||
&cpu2peri_x2h_clk.common,
|
||||
&cpu2vp_clk.common,
|
||||
&perisys_apb1_hclk.common,
|
||||
&perisys_apb2_hclk.common,
|
||||
&perisys_apb3_hclk.common,
|
||||
&perisys_apb4_hclk.common,
|
||||
&npu_axi_clk.common,
|
||||
&gmac1_clk.common,
|
||||
&padctrl1_clk.common,
|
||||
&dsmart_clk.common,
|
||||
&padctrl0_clk.common,
|
||||
&gmac_axi_clk.common,
|
||||
&gpio3_clk.common,
|
||||
&gmac0_clk.common,
|
||||
&pwm_clk.common,
|
||||
&qspi0_clk.common,
|
||||
&qspi1_clk.common,
|
||||
&spi_clk.common,
|
||||
&uart0_pclk.common,
|
||||
&uart1_pclk.common,
|
||||
&uart2_pclk.common,
|
||||
&uart3_pclk.common,
|
||||
&uart4_pclk.common,
|
||||
&uart5_pclk.common,
|
||||
&gpio0_clk.common,
|
||||
&gpio1_clk.common,
|
||||
&gpio2_clk.common,
|
||||
&i2c0_clk.common,
|
||||
&i2c1_clk.common,
|
||||
&i2c2_clk.common,
|
||||
&i2c3_clk.common,
|
||||
&i2c4_clk.common,
|
||||
&i2c5_clk.common,
|
||||
&spinlock_clk.common,
|
||||
&dma_clk.common,
|
||||
&mbox0_clk.common,
|
||||
&mbox1_clk.common,
|
||||
&mbox2_clk.common,
|
||||
&mbox3_clk.common,
|
||||
&wdt0_clk.common,
|
||||
&wdt1_clk.common,
|
||||
&timer0_clk.common,
|
||||
&timer1_clk.common,
|
||||
&sram0_clk.common,
|
||||
&sram1_clk.common,
|
||||
&sram2_clk.common,
|
||||
&sram3_clk.common,
|
||||
static struct ccu_gate *th1520_gate_clks[] = {
|
||||
&emmc_sdio_clk,
|
||||
&aon2cpu_a2x_clk,
|
||||
&x2x_cpusys_clk,
|
||||
&brom_clk,
|
||||
&bmu_clk,
|
||||
&cpu2aon_x2h_clk,
|
||||
&cpu2peri_x2h_clk,
|
||||
&cpu2vp_clk,
|
||||
&perisys_apb1_hclk,
|
||||
&perisys_apb2_hclk,
|
||||
&perisys_apb3_hclk,
|
||||
&perisys_apb4_hclk,
|
||||
&npu_axi_clk,
|
||||
&gmac1_clk,
|
||||
&padctrl1_clk,
|
||||
&dsmart_clk,
|
||||
&padctrl0_clk,
|
||||
&gmac_axi_clk,
|
||||
&gpio3_clk,
|
||||
&gmac0_clk,
|
||||
&pwm_clk,
|
||||
&qspi0_clk,
|
||||
&qspi1_clk,
|
||||
&spi_clk,
|
||||
&uart0_pclk,
|
||||
&uart1_pclk,
|
||||
&uart2_pclk,
|
||||
&uart3_pclk,
|
||||
&uart4_pclk,
|
||||
&uart5_pclk,
|
||||
&gpio0_clk,
|
||||
&gpio1_clk,
|
||||
&gpio2_clk,
|
||||
&i2c0_clk,
|
||||
&i2c1_clk,
|
||||
&i2c2_clk,
|
||||
&i2c3_clk,
|
||||
&i2c4_clk,
|
||||
&i2c5_clk,
|
||||
&spinlock_clk,
|
||||
&dma_clk,
|
||||
&mbox0_clk,
|
||||
&mbox1_clk,
|
||||
&mbox2_clk,
|
||||
&mbox3_clk,
|
||||
&wdt0_clk,
|
||||
&wdt1_clk,
|
||||
&timer0_clk,
|
||||
&timer1_clk,
|
||||
&sram0_clk,
|
||||
&sram1_clk,
|
||||
&sram2_clk,
|
||||
&sram3_clk,
|
||||
};
|
||||
|
||||
static struct ccu_common *th1520_vo_gate_clks[] = {
|
||||
&axi4_vo_aclk.common,
|
||||
&gpu_core_clk.common,
|
||||
&gpu_cfg_aclk.common,
|
||||
&dpu0_pixelclk.common,
|
||||
&dpu1_pixelclk.common,
|
||||
&dpu_hclk.common,
|
||||
&dpu_aclk.common,
|
||||
&dpu_cclk.common,
|
||||
&hdmi_sfr_clk.common,
|
||||
&hdmi_pclk.common,
|
||||
&hdmi_cec_clk.common,
|
||||
&mipi_dsi0_pclk.common,
|
||||
&mipi_dsi1_pclk.common,
|
||||
&mipi_dsi0_cfg_clk.common,
|
||||
&mipi_dsi1_cfg_clk.common,
|
||||
&mipi_dsi0_refclk.common,
|
||||
&mipi_dsi1_refclk.common,
|
||||
&hdmi_i2s_clk.common,
|
||||
&x2h_dpu1_aclk.common,
|
||||
&x2h_dpu_aclk.common,
|
||||
&axi4_vo_pclk.common,
|
||||
&iopmp_vosys_dpu_pclk.common,
|
||||
&iopmp_vosys_dpu1_pclk.common,
|
||||
&iopmp_vosys_gpu_pclk.common,
|
||||
&iopmp_dpu1_aclk.common,
|
||||
&iopmp_dpu_aclk.common,
|
||||
&iopmp_gpu_aclk.common,
|
||||
&mipi_dsi0_pixclk.common,
|
||||
&mipi_dsi1_pixclk.common,
|
||||
&hdmi_pixclk.common
|
||||
static struct ccu_gate *th1520_vo_gate_clks[] = {
|
||||
&axi4_vo_aclk,
|
||||
&gpu_core_clk,
|
||||
&gpu_cfg_aclk,
|
||||
&dpu0_pixelclk,
|
||||
&dpu1_pixelclk,
|
||||
&dpu_hclk,
|
||||
&dpu_aclk,
|
||||
&dpu_cclk,
|
||||
&hdmi_sfr_clk,
|
||||
&hdmi_pclk,
|
||||
&hdmi_cec_clk,
|
||||
&mipi_dsi0_pclk,
|
||||
&mipi_dsi1_pclk,
|
||||
&mipi_dsi0_cfg_clk,
|
||||
&mipi_dsi1_cfg_clk,
|
||||
&mipi_dsi0_refclk,
|
||||
&mipi_dsi1_refclk,
|
||||
&hdmi_i2s_clk,
|
||||
&x2h_dpu1_aclk,
|
||||
&x2h_dpu_aclk,
|
||||
&axi4_vo_pclk,
|
||||
&iopmp_vosys_dpu_pclk,
|
||||
&iopmp_vosys_dpu1_pclk,
|
||||
&iopmp_vosys_gpu_pclk,
|
||||
&iopmp_dpu1_aclk,
|
||||
&iopmp_dpu_aclk,
|
||||
&iopmp_gpu_aclk,
|
||||
&mipi_dsi0_pixclk,
|
||||
&mipi_dsi1_pixclk,
|
||||
&hdmi_pixclk
|
||||
};
|
||||
|
||||
static const struct regmap_config th1520_clk_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.val_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
struct th1520_plat_data {
|
||||
struct ccu_common **th1520_pll_clks;
|
||||
struct ccu_common **th1520_div_clks;
|
||||
struct ccu_mux **th1520_mux_clks;
|
||||
struct ccu_common **th1520_gate_clks;
|
||||
struct ccu_gate **th1520_gate_clks;
|
||||
|
||||
int nr_clks;
|
||||
int nr_pll_clks;
|
||||
@@ -1102,7 +1188,6 @@ static int th1520_clk_probe(struct platform_device *pdev)
|
||||
|
||||
struct regmap *map;
|
||||
void __iomem *base;
|
||||
struct clk_hw *hw;
|
||||
int ret, i;
|
||||
|
||||
plat_data = device_get_match_data(&pdev->dev);
|
||||
@@ -1161,20 +1246,15 @@ static int th1520_clk_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
for (i = 0; i < plat_data->nr_gate_clks; i++) {
|
||||
struct ccu_gate *cg = hw_to_ccu_gate(&plat_data->th1520_gate_clks[i]->hw);
|
||||
struct ccu_gate *cg = plat_data->th1520_gate_clks[i];
|
||||
|
||||
plat_data->th1520_gate_clks[i]->map = map;
|
||||
cg->gate.reg = base + cg->reg;
|
||||
|
||||
hw = devm_clk_hw_register_gate_parent_data(dev,
|
||||
cg->common.hw.init->name,
|
||||
cg->common.hw.init->parent_data,
|
||||
cg->common.hw.init->flags,
|
||||
base + cg->common.cfg0,
|
||||
ffs(cg->enable) - 1, 0, NULL);
|
||||
if (IS_ERR(hw))
|
||||
return PTR_ERR(hw);
|
||||
ret = devm_clk_hw_register(dev, &cg->gate.hw);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
priv->hws[cg->common.clkid] = hw;
|
||||
priv->hws[cg->clkid] = &cg->gate.hw;
|
||||
}
|
||||
|
||||
if (plat_data == &th1520_ap_platdata) {
|
||||
|
||||
@@ -20,5 +20,7 @@
|
||||
#define R9A09G047_SPI_CLK_SPI 9
|
||||
#define R9A09G047_GBETH_0_CLK_PTP_REF_I 10
|
||||
#define R9A09G047_GBETH_1_CLK_PTP_REF_I 11
|
||||
#define R9A09G047_USB3_0_REF_ALT_CLK_P 12
|
||||
#define R9A09G047_USB3_0_CLKCORE 13
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G047_CPG_H__ */
|
||||
|
||||
@@ -25,5 +25,11 @@
|
||||
#define R9A09G077_CLK_PCLKM 13
|
||||
#define R9A09G077_CLK_PCLKL 14
|
||||
#define R9A09G077_SDHI_CLKHS 15
|
||||
#define R9A09G077_USB_CLK 16
|
||||
#define R9A09G077_ETCLKA 17
|
||||
#define R9A09G077_ETCLKB 18
|
||||
#define R9A09G077_ETCLKC 19
|
||||
#define R9A09G077_ETCLKD 20
|
||||
#define R9A09G077_ETCLKE 21
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G077_CPG_H__ */
|
||||
|
||||
@@ -25,5 +25,11 @@
|
||||
#define R9A09G087_CLK_PCLKM 13
|
||||
#define R9A09G087_CLK_PCLKL 14
|
||||
#define R9A09G087_SDHI_CLKHS 15
|
||||
#define R9A09G087_USB_CLK 16
|
||||
#define R9A09G087_ETCLKA 17
|
||||
#define R9A09G087_ETCLKB 18
|
||||
#define R9A09G087_ETCLKC 19
|
||||
#define R9A09G087_ETCLKD 20
|
||||
#define R9A09G087_ETCLKE 21
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_RENESAS_R9A09G087_CPG_H__ */
|
||||
|
||||
@@ -77,6 +77,10 @@
|
||||
#define CLK_I2S_BCLK 30
|
||||
#define CLK_APB 31
|
||||
#define CLK_WDT_BUS 32
|
||||
#define CLK_I2S_153P6 33
|
||||
#define CLK_I2S_153P6_BASE 34
|
||||
#define CLK_I2S_SYSCLK_SRC 35
|
||||
#define CLK_I2S_BCLK_FACTOR 36
|
||||
|
||||
/* MPMU resets */
|
||||
#define RESET_WDT 0
|
||||
@@ -182,6 +186,8 @@
|
||||
#define CLK_SSPA1_BUS 97
|
||||
#define CLK_TSEN_BUS 98
|
||||
#define CLK_IPC_AP2AUD_BUS 99
|
||||
#define CLK_SSPA0_I2S_BCLK 100
|
||||
#define CLK_SSPA1_I2S_BCLK 101
|
||||
|
||||
/* APBC resets */
|
||||
#define RESET_UART0 0
|
||||
|
||||
22
include/dt-bindings/pinctrl/renesas,r9a09g077-pinctrl.h
Normal file
22
include/dt-bindings/pinctrl/renesas,r9a09g077-pinctrl.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
|
||||
/*
|
||||
* This header provides constants for Renesas RZ/T2H family pinctrl bindings.
|
||||
*
|
||||
* Copyright (C) 2025 Renesas Electronics Corp.
|
||||
*/
|
||||
|
||||
#ifndef __DT_BINDINGS_PINCTRL_RENESAS_R9A09G077_PINCTRL_H__
|
||||
#define __DT_BINDINGS_PINCTRL_RENESAS_R9A09G077_PINCTRL_H__
|
||||
|
||||
#define RZT2H_PINS_PER_PORT 8
|
||||
|
||||
/*
|
||||
* Create the pin index from its bank and position numbers and store in
|
||||
* the upper 16 bits the alternate function identifier
|
||||
*/
|
||||
#define RZT2H_PORT_PINMUX(b, p, f) ((b) * RZT2H_PINS_PER_PORT + (p) | ((f) << 16))
|
||||
|
||||
/* Convert a port and pin label to its global pin index */
|
||||
#define RZT2H_GPIO(port, pin) ((port) * RZT2H_PINS_PER_PORT + (pin))
|
||||
|
||||
#endif /* __DT_BINDINGS_PINCTRL_RENESAS_R9A09G077_PINCTRL_H__ */
|
||||
@@ -30,6 +30,7 @@ to_spacemit_ccu_adev(struct auxiliary_device *adev)
|
||||
|
||||
/* MPMU register offset */
|
||||
#define MPMU_POSR 0x0010
|
||||
#define MPMU_FCCR 0x0008
|
||||
#define POSR_PLL1_LOCK BIT(27)
|
||||
#define POSR_PLL2_LOCK BIT(28)
|
||||
#define POSR_PLL3_LOCK BIT(29)
|
||||
|
||||
Reference in New Issue
Block a user