* [PATCH v3 1/5] clk: samsung: Instantiate Exynos4412 ISP clocks only when available
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
@ 2017-10-11 9:25 ` Marek Szyprowski
2017-10-11 9:25 ` [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller Marek Szyprowski
` (4 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-11 9:25 UTC (permalink / raw)
To: linux-clk, linux-samsung-soc
Cc: Marek Szyprowski, Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
located in the ISP power domain. Istatiate those clocks only when
provided clock registers resource covers those registers. This is
a preparation for adding a separate clock driver for ISP clocks,
which will be intergated with power domain using runtime PM feature.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
---
drivers/clk/samsung/clk-exynos4.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index e40b77583c47..bdd68247e054 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -822,6 +822,12 @@ static const struct samsung_div_clock exynos4x12_div_clks[] __initconst = {
DIV(0, "div_spi1_isp", "mout_spi1_isp", E4X12_DIV_ISP, 16, 4),
DIV(0, "div_spi1_isp_pre", "div_spi1_isp", E4X12_DIV_ISP, 20, 8),
DIV(0, "div_uart_isp", "mout_uart_isp", E4X12_DIV_ISP, 28, 4),
+ DIV(CLK_SCLK_FIMG2D, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4),
+ DIV(CLK_DIV_C2C, "div_c2c", "mout_c2c", DIV_DMC1, 4, 3),
+ DIV(0, "div_c2c_aclk", "div_c2c", DIV_DMC1, 12, 3),
+};
+
+static struct samsung_div_clock exynos4x12_isp_div_clks[] = {
DIV_F(CLK_DIV_ISP0, "div_isp0", "aclk200", E4X12_DIV_ISP0, 0, 3,
CLK_GET_RATE_NOCACHE, 0),
DIV_F(CLK_DIV_ISP1, "div_isp1", "aclk200", E4X12_DIV_ISP0, 4, 3,
@@ -831,9 +837,6 @@ static const struct samsung_div_clock exynos4x12_div_clks[] __initconst = {
4, 3, CLK_GET_RATE_NOCACHE, 0),
DIV_F(CLK_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1,
8, 3, CLK_GET_RATE_NOCACHE, 0),
- DIV(CLK_SCLK_FIMG2D, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4),
- DIV(CLK_DIV_C2C, "div_c2c", "mout_c2c", DIV_DMC1, 4, 3),
- DIV(0, "div_c2c_aclk", "div_c2c", DIV_DMC1, 12, 3),
};
/* list of gate clocks supported in all exynos4 soc's */
@@ -1132,6 +1135,13 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = {
0, 0),
GATE(CLK_I2S0, "i2s0", "aclk100", E4X12_GATE_IP_MAUDIO, 3,
0, 0),
+ GATE(CLK_G2D, "g2d", "aclk200", GATE_IP_DMC, 23, 0, 0),
+ GATE(CLK_SMMU_G2D, "smmu_g2d", "aclk200", GATE_IP_DMC, 24, 0, 0),
+ GATE(CLK_TMU_APBIF, "tmu_apbif", "aclk100", E4X12_GATE_IP_PERIR, 17, 0,
+ 0),
+};
+
+static struct samsung_gate_clock exynos4x12_isp_gate_clks[] = {
GATE(CLK_FIMC_ISP, "isp", "aclk200", E4X12_GATE_ISP0, 0,
CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
GATE(CLK_FIMC_DRC, "drc", "aclk200", E4X12_GATE_ISP0, 1,
@@ -1184,10 +1194,6 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = {
CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
GATE(CLK_SPI1_ISP, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_G2D, "g2d", "aclk200", GATE_IP_DMC, 23, 0, 0),
- GATE(CLK_SMMU_G2D, "smmu_g2d", "aclk200", GATE_IP_DMC, 24, 0, 0),
- GATE(CLK_TMU_APBIF, "tmu_apbif", "aclk100", E4X12_GATE_IP_PERIR, 17, 0,
- 0),
};
static const struct samsung_clock_alias exynos4_aliases[] __initconst = {
@@ -1522,6 +1528,8 @@ static void __init exynos4_clk_init(struct device_node *np,
e4210_armclk_d, ARRAY_SIZE(e4210_armclk_d),
CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
} else {
+ struct resource res;
+
samsung_clk_register_mux(ctx, exynos4x12_mux_clks,
ARRAY_SIZE(exynos4x12_mux_clks));
samsung_clk_register_div(ctx, exynos4x12_div_clks,
@@ -1533,6 +1541,15 @@ static void __init exynos4_clk_init(struct device_node *np,
samsung_clk_register_fixed_factor(ctx,
exynos4x12_fixed_factor_clks,
ARRAY_SIZE(exynos4x12_fixed_factor_clks));
+
+ of_address_to_resource(np, 0, &res);
+ if (resource_size(&res) > 0x18000) {
+ samsung_clk_register_div(ctx, exynos4x12_isp_div_clks,
+ ARRAY_SIZE(exynos4x12_isp_div_clks));
+ samsung_clk_register_gate(ctx, exynos4x12_isp_gate_clks,
+ ARRAY_SIZE(exynos4x12_isp_gate_clks));
+ }
+
if (of_machine_is_compatible("samsung,exynos4412")) {
exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
mout_core_p4x12[0], mout_core_p4x12[1], 0x14200,
--
2.14.2
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
2017-10-11 9:25 ` [PATCH v3 1/5] clk: samsung: Instantiate Exynos4412 ISP clocks only when available Marek Szyprowski
@ 2017-10-11 9:25 ` Marek Szyprowski
2017-10-11 17:05 ` Krzysztof Kozlowski
2017-10-13 22:03 ` Rob Herring
2017-10-11 9:25 ` [PATCH v3 3/5] clk: samsung: Add a separate driver for Exynos4412 ISP clocks Marek Szyprowski
` (3 subsequent siblings)
5 siblings, 2 replies; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-11 9:25 UTC (permalink / raw)
To: linux-clk, linux-samsung-soc
Cc: Marek Szyprowski, Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz, devicetree
Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
located in the ISP power domain. Because those registers are also
located in a different memory region than the main clock controller,
support for them can be provided by a separate clock controller.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
.../devicetree/bindings/clock/exynos4-clock.txt | 43 ++++++++++++++++++++++
include/dt-bindings/clock/exynos4.h | 35 ++++++++++++++++++
2 files changed, 78 insertions(+)
diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
index f5a5b19ed3b2..bc61c952cb0b 100644
--- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
@@ -41,3 +41,46 @@ Example 2: UART controller node that consumes the clock generated by the clock
clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
clock-names = "uart", "clk_uart_baud0";
};
+
+Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP)
+subsystem. Registers for those clocks are located in the ISP power domain.
+Because those registers are also located in a different memory region than
+the main clock controller, a separate clock controller has to be defined for
+handling them.
+
+Required Properties:
+
+- compatible: should be "samsung,exynos4412-isp-clock".
+
+- reg: physical base address of the ISP clock controller and length of memory
+ mapped region.
+
+- #clock-cells: should be 1.
+
+- clocks: list of the clock controller input clock identifiers,
+ from common clock bindings, should point to CLK_ACLK200 and
+ CLK_ACLK400_MCUISP clocks from the main clock controller.
+
+- clock-names: list of the clock controller input clock names,
+ as described in clock-bindings.txt, should be "aclk200" and
+ "aclk400_mcuisp".
+
+- power-domains: a phandle to ISP power domain node as described by
+ generic PM domain bindings.
+
+Example 3: The clock controllers bindings for Exynos4412 SoCs.
+
+ clock: clock-controller@10030000 {
+ compatible = "samsung,exynos4412-clock";
+ reg = <0x10030000 0x18000>;
+ #clock-cells = <1>;
+ };
+
+ isp_clock: clock-controller@10048000 {
+ compatible = "samsung,exynos4412-isp-clock";
+ reg = <0x10048000 0x1000>;
+ #clock-cells = <1>;
+ power-domains = <&pd_isp>;
+ clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>;
+ clock-names = "aclk200", "aclk400_mcuisp";
+ };
diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h
index c40111f36d5e..e9f9d400c322 100644
--- a/include/dt-bindings/clock/exynos4.h
+++ b/include/dt-bindings/clock/exynos4.h
@@ -272,4 +272,39 @@
/* must be greater than maximal clock id */
#define CLK_NR_CLKS 461
+/* Exynos4x12 ISP clocks */
+#define CLK_ISP_FIMC_ISP 1
+#define CLK_ISP_FIMC_DRC 2
+#define CLK_ISP_FIMC_FD 3
+#define CLK_ISP_FIMC_LITE0 4
+#define CLK_ISP_FIMC_LITE1 5
+#define CLK_ISP_MCUISP 6
+#define CLK_ISP_GICISP 7
+#define CLK_ISP_SMMU_ISP 8
+#define CLK_ISP_SMMU_DRC 9
+#define CLK_ISP_SMMU_FD 10
+#define CLK_ISP_SMMU_LITE0 11
+#define CLK_ISP_SMMU_LITE1 12
+#define CLK_ISP_PPMUISPMX 13
+#define CLK_ISP_PPMUISPX 14
+#define CLK_ISP_MCUCTL_ISP 15
+#define CLK_ISP_MPWM_ISP 16
+#define CLK_ISP_I2C0_ISP 17
+#define CLK_ISP_I2C1_ISP 18
+#define CLK_ISP_MTCADC_ISP 19
+#define CLK_ISP_PWM_ISP 20
+#define CLK_ISP_WDT_ISP 21
+#define CLK_ISP_UART_ISP 22
+#define CLK_ISP_ASYNCAXIM 23
+#define CLK_ISP_SMMU_ISPCX 24
+#define CLK_ISP_SPI0_ISP 25
+#define CLK_ISP_SPI1_ISP 26
+
+#define CLK_ISP_DIV_ISP0 27
+#define CLK_ISP_DIV_ISP1 28
+#define CLK_ISP_DIV_MCUISP0 29
+#define CLK_ISP_DIV_MCUISP1 30
+
+#define CLK_NR_ISP_CLKS 31
+
#endif /* _DT_BINDINGS_CLOCK_EXYNOS_4_H */
--
2.14.2
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-11 9:25 ` [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller Marek Szyprowski
@ 2017-10-11 17:05 ` Krzysztof Kozlowski
2017-10-12 6:47 ` Marek Szyprowski
2017-10-13 22:03 ` Rob Herring
1 sibling, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2017-10-11 17:05 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Bartlomiej Zolnierkiewicz, devicetree
On Wed, Oct 11, 2017 at 11:25:12AM +0200, Marek Szyprowski wrote:
> Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
> located in the ISP power domain. Because those registers are also
> located in a different memory region than the main clock controller,
> support for them can be provided by a separate clock controller.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> .../devicetree/bindings/clock/exynos4-clock.txt | 43 ++++++++++++++++++++++
> include/dt-bindings/clock/exynos4.h | 35 ++++++++++++++++++
> 2 files changed, 78 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> index f5a5b19ed3b2..bc61c952cb0b 100644
> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> @@ -41,3 +41,46 @@ Example 2: UART controller node that consumes the clock generated by the clock
> clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
> clock-names = "uart", "clk_uart_baud0";
> };
> +
> +Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP)
> +subsystem. Registers for those clocks are located in the ISP power domain.
> +Because those registers are also located in a different memory region than
> +the main clock controller, a separate clock controller has to be defined for
> +handling them.
> +
> +Required Properties:
> +
> +- compatible: should be "samsung,exynos4412-isp-clock".
> +
> +- reg: physical base address of the ISP clock controller and length of memory
> + mapped region.
> +
> +- #clock-cells: should be 1.
> +
> +- clocks: list of the clock controller input clock identifiers,
> + from common clock bindings, should point to CLK_ACLK200 and
> + CLK_ACLK400_MCUISP clocks from the main clock controller.
> +
> +- clock-names: list of the clock controller input clock names,
> + as described in clock-bindings.txt, should be "aclk200" and
> + "aclk400_mcuisp".
> +
> +- power-domains: a phandle to ISP power domain node as described by
> + generic PM domain bindings.
> +
> +Example 3: The clock controllers bindings for Exynos4412 SoCs.
> +
> + clock: clock-controller@10030000 {
> + compatible = "samsung,exynos4412-clock";
> + reg = <0x10030000 0x18000>;
> + #clock-cells = <1>;
> + };
> +
> + isp_clock: clock-controller@10048000 {
> + compatible = "samsung,exynos4412-isp-clock";
> + reg = <0x10048000 0x1000>;
> + #clock-cells = <1>;
> + power-domains = <&pd_isp>;
> + clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>;
> + clock-names = "aclk200", "aclk400_mcuisp";
> + };
> diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h
> index c40111f36d5e..e9f9d400c322 100644
> --- a/include/dt-bindings/clock/exynos4.h
> +++ b/include/dt-bindings/clock/exynos4.h
> @@ -272,4 +272,39 @@
> /* must be greater than maximal clock id */
> #define CLK_NR_CLKS 461
>
> +/* Exynos4x12 ISP clocks */
Shouldn't the clock IDs go with driver changes? I think only the
Documentation/ part should be separate.
Best regards,
Krzysztof
> +#define CLK_ISP_FIMC_ISP 1
> +#define CLK_ISP_FIMC_DRC 2
> +#define CLK_ISP_FIMC_FD 3
> +#define CLK_ISP_FIMC_LITE0 4
> +#define CLK_ISP_FIMC_LITE1 5
> +#define CLK_ISP_MCUISP 6
> +#define CLK_ISP_GICISP 7
> +#define CLK_ISP_SMMU_ISP 8
> +#define CLK_ISP_SMMU_DRC 9
> +#define CLK_ISP_SMMU_FD 10
> +#define CLK_ISP_SMMU_LITE0 11
> +#define CLK_ISP_SMMU_LITE1 12
> +#define CLK_ISP_PPMUISPMX 13
> +#define CLK_ISP_PPMUISPX 14
> +#define CLK_ISP_MCUCTL_ISP 15
> +#define CLK_ISP_MPWM_ISP 16
> +#define CLK_ISP_I2C0_ISP 17
> +#define CLK_ISP_I2C1_ISP 18
> +#define CLK_ISP_MTCADC_ISP 19
> +#define CLK_ISP_PWM_ISP 20
> +#define CLK_ISP_WDT_ISP 21
> +#define CLK_ISP_UART_ISP 22
> +#define CLK_ISP_ASYNCAXIM 23
> +#define CLK_ISP_SMMU_ISPCX 24
> +#define CLK_ISP_SPI0_ISP 25
> +#define CLK_ISP_SPI1_ISP 26
> +
> +#define CLK_ISP_DIV_ISP0 27
> +#define CLK_ISP_DIV_ISP1 28
> +#define CLK_ISP_DIV_MCUISP0 29
> +#define CLK_ISP_DIV_MCUISP1 30
> +
> +#define CLK_NR_ISP_CLKS 31
> +
> #endif /* _DT_BINDINGS_CLOCK_EXYNOS_4_H */
> --
> 2.14.2
>
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-11 17:05 ` Krzysztof Kozlowski
@ 2017-10-12 6:47 ` Marek Szyprowski
2017-10-12 7:08 ` Krzysztof Kozlowski
0 siblings, 1 reply; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-12 6:47 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Bartlomiej Zolnierkiewicz, devicetree
Hi Krzysztof,
On 2017-10-11 19:05, Krzysztof Kozlowski wrote:
> On Wed, Oct 11, 2017 at 11:25:12AM +0200, Marek Szyprowski wrote:
>> Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
>> located in the ISP power domain. Because those registers are also
>> located in a different memory region than the main clock controller,
>> support for them can be provided by a separate clock controller.
>>
>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>> ---
>> .../devicetree/bindings/clock/exynos4-clock.txt | 43 ++++++++++++++++++++++
>> include/dt-bindings/clock/exynos4.h | 35 ++++++++++++++++++
>> 2 files changed, 78 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>> index f5a5b19ed3b2..bc61c952cb0b 100644
>> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>> @@ -41,3 +41,46 @@ Example 2: UART controller node that consumes the clock generated by the clock
>> clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
>> clock-names = "uart", "clk_uart_baud0";
>> };
>> +
>> +Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP)
>> +subsystem. Registers for those clocks are located in the ISP power domain.
>> +Because those registers are also located in a different memory region than
>> +the main clock controller, a separate clock controller has to be defined for
>> +handling them.
>> +
>> +Required Properties:
>> +
>> +- compatible: should be "samsung,exynos4412-isp-clock".
>> +
>> +- reg: physical base address of the ISP clock controller and length of memory
>> + mapped region.
>> +
>> +- #clock-cells: should be 1.
>> +
>> +- clocks: list of the clock controller input clock identifiers,
>> + from common clock bindings, should point to CLK_ACLK200 and
>> + CLK_ACLK400_MCUISP clocks from the main clock controller.
>> +
>> +- clock-names: list of the clock controller input clock names,
>> + as described in clock-bindings.txt, should be "aclk200" and
>> + "aclk400_mcuisp".
>> +
>> +- power-domains: a phandle to ISP power domain node as described by
>> + generic PM domain bindings.
>> +
>> +Example 3: The clock controllers bindings for Exynos4412 SoCs.
>> +
>> + clock: clock-controller@10030000 {
>> + compatible = "samsung,exynos4412-clock";
>> + reg = <0x10030000 0x18000>;
>> + #clock-cells = <1>;
>> + };
>> +
>> + isp_clock: clock-controller@10048000 {
>> + compatible = "samsung,exynos4412-isp-clock";
>> + reg = <0x10048000 0x1000>;
>> + #clock-cells = <1>;
>> + power-domains = <&pd_isp>;
>> + clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>;
>> + clock-names = "aclk200", "aclk400_mcuisp";
>> + };
>> diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h
>> index c40111f36d5e..e9f9d400c322 100644
>> --- a/include/dt-bindings/clock/exynos4.h
>> +++ b/include/dt-bindings/clock/exynos4.h
>> @@ -272,4 +272,39 @@
>> /* must be greater than maximal clock id */
>> #define CLK_NR_CLKS 461
>>
>> +/* Exynos4x12 ISP clocks */
> Shouldn't the clock IDs go with driver changes? I think only the
> Documentation/ part should be separate.
Well, Rob asked to move dt bindings and dt include to the separate patch.
I see no value-added by such split, as both dt and driver patches will be
processed together anyway, but I didn't want to have this patchset blocked
by this issue.
> ...
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-12 6:47 ` Marek Szyprowski
@ 2017-10-12 7:08 ` Krzysztof Kozlowski
2017-10-13 22:02 ` Rob Herring
0 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2017-10-12 7:08 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Bartlomiej Zolnierkiewicz, devicetree
On Thu, Oct 12, 2017 at 8:47 AM, Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
> Hi Krzysztof,
>
>
> On 2017-10-11 19:05, Krzysztof Kozlowski wrote:
>>
>> On Wed, Oct 11, 2017 at 11:25:12AM +0200, Marek Szyprowski wrote:
>>>
>>> Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
>>> located in the ISP power domain. Because those registers are also
>>> located in a different memory region than the main clock controller,
>>> support for them can be provided by a separate clock controller.
>>>
>>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>>> ---
>>> .../devicetree/bindings/clock/exynos4-clock.txt | 43
>>> ++++++++++++++++++++++
>>> include/dt-bindings/clock/exynos4.h | 35
>>> ++++++++++++++++++
>>> 2 files changed, 78 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> index f5a5b19ed3b2..bc61c952cb0b 100644
>>> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
>>> @@ -41,3 +41,46 @@ Example 2: UART controller node that consumes the
>>> clock generated by the clock
>>> clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
>>> clock-names = "uart", "clk_uart_baud0";
>>> };
>>> +
>>> +Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP)
>>> +subsystem. Registers for those clocks are located in the ISP power
>>> domain.
>>> +Because those registers are also located in a different memory region
>>> than
>>> +the main clock controller, a separate clock controller has to be defined
>>> for
>>> +handling them.
>>> +
>>> +Required Properties:
>>> +
>>> +- compatible: should be "samsung,exynos4412-isp-clock".
>>> +
>>> +- reg: physical base address of the ISP clock controller and length of
>>> memory
>>> + mapped region.
>>> +
>>> +- #clock-cells: should be 1.
>>> +
>>> +- clocks: list of the clock controller input clock identifiers,
>>> + from common clock bindings, should point to CLK_ACLK200 and
>>> + CLK_ACLK400_MCUISP clocks from the main clock controller.
>>> +
>>> +- clock-names: list of the clock controller input clock names,
>>> + as described in clock-bindings.txt, should be "aclk200" and
>>> + "aclk400_mcuisp".
>>> +
>>> +- power-domains: a phandle to ISP power domain node as described by
>>> + generic PM domain bindings.
>>> +
>>> +Example 3: The clock controllers bindings for Exynos4412 SoCs.
>>> +
>>> + clock: clock-controller@10030000 {
>>> + compatible = "samsung,exynos4412-clock";
>>> + reg = <0x10030000 0x18000>;
>>> + #clock-cells = <1>;
>>> + };
>>> +
>>> + isp_clock: clock-controller@10048000 {
>>> + compatible = "samsung,exynos4412-isp-clock";
>>> + reg = <0x10048000 0x1000>;
>>> + #clock-cells = <1>;
>>> + power-domains = <&pd_isp>;
>>> + clocks = <&clock CLK_ACLK200>, <&clock
>>> CLK_ACLK400_MCUISP>;
>>> + clock-names = "aclk200", "aclk400_mcuisp";
>>> + };
>>> diff --git a/include/dt-bindings/clock/exynos4.h
>>> b/include/dt-bindings/clock/exynos4.h
>>> index c40111f36d5e..e9f9d400c322 100644
>>> --- a/include/dt-bindings/clock/exynos4.h
>>> +++ b/include/dt-bindings/clock/exynos4.h
>>> @@ -272,4 +272,39 @@
>>> /* must be greater than maximal clock id */
>>> #define CLK_NR_CLKS 461
>>> +/* Exynos4x12 ISP clocks */
>>
>> Shouldn't the clock IDs go with driver changes? I think only the
>> Documentation/ part should be separate.
>
>
> Well, Rob asked to move dt bindings and dt include to the separate patch.
>
> I see no value-added by such split, as both dt and driver patches will be
> processed together anyway, but I didn't want to have this patchset blocked
> by this issue.
I understand... actually I think it does not matter where the clock
IDs would go. From my perspective both approaches look fine so in any
case:
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-12 7:08 ` Krzysztof Kozlowski
@ 2017-10-13 22:02 ` Rob Herring
0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2017-10-13 22:02 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Marek Szyprowski, linux-clk, linux-samsung-soc,
Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Bartlomiej Zolnierkiewicz, devicetree
On Thu, Oct 12, 2017 at 09:08:32AM +0200, Krzysztof Kozlowski wrote:
> On Thu, Oct 12, 2017 at 8:47 AM, Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
> > Hi Krzysztof,
> >
> >
> > On 2017-10-11 19:05, Krzysztof Kozlowski wrote:
> >>
> >> On Wed, Oct 11, 2017 at 11:25:12AM +0200, Marek Szyprowski wrote:
> >>>
> >>> Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
> >>> located in the ISP power domain. Because those registers are also
> >>> located in a different memory region than the main clock controller,
> >>> support for them can be provided by a separate clock controller.
> >>>
> >>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> >>> ---
> >>> .../devicetree/bindings/clock/exynos4-clock.txt | 43
> >>> ++++++++++++++++++++++
> >>> include/dt-bindings/clock/exynos4.h | 35
> >>> ++++++++++++++++++
> >>> 2 files changed, 78 insertions(+)
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> >>> b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> >>> index f5a5b19ed3b2..bc61c952cb0b 100644
> >>> --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> >>> +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
> >>> @@ -41,3 +41,46 @@ Example 2: UART controller node that consumes the
> >>> clock generated by the clock
> >>> clocks = <&clock CLK_UART2>, <&clock CLK_SCLK_UART2>;
> >>> clock-names = "uart", "clk_uart_baud0";
> >>> };
> >>> +
> >>> +Exynos4412 SoC contains some additional clocks for FIMC-ISP (Camera ISP)
> >>> +subsystem. Registers for those clocks are located in the ISP power
> >>> domain.
> >>> +Because those registers are also located in a different memory region
> >>> than
> >>> +the main clock controller, a separate clock controller has to be defined
> >>> for
> >>> +handling them.
> >>> +
> >>> +Required Properties:
> >>> +
> >>> +- compatible: should be "samsung,exynos4412-isp-clock".
> >>> +
> >>> +- reg: physical base address of the ISP clock controller and length of
> >>> memory
> >>> + mapped region.
> >>> +
> >>> +- #clock-cells: should be 1.
> >>> +
> >>> +- clocks: list of the clock controller input clock identifiers,
> >>> + from common clock bindings, should point to CLK_ACLK200 and
> >>> + CLK_ACLK400_MCUISP clocks from the main clock controller.
> >>> +
> >>> +- clock-names: list of the clock controller input clock names,
> >>> + as described in clock-bindings.txt, should be "aclk200" and
> >>> + "aclk400_mcuisp".
> >>> +
> >>> +- power-domains: a phandle to ISP power domain node as described by
> >>> + generic PM domain bindings.
> >>> +
> >>> +Example 3: The clock controllers bindings for Exynos4412 SoCs.
> >>> +
> >>> + clock: clock-controller@10030000 {
> >>> + compatible = "samsung,exynos4412-clock";
> >>> + reg = <0x10030000 0x18000>;
> >>> + #clock-cells = <1>;
> >>> + };
> >>> +
> >>> + isp_clock: clock-controller@10048000 {
> >>> + compatible = "samsung,exynos4412-isp-clock";
> >>> + reg = <0x10048000 0x1000>;
> >>> + #clock-cells = <1>;
> >>> + power-domains = <&pd_isp>;
> >>> + clocks = <&clock CLK_ACLK200>, <&clock
> >>> CLK_ACLK400_MCUISP>;
> >>> + clock-names = "aclk200", "aclk400_mcuisp";
> >>> + };
> >>> diff --git a/include/dt-bindings/clock/exynos4.h
> >>> b/include/dt-bindings/clock/exynos4.h
> >>> index c40111f36d5e..e9f9d400c322 100644
> >>> --- a/include/dt-bindings/clock/exynos4.h
> >>> +++ b/include/dt-bindings/clock/exynos4.h
> >>> @@ -272,4 +272,39 @@
> >>> /* must be greater than maximal clock id */
> >>> #define CLK_NR_CLKS 461
> >>> +/* Exynos4x12 ISP clocks */
> >>
> >> Shouldn't the clock IDs go with driver changes? I think only the
> >> Documentation/ part should be separate.
> >
> >
> > Well, Rob asked to move dt bindings and dt include to the separate patch.
> >
> > I see no value-added by such split, as both dt and driver patches will be
> > processed together anyway, but I didn't want to have this patchset blocked
> > by this issue.
First, I mainly review the bindings and not the drivers and splitting
them more accurately captures what was reviewed. Second, for the DT only
tree generated from the kernel using git-filter-branch[1], the commit
history will be more logical if it is keeping and dropping entire
commits rather than 1/2 a commit.
> I understand... actually I think it does not matter where the clock
> IDs would go. From my perspective both approaches look fine so in any
> case:
> Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
The IDs are part of the ABI which is defined by the binding doc.
Rob
[1] https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
2017-10-11 9:25 ` [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller Marek Szyprowski
2017-10-11 17:05 ` Krzysztof Kozlowski
@ 2017-10-13 22:03 ` Rob Herring
1 sibling, 0 replies; 14+ messages in thread
From: Rob Herring @ 2017-10-13 22:03 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz,
devicetree
On Wed, Oct 11, 2017 at 11:25:12AM +0200, Marek Szyprowski wrote:
> Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
> located in the ISP power domain. Because those registers are also
> located in a different memory region than the main clock controller,
> support for them can be provided by a separate clock controller.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> .../devicetree/bindings/clock/exynos4-clock.txt | 43 ++++++++++++++++++++++
> include/dt-bindings/clock/exynos4.h | 35 ++++++++++++++++++
> 2 files changed, 78 insertions(+)
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3 3/5] clk: samsung: Add a separate driver for Exynos4412 ISP clocks
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
2017-10-11 9:25 ` [PATCH v3 1/5] clk: samsung: Instantiate Exynos4412 ISP clocks only when available Marek Szyprowski
2017-10-11 9:25 ` [PATCH v3 2/5] clk: samsung: Add dt bindings for Exynos4412 ISP clock controller Marek Szyprowski
@ 2017-10-11 9:25 ` Marek Szyprowski
2017-10-11 9:25 ` [PATCH v3 4/5] ARM: dts: exynos: Add Exynos4412 ISP clock controller Marek Szyprowski
` (2 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-11 9:25 UTC (permalink / raw)
To: linux-clk, linux-samsung-soc
Cc: Marek Szyprowski, Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
Some registers for the Exynos 4412 ISP (Camera subsystem) clocks are
located in the ISP power domain. Because those registers are also
located in a different memory region than the main clock controller,
support for them can be provided by a separate clock controller.
This in turn allows to almost seamlessly make it aware of the power
domain using recently introduced runtime PM support for clocks.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
---
drivers/clk/samsung/Makefile | 1 +
drivers/clk/samsung/clk-exynos4412-isp.c | 179 +++++++++++++++++++++++++++++++
2 files changed, 180 insertions(+)
create mode 100644 drivers/clk/samsung/clk-exynos4412-isp.c
diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
index 7afc21dc374e..8a67a3bb6803 100644
--- a/drivers/clk/samsung/Makefile
+++ b/drivers/clk/samsung/Makefile
@@ -5,6 +5,7 @@
obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o clk-cpu.o
obj-$(CONFIG_SOC_EXYNOS3250) += clk-exynos3250.o
obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o
+obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4412-isp.o
obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o
obj-$(CONFIG_SOC_EXYNOS5260) += clk-exynos5260.o
obj-$(CONFIG_SOC_EXYNOS5410) += clk-exynos5410.o
diff --git a/drivers/clk/samsung/clk-exynos4412-isp.c b/drivers/clk/samsung/clk-exynos4412-isp.c
new file mode 100644
index 000000000000..d5f1ccb36300
--- /dev/null
+++ b/drivers/clk/samsung/clk-exynos4412-isp.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Author: Marek Szyprowski <m.szyprowski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Common Clock Framework support for Exynos4412 ISP module.
+*/
+
+#include <dt-bindings/clock/exynos4.h>
+#include <linux/slab.h>
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+
+#include "clk.h"
+
+/* Exynos4x12 specific registers, which belong to ISP power domain */
+#define E4X12_DIV_ISP0 0x0300
+#define E4X12_DIV_ISP1 0x0304
+#define E4X12_GATE_ISP0 0x0800
+#define E4X12_GATE_ISP1 0x0804
+
+/*
+ * Support for CMU save/restore across system suspends
+ */
+static struct samsung_clk_reg_dump *exynos4x12_save_isp;
+
+static const unsigned long exynos4x12_clk_isp_save[] __initconst = {
+ E4X12_DIV_ISP0,
+ E4X12_DIV_ISP1,
+ E4X12_GATE_ISP0,
+ E4X12_GATE_ISP1,
+};
+
+PNAME(mout_user_aclk400_mcuisp_p4x12) = { "fin_pll", "div_aclk400_mcuisp", };
+
+static struct samsung_div_clock exynos4x12_isp_div_clks[] = {
+ DIV(CLK_ISP_DIV_ISP0, "div_isp0", "aclk200", E4X12_DIV_ISP0, 0, 3),
+ DIV(CLK_ISP_DIV_ISP1, "div_isp1", "aclk200", E4X12_DIV_ISP0, 4, 3),
+ DIV(CLK_ISP_DIV_MCUISP0, "div_mcuisp0", "aclk400_mcuisp",
+ E4X12_DIV_ISP1, 4, 3),
+ DIV(CLK_ISP_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0",
+ E4X12_DIV_ISP1, 8, 3),
+ DIV(0, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3),
+};
+
+static struct samsung_gate_clock exynos4x12_isp_gate_clks[] = {
+ GATE(CLK_ISP_FIMC_ISP, "isp", "aclk200", E4X12_GATE_ISP0, 0, 0, 0),
+ GATE(CLK_ISP_FIMC_DRC, "drc", "aclk200", E4X12_GATE_ISP0, 1, 0, 0),
+ GATE(CLK_ISP_FIMC_FD, "fd", "aclk200", E4X12_GATE_ISP0, 2, 0, 0),
+ GATE(CLK_ISP_FIMC_LITE0, "lite0", "aclk200", E4X12_GATE_ISP0, 3, 0, 0),
+ GATE(CLK_ISP_FIMC_LITE1, "lite1", "aclk200", E4X12_GATE_ISP0, 4, 0, 0),
+ GATE(CLK_ISP_MCUISP, "mcuisp", "aclk200", E4X12_GATE_ISP0, 5, 0, 0),
+ GATE(CLK_ISP_GICISP, "gicisp", "aclk200", E4X12_GATE_ISP0, 7, 0, 0),
+ GATE(CLK_ISP_SMMU_ISP, "smmu_isp", "aclk200", E4X12_GATE_ISP0, 8, 0, 0),
+ GATE(CLK_ISP_SMMU_DRC, "smmu_drc", "aclk200", E4X12_GATE_ISP0, 9, 0, 0),
+ GATE(CLK_ISP_SMMU_FD, "smmu_fd", "aclk200", E4X12_GATE_ISP0, 10, 0, 0),
+ GATE(CLK_ISP_SMMU_LITE0, "smmu_lite0", "aclk200", E4X12_GATE_ISP0, 11,
+ 0, 0),
+ GATE(CLK_ISP_SMMU_LITE1, "smmu_lite1", "aclk200", E4X12_GATE_ISP0, 12,
+ 0, 0),
+ GATE(CLK_ISP_PPMUISPMX, "ppmuispmx", "aclk200", E4X12_GATE_ISP0, 20,
+ 0, 0),
+ GATE(CLK_ISP_PPMUISPX, "ppmuispx", "aclk200", E4X12_GATE_ISP0, 21,
+ 0, 0),
+ GATE(CLK_ISP_MCUCTL_ISP, "mcuctl_isp", "aclk200", E4X12_GATE_ISP0, 23,
+ 0, 0),
+ GATE(CLK_ISP_MPWM_ISP, "mpwm_isp", "aclk200", E4X12_GATE_ISP0, 24,
+ 0, 0),
+ GATE(CLK_ISP_I2C0_ISP, "i2c0_isp", "aclk200", E4X12_GATE_ISP0, 25,
+ 0, 0),
+ GATE(CLK_ISP_I2C1_ISP, "i2c1_isp", "aclk200", E4X12_GATE_ISP0, 26,
+ 0, 0),
+ GATE(CLK_ISP_MTCADC_ISP, "mtcadc_isp", "aclk200", E4X12_GATE_ISP0, 27,
+ 0, 0),
+ GATE(CLK_ISP_PWM_ISP, "pwm_isp", "aclk200", E4X12_GATE_ISP0, 28, 0, 0),
+ GATE(CLK_ISP_WDT_ISP, "wdt_isp", "aclk200", E4X12_GATE_ISP0, 30, 0, 0),
+ GATE(CLK_ISP_UART_ISP, "uart_isp", "aclk200", E4X12_GATE_ISP0, 31,
+ 0, 0),
+ GATE(CLK_ISP_ASYNCAXIM, "asyncaxim", "aclk200", E4X12_GATE_ISP1, 0,
+ 0, 0),
+ GATE(CLK_ISP_SMMU_ISPCX, "smmu_ispcx", "aclk200", E4X12_GATE_ISP1, 4,
+ 0, 0),
+ GATE(CLK_ISP_SPI0_ISP, "spi0_isp", "aclk200", E4X12_GATE_ISP1, 12,
+ 0, 0),
+ GATE(CLK_ISP_SPI1_ISP, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
+ 0, 0),
+};
+
+static int __maybe_unused exynos4x12_isp_clk_suspend(struct device *dev)
+{
+ struct samsung_clk_provider *ctx = dev_get_drvdata(dev);
+
+ samsung_clk_save(ctx->reg_base, exynos4x12_save_isp,
+ ARRAY_SIZE(exynos4x12_clk_isp_save));
+ return 0;
+}
+
+static int __maybe_unused exynos4x12_isp_clk_resume(struct device *dev)
+{
+ struct samsung_clk_provider *ctx = dev_get_drvdata(dev);
+
+ samsung_clk_restore(ctx->reg_base, exynos4x12_save_isp,
+ ARRAY_SIZE(exynos4x12_clk_isp_save));
+ return 0;
+}
+
+static int __init exynos4x12_isp_clk_probe(struct platform_device *pdev)
+{
+ struct samsung_clk_provider *ctx;
+ struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
+ struct resource *res;
+ void __iomem *reg_base;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ reg_base = devm_ioremap_resource(dev, res);
+ if (IS_ERR(reg_base)) {
+ dev_err(dev, "failed to map registers\n");
+ return PTR_ERR(reg_base);
+ }
+
+ exynos4x12_save_isp = samsung_clk_alloc_reg_dump(exynos4x12_clk_isp_save,
+ ARRAY_SIZE(exynos4x12_clk_isp_save));
+ if (!exynos4x12_save_isp)
+ return -ENOMEM;
+
+ ctx = samsung_clk_init(np, reg_base, CLK_NR_ISP_CLKS);
+ ctx->dev = dev;
+
+ platform_set_drvdata(pdev, ctx);
+
+ pm_runtime_set_active(dev);
+ pm_runtime_enable(dev);
+ pm_runtime_get_sync(dev);
+
+ samsung_clk_register_div(ctx, exynos4x12_isp_div_clks,
+ ARRAY_SIZE(exynos4x12_isp_div_clks));
+ samsung_clk_register_gate(ctx, exynos4x12_isp_gate_clks,
+ ARRAY_SIZE(exynos4x12_isp_gate_clks));
+
+ samsung_clk_of_add_provider(np, ctx);
+ pm_runtime_put(dev);
+
+ return 0;
+}
+
+static const struct of_device_id exynos4x12_isp_clk_of_match[] = {
+ { .compatible = "samsung,exynos4412-isp-clock", },
+ { },
+};
+
+static const struct dev_pm_ops exynos4x12_isp_pm_ops = {
+ SET_RUNTIME_PM_OPS(exynos4x12_isp_clk_suspend,
+ exynos4x12_isp_clk_resume, NULL)
+ SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
+ pm_runtime_force_resume)
+};
+
+static struct platform_driver exynos4x12_isp_clk_driver __refdata = {
+ .driver = {
+ .name = "exynos4x12-isp-clk",
+ .of_match_table = exynos4x12_isp_clk_of_match,
+ .suppress_bind_attrs = true,
+ .pm = &exynos4x12_isp_pm_ops,
+ },
+ .probe = exynos4x12_isp_clk_probe,
+};
+
+static int __init exynos4x12_isp_clk_init(void)
+{
+ return platform_driver_register(&exynos4x12_isp_clk_driver);
+}
+core_initcall(exynos4x12_isp_clk_init);
--
2.14.2
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH v3 4/5] ARM: dts: exynos: Add Exynos4412 ISP clock controller
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
` (2 preceding siblings ...)
2017-10-11 9:25 ` [PATCH v3 3/5] clk: samsung: Add a separate driver for Exynos4412 ISP clocks Marek Szyprowski
@ 2017-10-11 9:25 ` Marek Szyprowski
2017-11-29 18:08 ` Krzysztof Kozlowski
2017-10-11 9:25 ` [PATCH v3 5/5] clk: samsung: Remove obsolete code for Exynos4412 ISP clocks Marek Szyprowski
2017-10-16 13:24 ` [PATCH v3 0/5] Fix problems with " Sylwester Nawrocki
5 siblings, 1 reply; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-11 9:25 UTC (permalink / raw)
To: linux-clk, linux-samsung-soc
Cc: Marek Szyprowski, Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
Exynos4412 ISP clock controller is located in the SOC area, which belongs
to ISP power domain. This patch instantiates a separate clock driver
for those clocks, updates all clients of ISP clocks and ensures that the
driver is properly integrated in ISP power domin.
This finally solves all the mysterious freezes in accessing ISP clocks
when ISP power domain is disabled.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
arch/arm/boot/dts/exynos4412.dtsi | 71 ++++++++++++++++++++++++---------------
1 file changed, 44 insertions(+), 27 deletions(-)
diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi
index 7ff03a7e8fb9..2a2f1e596672 100644
--- a/arch/arm/boot/dts/exynos4412.dtsi
+++ b/arch/arm/boot/dts/exynos4412.dtsi
@@ -191,10 +191,19 @@
clock: clock-controller@10030000 {
compatible = "samsung,exynos4412-clock";
- reg = <0x10030000 0x20000>;
+ reg = <0x10030000 0x18000>;
#clock-cells = <1>;
};
+ isp_clock: clock-controller@10048000 {
+ compatible = "samsung,exynos4412-isp-clock";
+ reg = <0x10048000 0x1000>;
+ #clock-cells = <1>;
+ power-domains = <&pd_isp>;
+ clocks = <&clock CLK_ACLK200>, <&clock CLK_ACLK400_MCUISP>;
+ clock-names = "aclk200", "aclk400_mcuisp";
+ };
+
mct@10050000 {
compatible = "samsung,exynos4412-mct";
reg = <0x10050000 0x800>;
@@ -257,7 +266,7 @@
reg = <0x12390000 0x1000>;
interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&pd_isp>;
- clocks = <&clock CLK_FIMC_LITE0>;
+ clocks = <&isp_clock CLK_ISP_FIMC_LITE0>;
clock-names = "flite";
iommus = <&sysmmu_fimc_lite0>;
status = "disabled";
@@ -268,7 +277,7 @@
reg = <0x123A0000 0x1000>;
interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&pd_isp>;
- clocks = <&clock CLK_FIMC_LITE1>;
+ clocks = <&isp_clock CLK_ISP_FIMC_LITE1>;
clock-names = "flite";
iommus = <&sysmmu_fimc_lite1>;
status = "disabled";
@@ -280,29 +289,35 @@
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&pd_isp>;
- clocks = <&clock CLK_FIMC_LITE0>,
- <&clock CLK_FIMC_LITE1>, <&clock CLK_PPMUISPX>,
- <&clock CLK_PPMUISPMX>,
+ clocks = <&isp_clock CLK_ISP_FIMC_LITE0>,
+ <&isp_clock CLK_ISP_FIMC_LITE1>,
+ <&isp_clock CLK_ISP_PPMUISPX>,
+ <&isp_clock CLK_ISP_PPMUISPMX>,
+ <&isp_clock CLK_ISP_FIMC_ISP>,
+ <&isp_clock CLK_ISP_FIMC_DRC>,
+ <&isp_clock CLK_ISP_FIMC_FD>,
+ <&isp_clock CLK_ISP_MCUISP>,
+ <&isp_clock CLK_ISP_GICISP>,
+ <&isp_clock CLK_ISP_MCUCTL_ISP>,
+ <&isp_clock CLK_ISP_PWM_ISP>,
+ <&isp_clock CLK_ISP_DIV_ISP0>,
+ <&isp_clock CLK_ISP_DIV_ISP1>,
+ <&isp_clock CLK_ISP_DIV_MCUISP0>,
+ <&isp_clock CLK_ISP_DIV_MCUISP1>,
<&clock CLK_MOUT_MPLL_USER_T>,
- <&clock CLK_FIMC_ISP>, <&clock CLK_FIMC_DRC>,
- <&clock CLK_FIMC_FD>, <&clock CLK_MCUISP>,
- <&clock CLK_GICISP>, <&clock CLK_MCUCTL_ISP>,
- <&clock CLK_PWM_ISP>,
- <&clock CLK_DIV_ISP0>, <&clock CLK_DIV_ISP1>,
- <&clock CLK_DIV_MCUISP0>,
- <&clock CLK_DIV_MCUISP1>,
- <&clock CLK_UART_ISP_SCLK>,
- <&clock CLK_ACLK200>, <&clock CLK_DIV_ACLK200>,
+ <&clock CLK_ACLK200>,
<&clock CLK_ACLK400_MCUISP>,
- <&clock CLK_DIV_ACLK400_MCUISP>;
+ <&clock CLK_DIV_ACLK200>,
+ <&clock CLK_DIV_ACLK400_MCUISP>,
+ <&clock CLK_UART_ISP_SCLK>;
clock-names = "lite0", "lite1", "ppmuispx",
- "ppmuispmx", "mpll", "isp",
+ "ppmuispmx", "isp",
"drc", "fd", "mcuisp",
"gicisp", "mcuctl_isp", "pwm_isp",
"ispdiv0", "ispdiv1", "mcuispdiv0",
- "mcuispdiv1", "uart", "aclk200",
- "div_aclk200", "aclk400mcuisp",
- "div_aclk400mcuisp";
+ "mcuispdiv1", "mpll", "aclk200",
+ "aclk400mcuisp", "div_aclk200",
+ "div_aclk400mcuisp", "uart";
iommus = <&sysmmu_fimc_isp>, <&sysmmu_fimc_drc>,
<&sysmmu_fimc_fd>, <&sysmmu_fimc_mcuctl>;
iommu-names = "isp", "drc", "fd", "mcuctl";
@@ -318,7 +333,7 @@
i2c1_isp: i2c-isp@12140000 {
compatible = "samsung,exynos4212-i2c-isp";
reg = <0x12140000 0x100>;
- clocks = <&clock CLK_I2C1_ISP>;
+ clocks = <&isp_clock CLK_ISP_I2C1_ISP>;
clock-names = "i2c_isp";
#address-cells = <1>;
#size-cells = <0>;
@@ -355,7 +370,7 @@
interrupts = <16 2>;
power-domains = <&pd_isp>;
clock-names = "sysmmu";
- clocks = <&clock CLK_SMMU_ISP>;
+ clocks = <&isp_clock CLK_ISP_SMMU_ISP>;
#iommu-cells = <0>;
};
@@ -366,7 +381,7 @@
interrupts = <16 3>;
power-domains = <&pd_isp>;
clock-names = "sysmmu";
- clocks = <&clock CLK_SMMU_DRC>;
+ clocks = <&isp_clock CLK_ISP_SMMU_DRC>;
#iommu-cells = <0>;
};
@@ -377,7 +392,7 @@
interrupts = <16 4>;
power-domains = <&pd_isp>;
clock-names = "sysmmu";
- clocks = <&clock CLK_SMMU_FD>;
+ clocks = <&isp_clock CLK_ISP_SMMU_FD>;
#iommu-cells = <0>;
};
@@ -388,7 +403,7 @@
interrupts = <16 5>;
power-domains = <&pd_isp>;
clock-names = "sysmmu";
- clocks = <&clock CLK_SMMU_ISPCX>;
+ clocks = <&isp_clock CLK_ISP_SMMU_ISPCX>;
#iommu-cells = <0>;
};
@@ -399,7 +414,8 @@
interrupts = <16 0>;
power-domains = <&pd_isp>;
clock-names = "sysmmu", "master";
- clocks = <&clock CLK_SMMU_LITE0>, <&clock CLK_FIMC_LITE0>;
+ clocks = <&isp_clock CLK_ISP_SMMU_LITE0>,
+ <&isp_clock CLK_ISP_FIMC_LITE0>;
#iommu-cells = <0>;
};
@@ -410,7 +426,8 @@
interrupts = <16 1>;
power-domains = <&pd_isp>;
clock-names = "sysmmu", "master";
- clocks = <&clock CLK_SMMU_LITE1>, <&clock CLK_FIMC_LITE1>;
+ clocks = <&isp_clock CLK_ISP_SMMU_LITE1>,
+ <&isp_clock CLK_ISP_FIMC_LITE1>;
#iommu-cells = <0>;
};
--
2.14.2
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v3 4/5] ARM: dts: exynos: Add Exynos4412 ISP clock controller
2017-10-11 9:25 ` [PATCH v3 4/5] ARM: dts: exynos: Add Exynos4412 ISP clock controller Marek Szyprowski
@ 2017-11-29 18:08 ` Krzysztof Kozlowski
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Kozlowski @ 2017-11-29 18:08 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Bartlomiej Zolnierkiewicz
On Wed, Oct 11, 2017 at 11:25:14AM +0200, Marek Szyprowski wrote:
> Exynos4412 ISP clock controller is located in the SOC area, which belongs
> to ISP power domain. This patch instantiates a separate clock driver
> for those clocks, updates all clients of ISP clocks and ensures that the
> driver is properly integrated in ISP power domin.
>
> This finally solves all the mysterious freezes in accessing ISP clocks
> when ISP power domain is disabled.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> arch/arm/boot/dts/exynos4412.dtsi | 71 ++++++++++++++++++++++++---------------
> 1 file changed, 44 insertions(+), 27 deletions(-)
>
Thanks, applied.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3 5/5] clk: samsung: Remove obsolete code for Exynos4412 ISP clocks
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
` (3 preceding siblings ...)
2017-10-11 9:25 ` [PATCH v3 4/5] ARM: dts: exynos: Add Exynos4412 ISP clock controller Marek Szyprowski
@ 2017-10-11 9:25 ` Marek Szyprowski
2018-09-07 20:10 ` Sylwester Nawrocki
2017-10-16 13:24 ` [PATCH v3 0/5] Fix problems with " Sylwester Nawrocki
5 siblings, 1 reply; 14+ messages in thread
From: Marek Szyprowski @ 2017-10-11 9:25 UTC (permalink / raw)
To: linux-clk, linux-samsung-soc
Cc: Marek Szyprowski, Sylwester Nawrocki, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
Exynos4412 ISP clock are provided by separate Exynos4412 ISP clock
driver, so support for them in Exynos4-clk driver can be removed.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
---
drivers/clk/samsung/clk-exynos4.c | 81 -------------------------------------
include/dt-bindings/clock/exynos4.h | 30 --------------
2 files changed, 111 deletions(-)
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index bdd68247e054..69649dc6a9cf 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -123,10 +123,6 @@
#define CLKOUT_CMU_CPU 0x14a00
#define PWR_CTRL1 0x15020
#define E4X12_PWR_CTRL2 0x15024
-#define E4X12_DIV_ISP0 0x18300
-#define E4X12_DIV_ISP1 0x18304
-#define E4X12_GATE_ISP0 0x18800
-#define E4X12_GATE_ISP1 0x18804
/* Below definitions are used for PWR_CTRL settings */
#define PWR_CTRL1_CORE2_DOWN_RATIO(x) (((x) & 0x7) << 28)
@@ -827,18 +823,6 @@ static const struct samsung_div_clock exynos4x12_div_clks[] __initconst = {
DIV(0, "div_c2c_aclk", "div_c2c", DIV_DMC1, 12, 3),
};
-static struct samsung_div_clock exynos4x12_isp_div_clks[] = {
- DIV_F(CLK_DIV_ISP0, "div_isp0", "aclk200", E4X12_DIV_ISP0, 0, 3,
- CLK_GET_RATE_NOCACHE, 0),
- DIV_F(CLK_DIV_ISP1, "div_isp1", "aclk200", E4X12_DIV_ISP0, 4, 3,
- CLK_GET_RATE_NOCACHE, 0),
- DIV(0, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3),
- DIV_F(CLK_DIV_MCUISP0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1,
- 4, 3, CLK_GET_RATE_NOCACHE, 0),
- DIV_F(CLK_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1,
- 8, 3, CLK_GET_RATE_NOCACHE, 0),
-};
-
/* list of gate clocks supported in all exynos4 soc's */
static const struct samsung_gate_clock exynos4_gate_clks[] __initconst = {
/*
@@ -1141,61 +1125,6 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = {
0),
};
-static struct samsung_gate_clock exynos4x12_isp_gate_clks[] = {
- GATE(CLK_FIMC_ISP, "isp", "aclk200", E4X12_GATE_ISP0, 0,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_FIMC_DRC, "drc", "aclk200", E4X12_GATE_ISP0, 1,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_FIMC_FD, "fd", "aclk200", E4X12_GATE_ISP0, 2,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_FIMC_LITE0, "lite0", "aclk200", E4X12_GATE_ISP0, 3,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_FIMC_LITE1, "lite1", "aclk200", E4X12_GATE_ISP0, 4,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_MCUISP, "mcuisp", "aclk200", E4X12_GATE_ISP0, 5,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_GICISP, "gicisp", "aclk200", E4X12_GATE_ISP0, 7,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_ISP, "smmu_isp", "aclk200", E4X12_GATE_ISP0, 8,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_DRC, "smmu_drc", "aclk200", E4X12_GATE_ISP0, 9,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_FD, "smmu_fd", "aclk200", E4X12_GATE_ISP0, 10,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_LITE0, "smmu_lite0", "aclk200", E4X12_GATE_ISP0, 11,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_LITE1, "smmu_lite1", "aclk200", E4X12_GATE_ISP0, 12,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_PPMUISPMX, "ppmuispmx", "aclk200", E4X12_GATE_ISP0, 20,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_PPMUISPX, "ppmuispx", "aclk200", E4X12_GATE_ISP0, 21,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_MCUCTL_ISP, "mcuctl_isp", "aclk200", E4X12_GATE_ISP0, 23,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_MPWM_ISP, "mpwm_isp", "aclk200", E4X12_GATE_ISP0, 24,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_I2C0_ISP, "i2c0_isp", "aclk200", E4X12_GATE_ISP0, 25,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_I2C1_ISP, "i2c1_isp", "aclk200", E4X12_GATE_ISP0, 26,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_MTCADC_ISP, "mtcadc_isp", "aclk200", E4X12_GATE_ISP0, 27,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_PWM_ISP, "pwm_isp", "aclk200", E4X12_GATE_ISP0, 28,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_WDT_ISP, "wdt_isp", "aclk200", E4X12_GATE_ISP0, 30,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_UART_ISP, "uart_isp", "aclk200", E4X12_GATE_ISP0, 31,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_ASYNCAXIM, "asyncaxim", "aclk200", E4X12_GATE_ISP1, 0,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SMMU_ISPCX, "smmu_ispcx", "aclk200", E4X12_GATE_ISP1, 4,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SPI0_ISP, "spi0_isp", "aclk200", E4X12_GATE_ISP1, 12,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
- GATE(CLK_SPI1_ISP, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
- CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
-};
-
static const struct samsung_clock_alias exynos4_aliases[] __initconst = {
ALIAS(CLK_MOUT_CORE, NULL, "moutcore"),
ALIAS(CLK_ARM_CLK, NULL, "armclk"),
@@ -1528,8 +1457,6 @@ static void __init exynos4_clk_init(struct device_node *np,
e4210_armclk_d, ARRAY_SIZE(e4210_armclk_d),
CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
} else {
- struct resource res;
-
samsung_clk_register_mux(ctx, exynos4x12_mux_clks,
ARRAY_SIZE(exynos4x12_mux_clks));
samsung_clk_register_div(ctx, exynos4x12_div_clks,
@@ -1542,14 +1469,6 @@ static void __init exynos4_clk_init(struct device_node *np,
exynos4x12_fixed_factor_clks,
ARRAY_SIZE(exynos4x12_fixed_factor_clks));
- of_address_to_resource(np, 0, &res);
- if (resource_size(&res) > 0x18000) {
- samsung_clk_register_div(ctx, exynos4x12_isp_div_clks,
- ARRAY_SIZE(exynos4x12_isp_div_clks));
- samsung_clk_register_gate(ctx, exynos4x12_isp_gate_clks,
- ARRAY_SIZE(exynos4x12_isp_gate_clks));
- }
-
if (of_machine_is_compatible("samsung,exynos4412")) {
exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
mout_core_p4x12[0], mout_core_p4x12[1], 0x14200,
diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h
index e9f9d400c322..f59ea85d77bd 100644
--- a/include/dt-bindings/clock/exynos4.h
+++ b/include/dt-bindings/clock/exynos4.h
@@ -190,32 +190,6 @@
#define CLK_MIPI_HSI 349 /* Exynos4210 only */
#define CLK_PIXELASYNCM0 351
#define CLK_PIXELASYNCM1 352
-#define CLK_FIMC_LITE0 353 /* Exynos4x12 only */
-#define CLK_FIMC_LITE1 354 /* Exynos4x12 only */
-#define CLK_PPMUISPX 355 /* Exynos4x12 only */
-#define CLK_PPMUISPMX 356 /* Exynos4x12 only */
-#define CLK_FIMC_ISP 357 /* Exynos4x12 only */
-#define CLK_FIMC_DRC 358 /* Exynos4x12 only */
-#define CLK_FIMC_FD 359 /* Exynos4x12 only */
-#define CLK_MCUISP 360 /* Exynos4x12 only */
-#define CLK_GICISP 361 /* Exynos4x12 only */
-#define CLK_SMMU_ISP 362 /* Exynos4x12 only */
-#define CLK_SMMU_DRC 363 /* Exynos4x12 only */
-#define CLK_SMMU_FD 364 /* Exynos4x12 only */
-#define CLK_SMMU_LITE0 365 /* Exynos4x12 only */
-#define CLK_SMMU_LITE1 366 /* Exynos4x12 only */
-#define CLK_MCUCTL_ISP 367 /* Exynos4x12 only */
-#define CLK_MPWM_ISP 368 /* Exynos4x12 only */
-#define CLK_I2C0_ISP 369 /* Exynos4x12 only */
-#define CLK_I2C1_ISP 370 /* Exynos4x12 only */
-#define CLK_MTCADC_ISP 371 /* Exynos4x12 only */
-#define CLK_PWM_ISP 372 /* Exynos4x12 only */
-#define CLK_WDT_ISP 373 /* Exynos4x12 only */
-#define CLK_UART_ISP 374 /* Exynos4x12 only */
-#define CLK_ASYNCAXIM 375 /* Exynos4x12 only */
-#define CLK_SMMU_ISPCX 376 /* Exynos4x12 only */
-#define CLK_SPI0_ISP 377 /* Exynos4x12 only */
-#define CLK_SPI1_ISP 378 /* Exynos4x12 only */
#define CLK_PWM_ISP_SCLK 379 /* Exynos4x12 only */
#define CLK_SPI0_ISP_SCLK 380 /* Exynos4x12 only */
#define CLK_SPI1_ISP_SCLK 381 /* Exynos4x12 only */
@@ -257,10 +231,6 @@
#define CLK_PPMUACP 415
/* div clocks */
-#define CLK_DIV_ISP0 450 /* Exynos4x12 only */
-#define CLK_DIV_ISP1 451 /* Exynos4x12 only */
-#define CLK_DIV_MCUISP0 452 /* Exynos4x12 only */
-#define CLK_DIV_MCUISP1 453 /* Exynos4x12 only */
#define CLK_DIV_ACLK200 454 /* Exynos4x12 only */
#define CLK_DIV_ACLK400_MCUISP 455 /* Exynos4x12 only */
#define CLK_DIV_ACP 456
--
2.14.2
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v3 5/5] clk: samsung: Remove obsolete code for Exynos4412 ISP clocks
2017-10-11 9:25 ` [PATCH v3 5/5] clk: samsung: Remove obsolete code for Exynos4412 ISP clocks Marek Szyprowski
@ 2018-09-07 20:10 ` Sylwester Nawrocki
0 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2018-09-07 20:10 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Sylwester Nawrocki, Chanwoo Choi,
Inki Dae, Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
On 10/11/2017 11:25 AM, Marek Szyprowski wrote:
> Exynos4412 ISP clock are provided by separate Exynos4412 ISP clock
> driver, so support for them in Exynos4-clk driver can be removed.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Unfortunately this patch has slipped through the the cracks, I have just
applied it now. Thanks.
> ---
> drivers/clk/samsung/clk-exynos4.c | 81 -------------------------------------
> include/dt-bindings/clock/exynos4.h | 30 --------------
> 2 files changed, 111 deletions(-)
>
> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
> index bdd68247e054..69649dc6a9cf 100644
> --- a/drivers/clk/samsung/clk-exynos4.c
> +++ b/drivers/clk/samsung/clk-exynos4.c
> @@ -123,10 +123,6 @@
> #define CLKOUT_CMU_CPU 0x14a00
> #define PWR_CTRL1 0x15020
> #define E4X12_PWR_CTRL2 0x15024
> -#define E4X12_DIV_ISP0 0x18300
> -#define E4X12_DIV_ISP1 0x18304
> -#define E4X12_GATE_ISP0 0x18800
> -#define E4X12_GATE_ISP1 0x18804
>
> /* Below definitions are used for PWR_CTRL settings */
> #define PWR_CTRL1_CORE2_DOWN_RATIO(x) (((x) & 0x7) << 28)
> @@ -827,18 +823,6 @@ static const struct samsung_div_clock exynos4x12_div_clks[] __initconst = {
> DIV(0, "div_c2c_aclk", "div_c2c", DIV_DMC1, 12, 3),
> };
>
> -static struct samsung_div_clock exynos4x12_isp_div_clks[] = {
> - DIV_F(CLK_DIV_ISP0, "div_isp0", "aclk200", E4X12_DIV_ISP0, 0, 3,
> - CLK_GET_RATE_NOCACHE, 0),
> - DIV_F(CLK_DIV_ISP1, "div_isp1", "aclk200", E4X12_DIV_ISP0, 4, 3,
> - CLK_GET_RATE_NOCACHE, 0),
> - DIV(0, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3),
> - DIV_F(CLK_DIV_MCUISP0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1,
> - 4, 3, CLK_GET_RATE_NOCACHE, 0),
> - DIV_F(CLK_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1,
> - 8, 3, CLK_GET_RATE_NOCACHE, 0),
> -};
> -
> /* list of gate clocks supported in all exynos4 soc's */
> static const struct samsung_gate_clock exynos4_gate_clks[] __initconst = {
> /*
> @@ -1141,61 +1125,6 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = {
> 0),
> };
>
> -static struct samsung_gate_clock exynos4x12_isp_gate_clks[] = {
> - GATE(CLK_FIMC_ISP, "isp", "aclk200", E4X12_GATE_ISP0, 0,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_FIMC_DRC, "drc", "aclk200", E4X12_GATE_ISP0, 1,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_FIMC_FD, "fd", "aclk200", E4X12_GATE_ISP0, 2,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_FIMC_LITE0, "lite0", "aclk200", E4X12_GATE_ISP0, 3,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_FIMC_LITE1, "lite1", "aclk200", E4X12_GATE_ISP0, 4,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_MCUISP, "mcuisp", "aclk200", E4X12_GATE_ISP0, 5,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_GICISP, "gicisp", "aclk200", E4X12_GATE_ISP0, 7,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_ISP, "smmu_isp", "aclk200", E4X12_GATE_ISP0, 8,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_DRC, "smmu_drc", "aclk200", E4X12_GATE_ISP0, 9,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_FD, "smmu_fd", "aclk200", E4X12_GATE_ISP0, 10,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_LITE0, "smmu_lite0", "aclk200", E4X12_GATE_ISP0, 11,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_LITE1, "smmu_lite1", "aclk200", E4X12_GATE_ISP0, 12,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_PPMUISPMX, "ppmuispmx", "aclk200", E4X12_GATE_ISP0, 20,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_PPMUISPX, "ppmuispx", "aclk200", E4X12_GATE_ISP0, 21,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_MCUCTL_ISP, "mcuctl_isp", "aclk200", E4X12_GATE_ISP0, 23,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_MPWM_ISP, "mpwm_isp", "aclk200", E4X12_GATE_ISP0, 24,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_I2C0_ISP, "i2c0_isp", "aclk200", E4X12_GATE_ISP0, 25,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_I2C1_ISP, "i2c1_isp", "aclk200", E4X12_GATE_ISP0, 26,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_MTCADC_ISP, "mtcadc_isp", "aclk200", E4X12_GATE_ISP0, 27,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_PWM_ISP, "pwm_isp", "aclk200", E4X12_GATE_ISP0, 28,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_WDT_ISP, "wdt_isp", "aclk200", E4X12_GATE_ISP0, 30,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_UART_ISP, "uart_isp", "aclk200", E4X12_GATE_ISP0, 31,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_ASYNCAXIM, "asyncaxim", "aclk200", E4X12_GATE_ISP1, 0,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SMMU_ISPCX, "smmu_ispcx", "aclk200", E4X12_GATE_ISP1, 4,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SPI0_ISP, "spi0_isp", "aclk200", E4X12_GATE_ISP1, 12,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> - GATE(CLK_SPI1_ISP, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
> - CLK_IGNORE_UNUSED | CLK_GET_RATE_NOCACHE, 0),
> -};
> -
> static const struct samsung_clock_alias exynos4_aliases[] __initconst = {
> ALIAS(CLK_MOUT_CORE, NULL, "moutcore"),
> ALIAS(CLK_ARM_CLK, NULL, "armclk"),
> @@ -1528,8 +1457,6 @@ static void __init exynos4_clk_init(struct device_node *np,
> e4210_armclk_d, ARRAY_SIZE(e4210_armclk_d),
> CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
> } else {
> - struct resource res;
> -
> samsung_clk_register_mux(ctx, exynos4x12_mux_clks,
> ARRAY_SIZE(exynos4x12_mux_clks));
> samsung_clk_register_div(ctx, exynos4x12_div_clks,
> @@ -1542,14 +1469,6 @@ static void __init exynos4_clk_init(struct device_node *np,
> exynos4x12_fixed_factor_clks,
> ARRAY_SIZE(exynos4x12_fixed_factor_clks));
>
> - of_address_to_resource(np, 0, &res);
> - if (resource_size(&res) > 0x18000) {
> - samsung_clk_register_div(ctx, exynos4x12_isp_div_clks,
> - ARRAY_SIZE(exynos4x12_isp_div_clks));
> - samsung_clk_register_gate(ctx, exynos4x12_isp_gate_clks,
> - ARRAY_SIZE(exynos4x12_isp_gate_clks));
> - }
> -
> if (of_machine_is_compatible("samsung,exynos4412")) {
> exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> mout_core_p4x12[0], mout_core_p4x12[1], 0x14200,
> diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h
> index e9f9d400c322..f59ea85d77bd 100644
> --- a/include/dt-bindings/clock/exynos4.h
> +++ b/include/dt-bindings/clock/exynos4.h
> @@ -190,32 +190,6 @@
> #define CLK_MIPI_HSI 349 /* Exynos4210 only */
> #define CLK_PIXELASYNCM0 351
> #define CLK_PIXELASYNCM1 352
> -#define CLK_FIMC_LITE0 353 /* Exynos4x12 only */
> -#define CLK_FIMC_LITE1 354 /* Exynos4x12 only */
> -#define CLK_PPMUISPX 355 /* Exynos4x12 only */
> -#define CLK_PPMUISPMX 356 /* Exynos4x12 only */
> -#define CLK_FIMC_ISP 357 /* Exynos4x12 only */
> -#define CLK_FIMC_DRC 358 /* Exynos4x12 only */
> -#define CLK_FIMC_FD 359 /* Exynos4x12 only */
> -#define CLK_MCUISP 360 /* Exynos4x12 only */
> -#define CLK_GICISP 361 /* Exynos4x12 only */
> -#define CLK_SMMU_ISP 362 /* Exynos4x12 only */
> -#define CLK_SMMU_DRC 363 /* Exynos4x12 only */
> -#define CLK_SMMU_FD 364 /* Exynos4x12 only */
> -#define CLK_SMMU_LITE0 365 /* Exynos4x12 only */
> -#define CLK_SMMU_LITE1 366 /* Exynos4x12 only */
> -#define CLK_MCUCTL_ISP 367 /* Exynos4x12 only */
> -#define CLK_MPWM_ISP 368 /* Exynos4x12 only */
> -#define CLK_I2C0_ISP 369 /* Exynos4x12 only */
> -#define CLK_I2C1_ISP 370 /* Exynos4x12 only */
> -#define CLK_MTCADC_ISP 371 /* Exynos4x12 only */
> -#define CLK_PWM_ISP 372 /* Exynos4x12 only */
> -#define CLK_WDT_ISP 373 /* Exynos4x12 only */
> -#define CLK_UART_ISP 374 /* Exynos4x12 only */
> -#define CLK_ASYNCAXIM 375 /* Exynos4x12 only */
> -#define CLK_SMMU_ISPCX 376 /* Exynos4x12 only */
> -#define CLK_SPI0_ISP 377 /* Exynos4x12 only */
> -#define CLK_SPI1_ISP 378 /* Exynos4x12 only */
> #define CLK_PWM_ISP_SCLK 379 /* Exynos4x12 only */
> #define CLK_SPI0_ISP_SCLK 380 /* Exynos4x12 only */
> #define CLK_SPI1_ISP_SCLK 381 /* Exynos4x12 only */
> @@ -257,10 +231,6 @@
> #define CLK_PPMUACP 415
>
> /* div clocks */
> -#define CLK_DIV_ISP0 450 /* Exynos4x12 only */
> -#define CLK_DIV_ISP1 451 /* Exynos4x12 only */
> -#define CLK_DIV_MCUISP0 452 /* Exynos4x12 only */
> -#define CLK_DIV_MCUISP1 453 /* Exynos4x12 only */
> #define CLK_DIV_ACLK200 454 /* Exynos4x12 only */
> #define CLK_DIV_ACLK400_MCUISP 455 /* Exynos4x12 only */
> #define CLK_DIV_ACP 456
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks
2017-10-11 9:25 ` [PATCH v3 0/5] Fix problems with Exynos4412 ISP clocks Marek Szyprowski
` (4 preceding siblings ...)
2017-10-11 9:25 ` [PATCH v3 5/5] clk: samsung: Remove obsolete code for Exynos4412 ISP clocks Marek Szyprowski
@ 2017-10-16 13:24 ` Sylwester Nawrocki
5 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2017-10-16 13:24 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-clk, linux-samsung-soc, Chanwoo Choi, Inki Dae,
Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz
On 10/11/2017 11:25 AM, Marek Szyprowski wrote:
> Marek Szyprowski (5):
> clk: samsung: Instantiate Exynos4412 ISP clocks only when available
> clk: samsung: Add dt bindings for Exynos4412 ISP clock controller
> clk: samsung: Add a separate driver for Exynos4412 ISP clocks
I have applied these 3 patches, thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread