2015-06-21 08:06:32

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 00/08] clocksource: sh_cmt: DT binding rework

clocksource: sh_cmt: DT binding rework

[PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding
[PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case
[PATCH 03/08] devicetree: bindings: R-Car Gen2 CMT0 and CMT1 bindings
[PATCH 04/08] clocksource: sh_cmt: Support separate R-Car Gen2 CMT0/1
[PATCH 05/08] devicetree: bindings: r8a73a4 and R-Car Gen2 CMT bindings
[PATCH 06/08] ARM: shmobile: Update CMT compat string users in DTS
[PATCH 07/08] devicetree: bindings: Deprecate property, update example
[PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS

This series reworks the CMT DT bindings to try to deal with the following:
- R-Car Gen2 CMT0 and CMT1 hardware instances are not identical
- The property renesas,channels-mask is not enough to describe the difference
- DT should describe the hardware, not the software implementation
- Not all documented DT bindings are actually used

Without these patches the binding "renesas,cmt-48-gen2" is used for both
CMT0 and CMT1 on R-Car Gen2 SoCs. CMT0 and CMT1 are currently seen by the
Linux device driver as compatible hardware, and the device-specific property
"renesas,channels-mask" is used to point out some of the hardware configuration
differences. Since the driver is not feature complete only some differences are
described and when diving into the data sheet we can see that:

1) CMT0 is not 48-bit at all, instead it only supports 32-bit counters.
2) Some channels of CMT1 are 48-bit, some 32-bit.
3) A couple of CMT1 channels have even more features.

It turns out that none of the above differences are described in our current
DT files. And since we use the same compat string for CMT0 and CMT1 the driver
itself cannot enable features specific only to CMT1 without first updating
the DTS. So this series is ground work for future feature patches.

It seems that we have two choices if we want to support CMT1 features:
A) Keep existing DT bindings, add more properties for CMT1
B) Rework the compatible strings and keep configuration in the driver

Judging by above it seems that DT update is inevitable. In my mind it is
rather painful to update the DT so I'd like to minimize the number of
updates and let the majority of the changes only happen in the driver.
And since we should really describe hardware in DT but driver features tend
to be implemented incrementally then B) seems like a good fit to me.

I wouldn't mind going with A) but to be honest I must say that the existing
compat string "renesas,cmt-48-gen2" is just too confusing with "48"
(when CMT0 is 32bit-only) and also "gen2" (used without product line R-Car).

Because of that I've gone with B) and reworked the bindings to separate
CMT0 from CMT1 and keep channel configuration in the device driver.

While at it I've deprecated "renesas,channels-mask" and the old DT compat
strings. Per-SoC compat strings have also been reworked, but are not left
around documented as deprecated since they were never used by the driver.

Comments are very welcome! If all are in favor then it would be good to
merge patch 1-5 first and patch 6-8 later once 1-5 are in. Old DTBs are
left working but treated as low-feature CMT0. New DTBs including patch 6-8
will not work on old kernels.

Signed-off-by: Magnus Damm <[email protected]>
---

Written against renesas-devel-20150619-v4.1-rc8

Documentation/devicetree/bindings/timer/renesas,cmt.txt | 55 +++++++++------
arch/arm/boot/dts/r8a73a4.dtsi | 5 -
arch/arm/boot/dts/r8a7740.dtsi | 3
arch/arm/boot/dts/r8a7790.dtsi | 10 --
arch/arm/boot/dts/r8a7791.dtsi | 10 --
arch/arm/boot/dts/r8a7793.dtsi | 10 --
arch/arm/boot/dts/r8a7794.dtsi | 10 --
arch/arm/boot/dts/sh73a0.dtsi | 3
drivers/clocksource/sh_cmt.c | 54 ++++++++++----
9 files changed, 83 insertions(+), 77 deletions(-)


2015-06-21 08:06:44

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding

From: Magnus Damm <[email protected]>

Remove the sh7372 CMT compat string to reduce maintenance burden.

It should be fine to break DT compatibility because:
1) The sh7372 SoC support has been removed from upstream
2) The sh7372 CMT DT binding was never part of upstream DTS
3) The CMT driver never matches on the sh7372 binding

Signed-off-by: Magnus Damm <[email protected]>
---

Documentation/devicetree/bindings/timer/renesas,cmt.txt | 2 --
1 file changed, 2 deletions(-)

--- 0001/Documentation/devicetree/bindings/timer/renesas,cmt.txt
+++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 13:47:59.922366518 +0900
@@ -32,8 +32,6 @@ Required Properties:
(CMT[234] on sh7372, sh73a0 and r8a7740)
This is a fallback for the above renesas,cmt-32-fast-* entries.

- - "renesas,cmt-48-sh7372" for the sh7372 48-bit CMT
- (CMT1)
- "renesas,cmt-48-sh73a0" for the sh73A0 48-bit CMT
(CMT1)
- "renesas,cmt-48-r8a7740" for the r8a7740 48-bit CMT

2015-06-21 08:07:06

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case

From: Magnus Damm <[email protected]>

Always use 0x3f as channel mask for the SH_CMT_48BIT type of devices.
Once this patch is applied the "renesas,channels-mask" property will
be ignored by the driver for older devices matching SH_CMT_48BIT. In
the future when all CMT types store channel mask in the driver then
we will be able to deprecate and remove "renesas,channels-mask" from DTS.

Signed-off-by: Magnus Damm <[email protected]>
---

drivers/clocksource/sh_cmt.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)

--- 0001/drivers/clocksource/sh_cmt.c
+++ work/drivers/clocksource/sh_cmt.c 2015-06-20 15:25:54.302366518 +0900
@@ -74,6 +74,8 @@ enum sh_cmt_model {
struct sh_cmt_info {
enum sh_cmt_model model;

+ unsigned long channels_mask;
+
unsigned long width; /* 16 or 32 bit version of hardware block */
unsigned long overflow_bit;
unsigned long clear_bits;
@@ -212,6 +214,7 @@ static const struct sh_cmt_info sh_cmt_i
},
[SH_CMT_48BIT] = {
.model = SH_CMT_48BIT,
+ .channels_mask = 0x3f,
.width = 32,
.overflow_bit = SH_CMT32_CMCSR_CMF,
.clear_bits = ~(SH_CMT32_CMCSR_CMF | SH_CMT32_CMCSR_OVF),
@@ -969,9 +972,14 @@ static int sh_cmt_setup(struct sh_cmt_de
id = of_match_node(sh_cmt_of_table, pdev->dev.of_node);
cmt->info = id->data;

- ret = sh_cmt_parse_dt(cmt);
- if (ret < 0)
- return ret;
+ /* prefer in-driver channel configuration over DT */
+ if (cmt->info->channels_mask) {
+ cmt->hw_channels = cmt->info_channels_mask;
+ } else {
+ ret = sh_cmt_parse_dt(cmt);
+ if (ret < 0)
+ return ret;
+ }
} else if (pdev->dev.platform_data) {
struct sh_timer_config *cfg = pdev->dev.platform_data;
const struct platform_device_id *id = pdev->id_entry;

2015-06-21 08:08:12

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 03/08] devicetree: bindings: R-Car Gen2 CMT0 and CMT1 bindings

From: Magnus Damm <[email protected]>

Add documentation for new separate CMT0 and CMT1 DT compatible strings
for R-Car Gen2. These compat strings allow us to enable CMT1-specific
features in the driver. The old compat strings will be deprecated in
the not so distant future.

Signed-off-by: Magnus Damm <[email protected]>
---

Documentation/devicetree/bindings/timer/renesas,cmt.txt | 3 +++
1 file changed, 3 insertions(+)

--- 0004/Documentation/devicetree/bindings/timer/renesas,cmt.txt
+++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 14:04:25.592366518 +0900
@@ -40,6 +40,9 @@ Required Properties:
(CMT1 on sh7372, sh73a0 and r8a7740)
This is a fallback for the above renesas,cmt-48-* entries.

+ - "renesas,cmt0-rcar-gen2" for 32-bit CMT0 devices included in R-Car Gen2.
+ - "renesas,cmt1-rcar-gen2" for 48-bit CMT1 devices included in R-Car Gen2.
+
- "renesas,cmt-48-r8a73a4" for the r8a73a4 48-bit CMT
(CMT[01])
- "renesas,cmt-48-r8a7790" for the r8a7790 48-bit CMT

2015-06-21 08:07:28

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 04/08] clocksource: sh_cmt: Support separate R-Car Gen2 CMT0/1

From: Magnus Damm <[email protected]>

Add support for the new R-Car Gen2 CMT0 and CMT1 bindings. Support
for the old DT binding is still kept around, however devices using
such binding will be treated as a low-feature CMT0 device. If users
want to make use of CMT1-specific features then they need to update
their DTBs. No special CMT1-specific features are however implemented
by his patch, only DT bindings are redone as groundwork for future
feature patches.

Signed-off-by: Magnus Damm <[email protected]>
---

drivers/clocksource/sh_cmt.c | 40 ++++++++++++++++++++++++++++------------
1 file changed, 28 insertions(+), 12 deletions(-)

--- 0005/drivers/clocksource/sh_cmt.c
+++ work/drivers/clocksource/sh_cmt.c 2015-06-20 14:16:44.472366518 +0900
@@ -39,16 +39,16 @@ struct sh_cmt_device;
* SoC but also on the particular instance. The following table lists the main
* characteristics of those flavours.
*
- * 16B 32B 32B-F 48B 48B-2
+ * 16B 32B 32B-F 48B R-Car Gen2
* -----------------------------------------------------------------------------
* Channels 2 1/4 1 6 2/8
* Control Width 16 16 16 16 32
* Counter Width 16 32 32 32/48 32/48
* Shared Start/Stop Y Y Y Y N
*
- * The 48-bit gen2 version has a per-channel start/stop register located in the
- * channel registers block. All other versions have a shared start/stop register
- * located in the global space.
+ * The r8a73a4 / R-Car Gen2 version has a per-channel start/stop register
+ * located in the channel registers block. All other versions have a shared
+ * start/stop register located in the global space.
*
* Channels are indexed from 0 to N-1 in the documentation. The channel index
* infers the start/stop bit position in the control register and the channel
@@ -68,7 +68,8 @@ enum sh_cmt_model {
SH_CMT_32BIT,
SH_CMT_32BIT_FAST,
SH_CMT_48BIT,
- SH_CMT_48BIT_GEN2,
+ SH_CMT0_RCAR_GEN2,
+ SH_CMT1_RCAR_GEN2,
};

struct sh_cmt_info {
@@ -223,8 +224,20 @@ static const struct sh_cmt_info sh_cmt_i
.read_count = sh_cmt_read32,
.write_count = sh_cmt_write32,
},
- [SH_CMT_48BIT_GEN2] = {
- .model = SH_CMT_48BIT_GEN2,
+ [SH_CMT0_RCAR_GEN2] = {
+ .model = SH_CMT0_RCAR_GEN2,
+ .channels_mask = 0x60,
+ .width = 32,
+ .overflow_bit = SH_CMT32_CMCSR_CMF,
+ .clear_bits = ~(SH_CMT32_CMCSR_CMF | SH_CMT32_CMCSR_OVF),
+ .read_control = sh_cmt_read32,
+ .write_control = sh_cmt_write32,
+ .read_count = sh_cmt_read32,
+ .write_count = sh_cmt_write32,
+ },
+ [SH_CMT1_RCAR_GEN2] = {
+ .model = SH_CMT1_RCAR_GEN2,
+ .channels_mask = 0xff,
.width = 32,
.overflow_bit = SH_CMT32_CMCSR_CMF,
.clear_bits = ~(SH_CMT32_CMCSR_CMF | SH_CMT32_CMCSR_OVF),
@@ -861,6 +874,7 @@ static int sh_cmt_setup_channel(struct s
ch->cmt = cmt;
ch->index = index;
ch->hwidx = hwidx;
+ ch->timer_bit = hwidx;

/*
* Compute the address of the channel control register block. For the
@@ -882,9 +896,11 @@ static int sh_cmt_setup_channel(struct s
*/
ch->ioctrl = cmt->mapbase + 0x40;
break;
- case SH_CMT_48BIT_GEN2:
+ case SH_CMT0_RCAR_GEN2:
+ case SH_CMT1_RCAR_GEN2:
ch->iostart = cmt->mapbase + ch->hwidx * 0x100;
ch->ioctrl = ch->iostart + 0x10;
+ ch->timer_bit = 0;
break;
}

@@ -896,8 +912,6 @@ static int sh_cmt_setup_channel(struct s
ch->match_value = ch->max_match_value;
raw_spin_lock_init(&ch->lock);

- ch->timer_bit = cmt->info->model == SH_CMT_48BIT_GEN2 ? 0 : ch->hwidx;
-
ret = sh_cmt_register(ch, dev_name(&cmt->pdev->dev),
clockevent, clocksource);
if (ret) {
@@ -934,7 +948,7 @@ static const struct platform_device_id s
{ "sh-cmt-32", (kernel_ulong_t)&sh_cmt_info[SH_CMT_32BIT] },
{ "sh-cmt-32-fast", (kernel_ulong_t)&sh_cmt_info[SH_CMT_32BIT_FAST] },
{ "sh-cmt-48", (kernel_ulong_t)&sh_cmt_info[SH_CMT_48BIT] },
- { "sh-cmt-48-gen2", (kernel_ulong_t)&sh_cmt_info[SH_CMT_48BIT_GEN2] },
+ { "sh-cmt-48-gen2", (kernel_ulong_t)&sh_cmt_info[SH_CMT0_RCAR_GEN2] },
{ }
};
MODULE_DEVICE_TABLE(platform, sh_cmt_id_table);
@@ -943,7 +957,9 @@ static const struct of_device_id sh_cmt_
{ .compatible = "renesas,cmt-32", .data = &sh_cmt_info[SH_CMT_32BIT] },
{ .compatible = "renesas,cmt-32-fast", .data = &sh_cmt_info[SH_CMT_32BIT_FAST] },
{ .compatible = "renesas,cmt-48", .data = &sh_cmt_info[SH_CMT_48BIT] },
- { .compatible = "renesas,cmt-48-gen2", .data = &sh_cmt_info[SH_CMT_48BIT_GEN2] },
+ { .compatible = "renesas,cmt-48-gen2", .data = &sh_cmt_info[SH_CMT0_RCAR_GEN2] },
+ { .compatible = "renesas,cmt0-rcar-gen2", .data = &sh_cmt_info[SH_CMT0_RCAR_GEN2] },
+ { .compatible = "renesas,cmt1-rcar-gen2", .data = &sh_cmt_info[SH_CMT1_RCAR_GEN2] },
{ }
};
MODULE_DEVICE_TABLE(of, sh_cmt_of_table);

2015-06-21 08:08:03

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 05/08] devicetree: bindings: r8a73a4 and R-Car Gen2 CMT bindings

From: Magnus Damm <[email protected]>

Update SoC-specific bindings for r8a73a4 and R-Car Gen2 CMT0 and CMT1.

Signed-off-by: Magnus Damm <[email protected]>
---

Documentation/devicetree/bindings/timer/renesas,cmt.txt | 26 ++++++++-------
1 file changed, 15 insertions(+), 11 deletions(-)

--- 0006/Documentation/devicetree/bindings/timer/renesas,cmt.txt
+++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 14:34:16.092366518 +0900
@@ -40,20 +40,24 @@ Required Properties:
(CMT1 on sh7372, sh73a0 and r8a7740)
This is a fallback for the above renesas,cmt-48-* entries.

+ - "renesas,cmt0-r8a73a4" for the 32-bit CMT0 device included in r8a73a4.
+ - "renesas,cmt1-r8a73a4" for the 48-bit CMT1 device included in r8a73a4.
+ - "renesas,cmt0-r8a7790" for the 32-bit CMT0 device included in r8a7790.
+ - "renesas,cmt1-r8a7790" for the 48-bit CMT1 device included in r8a7790.
+ - "renesas,cmt0-r8a7791" for the 32-bit CMT0 device included in r8a7791.
+ - "renesas,cmt1-r8a7791" for the 48-bit CMT1 device included in r8a7791.
+ - "renesas,cmt0-r8a7793" for the 32-bit CMT0 device included in r8a7793.
+ - "renesas,cmt1-r8a7793" for the 48-bit CMT1 device included in r8a7793.
+ - "renesas,cmt0-r8a7794" for the 32-bit CMT0 device included in r8a7794.
+ - "renesas,cmt1-r8a7794" for the 48-bit CMT1 device included in r8a7794.
+
- "renesas,cmt0-rcar-gen2" for 32-bit CMT0 devices included in R-Car Gen2.
- "renesas,cmt1-rcar-gen2" for 48-bit CMT1 devices included in R-Car Gen2.
+ These are fallbacks for r8a73a4 and all the R-Car Gen2
+ entries listed above.

- - "renesas,cmt-48-r8a73a4" for the r8a73a4 48-bit CMT
- (CMT[01])
- - "renesas,cmt-48-r8a7790" for the r8a7790 48-bit CMT
- (CMT[01])
- - "renesas,cmt-48-r8a7791" for the r8a7791 48-bit CMT
- (CMT[01])
- - "renesas,cmt-48-gen2" for all second generation 48-bit CMT
- (CMT[01] on r8a73a4, r8a7790 and r8a7791)
- This is a fallback for the renesas,cmt-48-r8a73a4,
- renesas,cmt-48-r8a7790 and renesas,cmt-48-r8a7791 entries.
-
+ - "renesas,cmt-48-gen2" is <deprecated>, use "renesas,cmt[01]-*" instead.
+
- reg: base address and length of the registers block for the timer module.
- interrupts: interrupt-specifier for the timer, one per channel.
- clocks: a list of phandle + clock-specifier pairs, one for each entry

2015-06-21 08:07:47

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 06/08] ARM: shmobile: Update CMT compat string users in DTS

From: Magnus Damm <[email protected]>

Use recently updated r8a73a4 and R-Car Gen2 CMT0 and CMT1 compat strings.

With this change in place we can keep device-specific configuration in
the driver and the driver can be able to support CMT1 specific features.

Signed-off-by: Magnus Damm <[email protected]>
---

arch/arm/boot/dts/r8a73a4.dtsi | 2 +-
arch/arm/boot/dts/r8a7790.dtsi | 4 ++--
arch/arm/boot/dts/r8a7791.dtsi | 4 ++--
arch/arm/boot/dts/r8a7793.dtsi | 4 ++--
arch/arm/boot/dts/r8a7794.dtsi | 4 ++--
5 files changed, 9 insertions(+), 9 deletions(-)

--- 0001/arch/arm/boot/dts/r8a73a4.dtsi
+++ work/arch/arm/boot/dts/r8a73a4.dtsi 2015-06-20 14:46:07.442366518 +0900
@@ -114,7 +114,7 @@
};

cmt1: timer@e6130000 {
- compatible = "renesas,cmt-48-r8a73a4", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt1-r8a73a4", "renesas,cmt1-rcar-gen2";
reg = <0 0xe6130000 0 0x1004>;
interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
--- 0001/arch/arm/boot/dts/r8a7790.dtsi
+++ work/arch/arm/boot/dts/r8a7790.dtsi 2015-06-20 14:47:48.652366518 +0900
@@ -212,7 +212,7 @@
};

cmt0: timer@ffca0000 {
- compatible = "renesas,cmt-48-r8a7790", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt0-r8a7790", "renesas,cmt0-rcar-gen2";
reg = <0 0xffca0000 0 0x1004>;
interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>,
<0 143 IRQ_TYPE_LEVEL_HIGH>;
@@ -225,7 +225,7 @@
};

cmt1: timer@e6130000 {
- compatible = "renesas,cmt-48-r8a7790", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt1-r8a7790", "renesas,cmt1-rcar-gen2";
reg = <0 0xe6130000 0 0x1004>;
interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>,
<0 121 IRQ_TYPE_LEVEL_HIGH>,
--- 0001/arch/arm/boot/dts/r8a7791.dtsi
+++ work/arch/arm/boot/dts/r8a7791.dtsi 2015-06-20 14:47:28.652366518 +0900
@@ -193,7 +193,7 @@
};

cmt0: timer@ffca0000 {
- compatible = "renesas,cmt-48-r8a7791", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt0-r8a7791", "renesas,cmt0-rcar-gen2";
reg = <0 0xffca0000 0 0x1004>;
interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>,
<0 143 IRQ_TYPE_LEVEL_HIGH>;
@@ -206,7 +206,7 @@
};

cmt1: timer@e6130000 {
- compatible = "renesas,cmt-48-r8a7791", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt1-r8a7791", "renesas,cmt1-rcar-gen2";
reg = <0 0xe6130000 0 0x1004>;
interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>,
<0 121 IRQ_TYPE_LEVEL_HIGH>,
--- 0001/arch/arm/boot/dts/r8a7793.dtsi
+++ work/arch/arm/boot/dts/r8a7793.dtsi 2015-06-20 14:46:58.642366518 +0900
@@ -62,7 +62,7 @@
};

cmt0: timer@ffca0000 {
- compatible = "renesas,cmt-48-r8a7793", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt0-r8a7793", "renesas,cmt0-rcar-gen2";
reg = <0 0xffca0000 0 0x1004>;
interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>,
<0 143 IRQ_TYPE_LEVEL_HIGH>;
@@ -75,7 +75,7 @@
};

cmt1: timer@e6130000 {
- compatible = "renesas,cmt-48-r8a7793", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt1-r8a7793", "renesas,cmt1-rcar-gen2";
reg = <0 0xe6130000 0 0x1004>;
interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>,
<0 121 IRQ_TYPE_LEVEL_HIGH>,
--- 0001/arch/arm/boot/dts/r8a7794.dtsi
+++ work/arch/arm/boot/dts/r8a7794.dtsi 2015-06-20 14:47:17.122366518 +0900
@@ -51,7 +51,7 @@
};

cmt0: timer@ffca0000 {
- compatible = "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt0-r8a7794", "renesas,cmt0-rcar-gen2";
reg = <0 0xffca0000 0 0x1004>;
interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>,
<0 143 IRQ_TYPE_LEVEL_HIGH>;
@@ -64,7 +64,7 @@
};

cmt1: timer@e6130000 {
- compatible = "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt1-r8a7794", "renesas,cmt1-rcar-gen2";
reg = <0 0xe6130000 0 0x1004>;
interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>,
<0 121 IRQ_TYPE_LEVEL_HIGH>,

2015-06-21 08:08:24

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 07/08] devicetree: bindings: Deprecate property, update example

From: Magnus Damm <[email protected]>

Deprecate "renesas,channels-mask" and update the r8a7790 CMT example.

Signed-off-by: Magnus Damm <[email protected]>
---

Documentation/devicetree/bindings/timer/renesas,cmt.txt | 24 ++++++++++-----
1 file changed, 17 insertions(+), 7 deletions(-)

--- 0006/Documentation/devicetree/bindings/timer/renesas,cmt.txt
+++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 15:13:32.752366518 +0900
@@ -60,21 +60,31 @@ Required Properties:
in clock-names.
- clock-names: must contain "fck" for the functional clock.

- - renesas,channels-mask: bitmask of the available channels.
+ - renesas,channels-mask: <deprecated>, information kept in device driver.


-Example: R8A7790 (R-Car H2) CMT0 node
-
- CMT0 on R8A7790 implements hardware channels 5 and 6 only and names
- them channels 0 and 1 in the documentation.
+Example: R8A7790 (R-Car H2) CMT0 and CMT1 nodes

cmt0: timer@ffca0000 {
- compatible = "renesas,cmt-48-r8a7790", "renesas,cmt-48-gen2";
+ compatible = "renesas,cmt0-r8a7790", "renesas,cmt0-rcar-gen2";
reg = <0 0xffca0000 0 0x1004>;
interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>,
<0 142 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp1_clks R8A7790_CLK_CMT0>;
clock-names = "fck";
+ };

