[PATCH 2/6] clk: exynos5410: register clocks using common clock framework

2013-10-01 Thread Vyacheslav Tyrtov
From: Tarek Dakhran t.dakh...@samsung.com

The EXYNOS5410 clocks are statically listed and registered
using the Samsung specific common clock helper functions.

Signed-off-by: Tarek Dakhran t.dakh...@samsung.com
Signed-off-by: Vyacheslav Tyrtov v.tyr...@samsung.com
---
 .../devicetree/bindings/clock/exynos5410-clock.txt |  72 ++
 drivers/clk/samsung/Makefile   |   1 +
 drivers/clk/samsung/clk-exynos5410.c   | 274 +
 3 files changed, 347 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/clock/exynos5410-clock.txt
 create mode 100644 drivers/clk/samsung/clk-exynos5410.c

diff --git a/Documentation/devicetree/bindings/clock/exynos5410-clock.txt 
b/Documentation/devicetree/bindings/clock/exynos5410-clock.txt
new file mode 100644
index 000..8c3a7c2
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/exynos5410-clock.txt
@@ -0,0 +1,72 @@
+* Samsung Exynos5410 Clock Controller
+
+The Exynos5410 clock controller generates and supplies clock to various
+controllers within the Exynos5410 SoC.
+
+Required Properties:
+
+- comptible: should be one of the following.
+  - samsung,exynos5410-clock - controller compatible with Exynos5410 SoC.
+
+- reg: physical base address of the controller and length of memory mapped
+  region.
+
+- #clock-cells: should be 1.
+
+The following is the list of clocks generated by the controller. Each clock is
+assigned an identifier and client nodes use this identifier to specify the
+clock which they consume.
+
+
+   [Core Clocks]
+
+  ClockID
+  
+
+  fin_pll  1
+
+  [Clock Gate for Special Clocks]
+
+  ClockID
+  
+  sclk_uart0   128
+  sclk_uart1   129
+  sclk_uart2   130
+  sclk_uart3   131
+  sclk_mmc0132
+  sclk_mmc1133
+  sclk_mmc2134
+
+   [Peripheral Clock Gates]
+
+  ClockID
+  
+
+  uart0257
+  uart1258
+  uart2259
+  uart3260
+  mct  315
+  mmc0 351
+  mmc1 352
+  mmc2 353
+
+Example 1: An example of a clock controller node is listed below.
+
+   clock: clock-controller@0x1001 {
+   compatible = samsung,exynos5410-clock;
+   reg = 0x1001 0x3;
+   #clock-cells = 1;
+   };
+
+Example 2: UART controller node that consumes the clock generated by the clock
+  controller. Refer to the standard clock bindings for information
+  about 'clocks' and 'clock-names' property.
+
+   serial@1382 {
+   compatible = samsung,exynos4210-uart;
+   reg = 0x1382 0x100;
+   interrupts = 0 54 0;
+   clocks = clock 259, clock 130;
+   clock-names = uart, clk_uart_baud0;
+   };
diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
index 3413380..5a446ca 100644
--- a/drivers/clk/samsung/Makefile
+++ b/drivers/clk/samsung/Makefile
@@ -5,6 +5,7 @@
 obj-$(CONFIG_COMMON_CLK)   += clk.o clk-pll.o
 obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o
 obj-$(CONFIG_SOC_EXYNOS5250)   += clk-exynos5250.o
+obj-$(CONFIG_SOC_EXYNOS5410)   += clk-exynos5410.o
 obj-$(CONFIG_SOC_EXYNOS5420)   += clk-exynos5420.o
 obj-$(CONFIG_SOC_EXYNOS5440)   += clk-exynos5440.o
 obj-$(CONFIG_ARCH_EXYNOS)  += clk-exynos-audss.o
diff --git a/drivers/clk/samsung/clk-exynos5410.c 
b/drivers/clk/samsung/clk-exynos5410.c
new file mode 100644
index 000..a5d6cac
--- /dev/null
+++ b/drivers/clk/samsung/clk-exynos5410.c
@@ -0,0 +1,274 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ * Author: Tarek Dakhran t.dakh...@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 Exynos5410 SoC.
+*/
+
+#include linux/clk.h
+#include linux/clkdev.h
+#include linux/clk-provider.h
+#include linux/of.h
+#include linux/of_address.h
+
+#include clk.h
+#include clk-pll.h
+
+#define SRC_CPU0x200
+#define DIV_CPU0   0x500
+#define SRC_CPERI1 0x4204
+#define DIV_TOP0   0x10510
+#define DIV_TOP1   0x10514
+#define DIV_FSYS1  0x1054c
+#define DIV_FSYS2  0x10550
+#define DIV_PERIC0 0x10558
+#define SRC_TOP0   0x10210
+#define SRC_TOP1   0x10214
+#define SRC_TOP2   0x10218
+#define SRC_FSYS   0x10244
+#define SRC_PERIC0 0x10250
+#define SRC_MASK_FSYS  0x10340
+#define SRC_MASK_PERIC00x10350
+#define GATE_BUS_FSYS0 

Re: [PATCH 2/6] clk: exynos5410: register clocks using common clock framework

2013-10-01 Thread Bartlomiej Zolnierkiewicz

Hi,

On Tuesday, October 01, 2013 08:17:03 PM Vyacheslav Tyrtov wrote:
 From: Tarek Dakhran t.dakh...@samsung.com
 
 The EXYNOS5410 clocks are statically listed and registered
 using the Samsung specific common clock helper functions.
 
 Signed-off-by: Tarek Dakhran t.dakh...@samsung.com
 Signed-off-by: Vyacheslav Tyrtov v.tyr...@samsung.com
 ---
  .../devicetree/bindings/clock/exynos5410-clock.txt |  72 ++
  drivers/clk/samsung/Makefile   |   1 +
  drivers/clk/samsung/clk-exynos5410.c   | 274 
 +
  3 files changed, 347 insertions(+)
  create mode 100644 
 Documentation/devicetree/bindings/clock/exynos5410-clock.txt
  create mode 100644 drivers/clk/samsung/clk-exynos5410.c
 
 diff --git a/Documentation/devicetree/bindings/clock/exynos5410-clock.txt 
 b/Documentation/devicetree/bindings/clock/exynos5410-clock.txt
 new file mode 100644
 index 000..8c3a7c2
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/clock/exynos5410-clock.txt
 @@ -0,0 +1,72 @@
 +* Samsung Exynos5410 Clock Controller
 +
 +The Exynos5410 clock controller generates and supplies clock to various
 +controllers within the Exynos5410 SoC.
 +
 +Required Properties:
 +
 +- comptible: should be one of the following.
 +  - samsung,exynos5410-clock - controller compatible with Exynos5410 SoC.
 +
 +- reg: physical base address of the controller and length of memory mapped
 +  region.
 +
 +- #clock-cells: should be 1.
 +
 +The following is the list of clocks generated by the controller. Each clock 
 is
 +assigned an identifier and client nodes use this identifier to specify the
 +clock which they consume.
 +
 +
 +   [Core Clocks]
 +
 +  Clock  ID
 +  
 +
 +  fin_pll1
 +
 +  [Clock Gate for Special Clocks]
 +
 +  Clock  ID
 +  
 +  sclk_uart0 128
 +  sclk_uart1 129
 +  sclk_uart2 130
 +  sclk_uart3 131
 +  sclk_mmc0  132
 +  sclk_mmc1  133
 +  sclk_mmc2  134
 +
 +   [Peripheral Clock Gates]
 +
 +  Clock  ID
 +  
 +
 +  uart0  257
 +  uart1  258
 +  uart2  259
 +  uart3  260
 +  mct315
 +  mmc0   351
 +  mmc1   352
 +  mmc2   353
 +
 +Example 1: An example of a clock controller node is listed below.
 +
 + clock: clock-controller@0x1001 {
 + compatible = samsung,exynos5410-clock;
 + reg = 0x1001 0x3;
 + #clock-cells = 1;
 + };
 +
 +Example 2: UART controller node that consumes the clock generated by the 
 clock
 +controller. Refer to the standard clock bindings for information
 +about 'clocks' and 'clock-names' property.
 +
 + serial@1382 {
 + compatible = samsung,exynos4210-uart;
 + reg = 0x1382 0x100;
 + interrupts = 0 54 0;
 + clocks = clock 259, clock 130;
 + clock-names = uart, clk_uart_baud0;
 + };
 diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
 index 3413380..5a446ca 100644
 --- a/drivers/clk/samsung/Makefile
 +++ b/drivers/clk/samsung/Makefile
 @@ -5,6 +5,7 @@
  obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o
  obj-$(CONFIG_ARCH_EXYNOS4)   += clk-exynos4.o
  obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o
 +obj-$(CONFIG_SOC_EXYNOS5410) += clk-exynos5410.o
  obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o
  obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o
  obj-$(CONFIG_ARCH_EXYNOS)+= clk-exynos-audss.o
 diff --git a/drivers/clk/samsung/clk-exynos5410.c 
 b/drivers/clk/samsung/clk-exynos5410.c
 new file mode 100644
 index 000..a5d6cac
 --- /dev/null
 +++ b/drivers/clk/samsung/clk-exynos5410.c
 @@ -0,0 +1,274 @@
 +/*
 + * Copyright (c) 2013 Samsung Electronics Co., Ltd.
 + * Author: Tarek Dakhran t.dakh...@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 Exynos5410 SoC.
 +*/
 +
 +#include linux/clk.h
 +#include linux/clkdev.h
 +#include linux/clk-provider.h
 +#include linux/of.h
 +#include linux/of_address.h
 +
 +#include clk.h
 +#include clk-pll.h
 +
 +#define SRC_CPU  0x200
 +#define DIV_CPU0 0x500
 +#define SRC_CPERI1   0x4204
 +#define DIV_TOP0 0x10510
 +#define DIV_TOP1 0x10514
 +#define DIV_FSYS10x1054c
 +#define DIV_FSYS20x10550
 +#define DIV_PERIC0   0x10558
 +#define SRC_TOP0 0x10210
 +#define SRC_TOP1 0x10214
 +#define SRC_TOP2 0x10218
 +#define SRC_FSYS 0x10244
 +#define 

Re: [PATCH 2/6] clk: exynos5410: register clocks using common clock framework

2013-10-01 Thread Stephen Warren
On 10/01/2013 10:17 AM, Vyacheslav Tyrtov wrote:
 From: Tarek Dakhran t.dakh...@samsung.com
 
 The EXYNOS5410 clocks are statically listed and registered
 using the Samsung specific common clock helper functions.

 diff --git a/Documentation/devicetree/bindings/clock/exynos5410-clock.txt 
 b/Documentation/devicetree/bindings/clock/exynos5410-clock.txt

 +   [Core Clocks]
 +  [Clock Gate for Special Clocks]
 +   [Peripheral Clock Gates]

These headers/titles for the sections/lists aren't consistently aligned.

 +  [Clock Gate for Special Clocks]
 +
 +  Clock  ID
 +  
 +  sclk_uart0 128
 +  sclk_uart1 129
 +  sclk_uart2 130
 +  sclk_uart3 131
 +  sclk_mmc0  132
 +  sclk_mmc1  133
 +  sclk_mmc2  134
 +
 +   [Peripheral Clock Gates]
 +
 +  Clock  ID
 +  
 +
 +  uart0  257
 +  uart1  258
 +  uart2  259
 +  uart3  260
 +  mct315
 +  mmc0   351
 +  mmc1   352
 +  mmc2   353

That's not many clocks. I assume you're planning on adding more IDs
later, in a backwards-compatible fashion? I suppose that's OK since it
won't break any existing usage, as long as there's no need to renumber
any existing values.

On that topic, are any of those clock IDs derived from HW, e.g. register
numbers, or bit numbers in an array of registers? Numbering clocks in a
HW-derived fashion would make it easier or more obvious how to add new
clock IDs later while maintaining some consistency and without
introducing the desire to break any ABI.

Finally, how about creating a header file such as
include/dt-bindings/clock/exynos5410.h to define those clock IDs, so
that both *.dts and the clock driver can share the values without having
to manually write them?

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html