- renesas,channels-mask = <0x60>;
+ cmt1: timer@e6130000 {
+ compatible = "renesas,cmt1-r8a7790", "renesas,cmt1-rcar-gen2";
+ reg = <0 0xe6130000 0 0x1004>;
+ interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>,
+ <0 121 IRQ_TYPE_LEVEL_HIGH>,
+ <0 122 IRQ_TYPE_LEVEL_HIGH>,
+ <0 123 IRQ_TYPE_LEVEL_HIGH>,
+ <0 124 IRQ_TYPE_LEVEL_HIGH>,
+ <0 125 IRQ_TYPE_LEVEL_HIGH>,
+ <0 126 IRQ_TYPE_LEVEL_HIGH>,
+ <0 127 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp3_clks R8A7790_CLK_CMT1>;
+ clock-names = "fck";
};

2015-06-21 08:08:37

by Magnus Damm

[permalink] [raw]
Subject: [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS

From: Magnus Damm <[email protected]>

Update the DTS to remove the now deprecated "renesas,channels-mask" property.

The channel information is now kept in the device driver and can easily
be determined based on the compat string.

Signed-off-by: Magnus Damm <[email protected]>
---

arch/arm/boot/dts/r8a73a4.dtsi | 3 ---
arch/arm/boot/dts/r8a7740.dtsi | 3 ---
arch/arm/boot/dts/r8a7790.dtsi | 6 ------
arch/arm/boot/dts/r8a7791.dtsi | 6 ------
arch/arm/boot/dts/r8a7793.dtsi | 6 ------
arch/arm/boot/dts/r8a7794.dtsi | 6 ------
arch/arm/boot/dts/sh73a0.dtsi | 3 ---
7 files changed, 33 deletions(-)

--- 0009/arch/arm/boot/dts/r8a73a4.dtsi
+++ work/arch/arm/boot/dts/r8a73a4.dtsi 2015-06-20 14:51:41.942366518 +0900
@@ -120,9 +120,6 @@
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
clock-names = "fck";
power-domains = <&pd_c5>;
-
- renesas,channels-mask = <0xff>;
-
status = "disabled";
};

--- 0001/arch/arm/boot/dts/r8a7740.dtsi
+++ work/arch/arm/boot/dts/r8a7740.dtsi 2015-06-20 14:52:11.332366518 +0900
@@ -60,9 +60,6 @@
clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
clock-names = "fck";
power-domains = <&pd_c5>;
-
- renesas,channels-mask = <0x3f>;
-
status = "disabled";
};

--- 0009/arch/arm/boot/dts/r8a7790.dtsi
+++ work/arch/arm/boot/dts/r8a7790.dtsi 2015-06-20 14:50:43.532366518 +0900
@@ -218,9 +218,6 @@
<0 143 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp1_clks R8A7790_CLK_CMT0>;
clock-names = "fck";
-
- renesas,channels-mask = <0x60>;
-
status = "disabled";
};

@@ -237,9 +234,6 @@
<0 127 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7790_CLK_CMT1>;
clock-names = "fck";
-
- renesas,channels-mask = <0xff>;
-
status = "disabled";
};

--- 0009/arch/arm/boot/dts/r8a7791.dtsi
+++ work/arch/arm/boot/dts/r8a7791.dtsi 2015-06-20 14:51:00.622366518 +0900
@@ -199,9 +199,6 @@
<0 143 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp1_clks R8A7791_CLK_CMT0>;
clock-names = "fck";
-
- renesas,channels-mask = <0x60>;
-
status = "disabled";
};

@@ -218,9 +215,6 @@
<0 127 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7791_CLK_CMT1>;
clock-names = "fck";
-
- renesas,channels-mask = <0xff>;
-
status = "disabled";
};

--- 0009/arch/arm/boot/dts/r8a7793.dtsi
+++ work/arch/arm/boot/dts/r8a7793.dtsi 2015-06-20 14:51:16.702366518 +0900
@@ -68,9 +68,6 @@
<0 143 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp1_clks R8A7793_CLK_CMT0>;
clock-names = "fck";
-
- renesas,channels-mask = <0x60>;
-
status = "disabled";
};

@@ -87,9 +84,6 @@
<0 127 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7793_CLK_CMT1>;
clock-names = "fck";
-
- renesas,channels-mask = <0xff>;
-
status = "disabled";
};

--- 0009/arch/arm/boot/dts/r8a7794.dtsi
+++ work/arch/arm/boot/dts/r8a7794.dtsi 2015-06-20 14:51:29.512366518 +0900
@@ -57,9 +57,6 @@
<0 143 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp1_clks R8A7794_CLK_CMT0>;
clock-names = "fck";
-
- renesas,channels-mask = <0x60>;
-
status = "disabled";
};

@@ -76,9 +73,6 @@
<0 127 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7794_CLK_CMT1>;
clock-names = "fck";
-
- renesas,channels-mask = <0xff>;
-
status = "disabled";
};

--- 0001/arch/arm/boot/dts/sh73a0.dtsi
+++ work/arch/arm/boot/dts/sh73a0.dtsi 2015-06-20 14:51:56.502366518 +0900
@@ -84,9 +84,6 @@
clocks = <&mstp3_clks SH73A0_CLK_CMT1>;
clock-names = "fck";
power-domains = <&pd_c5>;
-
- renesas,channels-mask = <0x3f>;
-
status = "disabled";
};

2015-06-22 09:38:23

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding

Hi Magnus,

On Sun, Jun 21, 2015 at 10:09 AM, Magnus Damm <[email protected]> wrote:
> From: Magnus Damm <[email protected]>
>
> Remove the sh7372 CMT compat string to reduce maintenance burden.
>
> It should be fine to break DT compatibility because:
> 1) The sh7372 SoC support has been removed from upstream
> 2) The sh7372 CMT DT binding was never part of upstream DTS
> 3) The CMT driver never matches on the sh7372 binding
>
> Signed-off-by: Magnus Damm <[email protected]>
> ---
>
> Documentation/devicetree/bindings/timer/renesas,cmt.txt | 2 --
> 1 file changed, 2 deletions(-)
>
> --- 0001/Documentation/devicetree/bindings/timer/renesas,cmt.txt
> +++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 13:47:59.922366518 +0900
> @@ -32,8 +32,6 @@ Required Properties:
> (CMT[234] on sh7372, sh73a0 and r8a7740)
> This is a fallback for the above renesas,cmt-32-fast-* entries.
>
> - - "renesas,cmt-48-sh7372" for the sh7372 48-bit CMT
> - (CMT1)

You forgot to remove the reference to sh7372 in the "renesas,cmt-48"
fallback section, and the "renesas,cmt-32-sh7372" and
"renesas,cmt-32-fast-sh7372" bindings.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2015-06-22 09:42:15

by Magnus Damm

[permalink] [raw]
Subject: Re: [PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding

Hi Geert,

On Mon, Jun 22, 2015 at 6:38 PM, Geert Uytterhoeven
<[email protected]> wrote:
> Hi Magnus,
>
> On Sun, Jun 21, 2015 at 10:09 AM, Magnus Damm <[email protected]> wrote:
>> From: Magnus Damm <[email protected]>
>>
>> Remove the sh7372 CMT compat string to reduce maintenance burden.
>>
>> It should be fine to break DT compatibility because:
>> 1) The sh7372 SoC support has been removed from upstream
>> 2) The sh7372 CMT DT binding was never part of upstream DTS
>> 3) The CMT driver never matches on the sh7372 binding
>>
>> Signed-off-by: Magnus Damm <[email protected]>
>> ---
>>
>> Documentation/devicetree/bindings/timer/renesas,cmt.txt | 2 --
>> 1 file changed, 2 deletions(-)
>>
>> --- 0001/Documentation/devicetree/bindings/timer/renesas,cmt.txt
>> +++ work/Documentation/devicetree/bindings/timer/renesas,cmt.txt 2015-06-20 13:47:59.922366518 +0900
>> @@ -32,8 +32,6 @@ Required Properties:
>> (CMT[234] on sh7372, sh73a0 and r8a7740)
>> This is a fallback for the above renesas,cmt-32-fast-* entries.
>>
>> - - "renesas,cmt-48-sh7372" for the sh7372 48-bit CMT
>> - (CMT1)
>
> You forgot to remove the reference to sh7372 in the "renesas,cmt-48"
> fallback section, and the "renesas,cmt-32-sh7372" and
> "renesas,cmt-32-fast-sh7372" bindings.

Thanks, yeah, I noticed that after sending out the series. I couldn't
find any DT users of the "fast" group though, so perhaps I need to
extend my pruning a bit. First it would be good to see if we could
reach an agreement about how to handle DT compat strings for these
kind of devices though. (devices where instances within one particular
SoC are quite different).

Cheers,

/ magnus

2015-06-22 09:43:25

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case

On Sun, Jun 21, 2015 at 10:09 AM, Magnus Damm <[email protected]> wrote:
> From: Magnus Damm <[email protected]>
>
> Always use 0x3f as channel mask for the SH_CMT_48BIT type of devices.
> Once this patch is applied the "renesas,channels-mask" property will
> be ignored by the driver for older devices matching SH_CMT_48BIT. In
> the future when all CMT types store channel mask in the driver then
> we will be able to deprecate and remove "renesas,channels-mask" from DTS.
>
> Signed-off-by: Magnus Damm <[email protected]>
> ---
>
> drivers/clocksource/sh_cmt.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> --- 0001/drivers/clocksource/sh_cmt.c
> +++ work/drivers/clocksource/sh_cmt.c 2015-06-20 15:25:54.302366518 +0900

> @@ -969,9 +972,14 @@ static int sh_cmt_setup(struct sh_cmt_de
> id = of_match_node(sh_cmt_of_table, pdev->dev.of_node);
> cmt->info = id->data;
>
> - ret = sh_cmt_parse_dt(cmt);
> - if (ret < 0)
> - return ret;
> + /* prefer in-driver channel configuration over DT */
> + if (cmt->info->channels_mask) {
> + cmt->hw_channels = cmt->info_channels_mask;

drivers/clocksource/sh_cmt.c: In function 'sh_cmt_setup':
drivers/clocksource/sh_cmt.c:996:26: error: 'struct sh_cmt_device' has
no member named 'info_channels_mask'
cmt->hw_channels = cmt->info_channels_mask;
^

"cmt->info->channels_mask"

> + } else {
> + ret = sh_cmt_parse_dt(cmt);
> + if (ret < 0)
> + return ret;
> + }

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2015-06-22 09:45:39

by Magnus Damm

[permalink] [raw]
Subject: Re: [PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case

On Mon, Jun 22, 2015 at 6:43 PM, Geert Uytterhoeven
<[email protected]> wrote:
> On Sun, Jun 21, 2015 at 10:09 AM, Magnus Damm <[email protected]> wrote:
>> From: Magnus Damm <[email protected]>
>>
>> Always use 0x3f as channel mask for the SH_CMT_48BIT type of devices.
>> Once this patch is applied the "renesas,channels-mask" property will
>> be ignored by the driver for older devices matching SH_CMT_48BIT. In
>> the future when all CMT types store channel mask in the driver then
>> we will be able to deprecate and remove "renesas,channels-mask" from DTS.
>>
>> Signed-off-by: Magnus Damm <[email protected]>
>> ---
>>
>> drivers/clocksource/sh_cmt.c | 14 +++++++++++---
>> 1 file changed, 11 insertions(+), 3 deletions(-)
>>
>> --- 0001/drivers/clocksource/sh_cmt.c
>> +++ work/drivers/clocksource/sh_cmt.c 2015-06-20 15:25:54.302366518 +0900
>
>> @@ -969,9 +972,14 @@ static int sh_cmt_setup(struct sh_cmt_de
>> id = of_match_node(sh_cmt_of_table, pdev->dev.of_node);
>> cmt->info = id->data;
>>
>> - ret = sh_cmt_parse_dt(cmt);
>> - if (ret < 0)
>> - return ret;
>> + /* prefer in-driver channel configuration over DT */
>> + if (cmt->info->channels_mask) {
>> + cmt->hw_channels = cmt->info_channels_mask;
>
> drivers/clocksource/sh_cmt.c: In function 'sh_cmt_setup':
> drivers/clocksource/sh_cmt.c:996:26: error: 'struct sh_cmt_device' has
> no member named 'info_channels_mask'
> cmt->hw_channels = cmt->info_channels_mask;
> ^
>
> "cmt->info->channels_mask"

Ouch, will fix. Thanks!

/ magnus

2015-06-22 09:49:45

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 00/08] clocksource: sh_cmt: DT binding rework

Hi Magnus,

On Sun, Jun 21, 2015 at 10:09 AM, Magnus Damm <[email protected]> wrote:
> clocksource: sh_cmt: DT binding rework
>
> [PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding
> [PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case
> [PATCH 03/08] devicetree: bindings: R-Car Gen2 CMT0 and CMT1 bindings
> [PATCH 04/08] clocksource: sh_cmt: Support separate R-Car Gen2 CMT0/1
> [PATCH 05/08] devicetree: bindings: r8a73a4 and R-Car Gen2 CMT bindings
> [PATCH 06/08] ARM: shmobile: Update CMT compat string users in DTS
> [PATCH 07/08] devicetree: bindings: Deprecate property, update example
> [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS
>
> This series reworks the CMT DT bindings to try to deal with the following:
> - R-Car Gen2 CMT0 and CMT1 hardware instances are not identical
> - The property renesas,channels-mask is not enough to describe the difference
> - DT should describe the hardware, not the software implementation
> - Not all documented DT bindings are actually used

Thanks for your series!

> Without these patches the binding "renesas,cmt-48-gen2" is used for both
> CMT0 and CMT1 on R-Car Gen2 SoCs. CMT0 and CMT1 are currently seen by the
> Linux device driver as compatible hardware, and the device-specific property
> "renesas,channels-mask" is used to point out some of the hardware configuration
> differences. Since the driver is not feature complete only some differences are
> described and when diving into the data sheet we can see that:
>
> 1) CMT0 is not 48-bit at all, instead it only supports 32-bit counters.
> 2) Some channels of CMT1 are 48-bit, some 32-bit.
> 3) A couple of CMT1 channels have even more features.
>
> It turns out that none of the above differences are described in our current
> DT files. And since we use the same compat string for CMT0 and CMT1 the driver
> itself cannot enable features specific only to CMT1 without first updating
> the DTS. So this series is ground work for future feature patches.
>
> It seems that we have two choices if we want to support CMT1 features:
> A) Keep existing DT bindings, add more properties for CMT1
> B) Rework the compatible strings and keep configuration in the driver
>
> Judging by above it seems that DT update is inevitable. In my mind it is
> rather painful to update the DT so I'd like to minimize the number of
> updates and let the majority of the changes only happen in the driver.
> And since we should really describe hardware in DT but driver features tend
> to be implemented incrementally then B) seems like a good fit to me.
>
> I wouldn't mind going with A) but to be honest I must say that the existing
> compat string "renesas,cmt-48-gen2" is just too confusing with "48"
> (when CMT0 is 32bit-only) and also "gen2" (used without product line R-Car).
>
> Because of that I've gone with B) and reworked the bindings to separate
> CMT0 from CMT1 and keep channel configuration in the device driver.

I'm also in favor of B. I'd also like to use this opportunity to point
to slide 30
of my presentation "Engaging Device Trees" at ELC2014:

- Avoid adding more properties to differentiate
- You may be/guess wrong about compatibility
- What if you discover an incompatibility later?
→ Use SoC-specific compatible properties from the start

(http://elinux.org/images/e/e2/Engaging_Device_Trees_0.pdf)

> Signed-off-by: Magnus Damm <[email protected]>

(if you implemented my comment on 01/08)
Acked-by: Geert Uytterhoeven <[email protected]>

(with 02/08 fixed)
Tested-by: Geert Uytterhoeven <[email protected]>
on sh73a0/kzm9g, r8a7740/armadillo, r8a73a4/ape6evm, r8a7791/koelsch.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2015-06-22 22:39:33

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS

Hi Magnus,

Thank you for the patch.

On Sunday 21 June 2015 17:10:33 Magnus Damm wrote:
> From: Magnus Damm <[email protected]>
>
> Update the DTS to remove the now deprecated "renesas,channels-mask"
> property.
>
> The channel information is now kept in the device driver and can easily
> be determined based on the compat string.

Unless I've missed something (which is entirely possibly given the late hour),
the channel mask is only stored in the driver for the Gen2 CMT instances.

> Signed-off-by: Magnus Damm <[email protected]>
> ---
>
> arch/arm/boot/dts/r8a73a4.dtsi | 3 ---
> arch/arm/boot/dts/r8a7740.dtsi | 3 ---
> arch/arm/boot/dts/r8a7790.dtsi | 6 ------
> arch/arm/boot/dts/r8a7791.dtsi | 6 ------
> arch/arm/boot/dts/r8a7793.dtsi | 6 ------
> arch/arm/boot/dts/r8a7794.dtsi | 6 ------
> arch/arm/boot/dts/sh73a0.dtsi | 3 ---
> 7 files changed, 33 deletions(-)

--
Regards,

Laurent Pinchart

2015-06-22 22:44:37

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH 00/08] clocksource: sh_cmt: DT binding rework

Hi Magnus,

Thank you for the patches.

On Sunday 21 June 2015 17:09:03 Magnus Damm wrote:
> clocksource: sh_cmt: DT binding rework
>
> [PATCH 01/08] devicetree: bindings: Remove sh7372 CMT binding
> [PATCH 02/08] clocksource: sh_cmt: Use 0x3f mask for SH_CMT_48BIT case
> [PATCH 03/08] devicetree: bindings: R-Car Gen2 CMT0 and CMT1 bindings
> [PATCH 04/08] clocksource: sh_cmt: Support separate R-Car Gen2 CMT0/1
> [PATCH 05/08] devicetree: bindings: r8a73a4 and R-Car Gen2 CMT bindings
> [PATCH 06/08] ARM: shmobile: Update CMT compat string users in DTS
> [PATCH 07/08] devicetree: bindings: Deprecate property, update example
> [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS
>
> This series reworks the CMT DT bindings to try to deal with the following:
> - R-Car Gen2 CMT0 and CMT1 hardware instances are not identical
> - The property renesas,channels-mask is not enough to describe the
> difference
> - DT should describe the hardware, not the software implementation
> - Not all documented DT bindings are actually used
>
> Without these patches the binding "renesas,cmt-48-gen2" is used for both
> CMT0 and CMT1 on R-Car Gen2 SoCs. CMT0 and CMT1 are currently seen by the
> Linux device driver as compatible hardware, and the device-specific property
> "renesas,channels-mask" is used to point out some of the hardware
> configuration differences. Since the driver is not feature complete only
> some differences are described and when diving into the data sheet we can
> see that:
>
> 1) CMT0 is not 48-bit at all, instead it only supports 32-bit counters.

How the heck did we come up with these bindings in the first place ?

> 2) Some channels of CMT1 are 48-bit, some 32-bit.
> 3) A couple of CMT1 channels have even more features.
>
> It turns out that none of the above differences are described in our current
> DT files. And since we use the same compat string for CMT0 and CMT1 the
> driver itself cannot enable features specific only to CMT1 without first
> updating the DTS. So this series is ground work for future feature patches.
>
> It seems that we have two choices if we want to support CMT1 features:
> A) Keep existing DT bindings, add more properties for CMT1
> B) Rework the compatible strings and keep configuration in the driver
>
> Judging by above it seems that DT update is inevitable. In my mind it is
> rather painful to update the DT so I'd like to minimize the number of
> updates and let the majority of the changes only happen in the driver.
> And since we should really describe hardware in DT but driver features tend
> to be implemented incrementally then B) seems like a good fit to me.
>
> I wouldn't mind going with A) but to be honest I must say that the existing
> compat string "renesas,cmt-48-gen2" is just too confusing with "48"
> (when CMT0 is 32bit-only) and also "gen2" (used without product line R-Car).
>
> Because of that I've gone with B) and reworked the bindings to separate
> CMT0 from CMT1 and keep channel configuration in the device driver.

In this specific case B seems to be better given that the CMT features look
quite random. We would need to encode too many properties in DT.

> While at it I've deprecated "renesas,channels-mask" and the old DT compat
> strings. Per-SoC compat strings have also been reworked, but are not left
> around documented as deprecated since they were never used by the driver.

Shouldn't we remove the renesas,channels-mask property completely from the
documentation ? The git history could be considered as enough when it comes to
documenting deprecated properties.

> Comments are very welcome! If all are in favor then it would be good to
> merge patch 1-5 first and patch 6-8 later once 1-5 are in. Old DTBs are
> left working but treated as low-feature CMT0. New DTBs including patch 6-8
> will not work on old kernels.

Apart from Geert's comments on patches 1/8 and 2/8, and my comment on patch
8/8, the series looks fine to me.

With those problems fixed,

Acked-by: Laurent Pinchart <[email protected]>

> Signed-off-by: Magnus Damm <[email protected]>
> ---
>
> Written against renesas-devel-20150619-v4.1-rc8
>
> Documentation/devicetree/bindings/timer/renesas,cmt.txt | 55 +++++++-----
> arch/arm/boot/dts/r8a73a4.dtsi | 5 -
> arch/arm/boot/dts/r8a7740.dtsi | 3
> arch/arm/boot/dts/r8a7790.dtsi | 10 --
> arch/arm/boot/dts/r8a7791.dtsi | 10 --
> arch/arm/boot/dts/r8a7793.dtsi | 10 --
> arch/arm/boot/dts/r8a7794.dtsi | 10 --
> arch/arm/boot/dts/sh73a0.dtsi | 3
> drivers/clocksource/sh_cmt.c | 54 ++++++++----
> 9 files changed, 83 insertions(+), 77 deletions(-)

--
Regards,

Laurent Pinchart

2015-06-23 02:46:54

by Magnus Damm

[permalink] [raw]
Subject: Re: [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS

Hi Laurent,

On Tue, Jun 23, 2015 at 7:40 AM, Laurent Pinchart
<[email protected]> wrote:
> Hi Magnus,
>
> Thank you for the patch.
>
> On Sunday 21 June 2015 17:10:33 Magnus Damm wrote:
>> From: Magnus Damm <[email protected]>
>>
>> Update the DTS to remove the now deprecated "renesas,channels-mask"
>> property.
>>
>> The channel information is now kept in the device driver and can easily
>> be determined based on the compat string.
>
> Unless I've missed something (which is entirely possibly given the late hour),
> the channel mask is only stored in the driver for the Gen2 CMT instances.

The case for sh73a0 and r8a7740 is also covered by some of the earlier
patches in this series. So unless I'm mistaken the series should cover
all current in-tree CMT DT users that we have. I'm not aware of any
out-of-tree users.

You are right that there are more unused compat strings documented, so
those will break. I would be tempted in phasing those out somehow.
Also, I did not spend much time cleaning up the non R-Car Gen2 cases,
so in general that needs some love.

Thanks!

/ magnus

2015-06-25 21:56:11

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH 08/08] ARM: shmobile: Remove CMT renesas,channels-mask from DTS

Hi Magnus,

On Tuesday 23 June 2015 11:46:45 Magnus Damm wrote:
> On Tue, Jun 23, 2015 at 7:40 AM, Laurent Pinchart wrote:
> > On Sunday 21 June 2015 17:10:33 Magnus Damm wrote:
> >> From: Magnus Damm <[email protected]>
> >>
> >> Update the DTS to remove the now deprecated "renesas,channels-mask"
> >> property.
> >>
> >> The channel information is now kept in the device driver and can easily
> >> be determined based on the compat string.
> >
> > Unless I've missed something (which is entirely possibly given the late
> > hour), the channel mask is only stored in the driver for the Gen2 CMT
> > instances.
>
> The case for sh73a0 and r8a7740 is also covered by some of the earlier
> patches in this series.

My bad, I've missed that. We should be good then.

> So unless I'm mistaken the series should cover all current in-tree CMT DT
> users that we have. I'm not aware of any out-of-tree users.
>
> You are right that there are more unused compat strings documented, so
> those will break. I would be tempted in phasing those out somehow.
> Also, I did not spend much time cleaning up the non R-Car Gen2 cases,
> so in general that needs some love.

--
Regards,

Laurent Pinchart