Skip to contentSkip to conversation

Initial Device Tree support for S3C64xx

PATCH Superseded Tomasz Figa 7 participants 32 messages Aug 21, 2013 – Aug 25, 2013

Subsystems (8)
lore
Share & tools
lore
#0 lore raw

v7 cover Initial Device Tree support for S3C64xx

This series adds Device Tree support for Samsung S3C64xx SoC series.

It fixes several problems preventing from booting an S3C64xx-based system using Device Tree, adds all the infrastructure for Device Tree-based board support, including mach-s3c64xx-dt and dts include files for S3C64xx SoCs, and basic device tree source for FriendlyARM Mini6410 and SAMSUNG SMDK6410 boards.

Current support is somewhat limite, but should be fine as a start and will be extended in future, hopefully with help of S3C64xx board maintainers.

Depends on:
- [PATCH v2 0/8] Common Clock Framework support for Samsung S3C64xx
http://thread.gmane.org/gmane.linux.usb.general/90493

On Samsung S3C6410-based Mini6410 and SMDK6410 boards:

Changes since v6:
- Rebased onto current for-next branch of Kgene's tree,
- Dropped the idea of .init_platform() machine callback,
- Added support for i2c controllers,
- Replaced separate apb and ahb nodes with a single common soc node,
- Updated cpus node according to CPU bindings,
- Updated fixed rate clock nodes to use generic bindings,
- Added support for PWM buzzer and I2C EEPROM on Mini6410 board,
- Simplified the condition of skipping legacy GPIO initialization.

Changes since v5:
- Rebased onto current for-next branch of Kgene's tree,
- Added support for new Common Clock Framework based clock driver,
- Introduced hierarchical structure of device nodes (representing physical AHB and APB buses),
- Bypassed most of legacy initialization when booting with DT,
- Used preprocessor macros in dts files to improve readabilty,
- Added support for SMDK6410 board.

Changes since v4:
- Rebased onto current for-next branch of Kgene's tree
- Added support for pinctrl (driver merged through pinctrl tree)
- Added labels to all nodes that can be overridden from board dts
- Modified board dts to use the &label syntax to reference device nodes

Changes since v3:
- Rebased onto current for-next branch of Kgene's tree
- Updated timer node for next version of samsung-time patches
- Replaced local s3c64xx_dt_init_irq with irqchip_init

Changes since v2:
- Updated timer node for next version of samsung-time patches

Changes since v1:
- Dropped two VIC-related patches that are no longer necessary
- Added Device Tree-based instantation of system timers
- Corrected VIC interrupt specifiers
- Adjusted CPU compatible values and dropped @id

Tomasz Figa (7):
ARM: common: vic: Parse interrupt and resume masks from device tree
ARM: s3c64xx: Bypass legacy initialization when booting with DT
gpio: samsung: Skip initialization if device tree is present
ARM: s3c64xx: Add board file for boot using Device Tree
ARM: dts: Add basic dts include files for Samsung S3C64xx SoCs
ARM: dts: Add dts file for S3C6410-based Mini6410 board
ARM: dts: Add dts file for S3C6410-based SMDK6410 board

 Documentation/devicetree/bindings/arm/vic.txt |   6 +
 arch/arm/boot/dts/Makefile                    |   2 +
 arch/arm/boot/dts/s3c6400.dtsi                |  41 ++
 arch/arm/boot/dts/s3c6410-mini6410.dts        | 228 +++++++++
 arch/arm/boot/dts/s3c6410-smdk6410.dts        | 103 ++++
 arch/arm/boot/dts/s3c6410.dtsi                |  57 +++
 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi        | 687 ++++++++++++++++++++++++++
 arch/arm/boot/dts/s3c64xx.dtsi                | 199 ++++++++
 arch/arm/mach-s3c64xx/Kconfig                 |  16 +
 arch/arm/mach-s3c64xx/Makefile                |   1 +
 arch/arm/mach-s3c64xx/common.c                |  12 +
 arch/arm/mach-s3c64xx/dma.c                   |   9 +
 arch/arm/mach-s3c64xx/irq-pm.c                |   9 +
 arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c       |  85 ++++
 arch/arm/mach-s3c64xx/s3c6400.c               |   9 +
 arch/arm/mach-s3c64xx/s3c6410.c               |   9 +
 arch/arm/plat-samsung/init.c                  |  12 +-
 drivers/gpio/gpio-samsung.c                   |  34 +-
 drivers/irqchip/irq-vic.c                     |   7 +-
 19 files changed, 1497 insertions(+), 29 deletions(-)
 create mode 100644 arch/arm/boot/dts/s3c6400.dtsi
 create mode 100644 arch/arm/boot/dts/s3c6410-mini6410.dts
 create mode 100644 arch/arm/boot/dts/s3c6410-smdk6410.dts
 create mode 100644 arch/arm/boot/dts/s3c6410.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx.dtsi
 create mode 100644 arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c
Signature · 1 line
1.8.3.2
#1 lore raw

PATCH v7 1/7 ARM: common: vic: Parse interrupt and resume masks from device tree

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

---
 Documentation/devicetree/bindings/arm/vic.txt | 6 ++++++
 drivers/irqchip/irq-vic.c                     | 7 ++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/arm/vic.txt +6 -0
index 266716b..bb7137c 100644
@@ -18,6 +18,9 @@ Required properties:
 Optional properties:
 
 - interrupts : Interrupt source for parent controllers if the VIC is nested.
+- interrupt-mask : Bit mask of valid interrupt sources (defaults to all valid)
+- wakeup-mask : Bit mask of interrupt sources that can wake up the system
+  (defaults to all allowed)
 
 Example:
 
@@ -26,4 +29,7 @@ Example:
 		interrupt-controller;
 		#interrupt-cells = <1>;
 		reg = <0x60000 0x1000>;
+
+		interrupt-mask = <0xffffff7f>;
+		wakeup-mask = <0x0000ff7f>;
 	};
drivers/irqchip/irq-vic.c +6 -1
index 2bbb004..d56750eb 100644
@@ -469,6 +469,8 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
 int __init vic_of_init(struct device_node *node, struct device_node *parent)
 {
 	void __iomem *regs;
+	u32 interrupt_mask = ~0;
+	u32 wakeup_mask = ~0;
 
 	if (WARN(parent, "non-root VICs are not supported"))
 		return -EINVAL;
@@ -477,10 +479,13 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent)
 	if (WARN_ON(!regs))
 		return -EIO;
 
+	of_property_read_u32(node, "interrupt-mask", &interrupt_mask);
+	of_property_read_u32(node, "wakeup-mask", &wakeup_mask);
+
 	/*
 	 * Passing 0 as first IRQ makes the simple domain allocate descriptors
 	 */
-	__vic_init(regs, 0, ~0, ~0, node);
+	__vic_init(regs, 0, interrupt_mask, wakeup_mask, node);
 
 	return 0;
 }
Signature · 1 line
1.8.3.2
#2 lore raw

PATCH v7 1/7 ARM: common: vic: Parse interrupt and resume masks from device tree

Documentation/devicetree/bindings/arm/vic.txt Required properties: · line 23

Quoted 8 lines · Tomasz Figa

+++ b/Documentation/devicetree/bindings/arm/vic.txt

Documentation/devicetree/bindings/arm/vic.txt +3 -0
@@ -18,6 +18,9 @@ Required properties:
 Optional properties:
 
 - interrupts : Interrupt source for parent controllers if the VIC is nested.
+- interrupt-mask : Bit mask of valid interrupt sources (defaults to all valid)
+- wakeup-mask : Bit mask of interrupt sources that can wake up the system
+  (defaults to all allowed)

The "interrupt-mask" is called "valid-mask" on the FPGA IRQ controller See Documentation/devicetree/bindings/arm/versatile-fpga-irq.txt

Example:

                reg = <0x10000040 0x100>;
                clear-mask = <0xffffffff>;
                valid-mask = <0x00000007>;

Please use the same name.

(wakeup-mask is fine).

Yours,
Linus Walleij

#3 lore raw

PATCH v7 1/7 ARM: common: vic: Parse interrupt and resume masks from device tree

Quoted 1 line · On Thursday 22 of August 2013 01:19:34 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa <[email protected]>

Quoted 15 lines · wrote:
Quoted 10 lines

+++ b/Documentation/devicetree/bindings/arm/vic.txt

(quoted diff) +1 -0
@@ -18,6 +18,9 @@ Required properties:
 Optional properties:
 
 - interrupts : Interrupt source for parent controllers if the VIC is
 nested.> 
+- interrupt-mask : Bit mask of valid interrupt sources (defaults to

all valid) +- wakeup-mask : Bit mask of interrupt sources that can wake up the system + (defaults to all allowed)

The "interrupt-mask" is called "valid-mask" on the FPGA IRQ controller See Documentation/devicetree/bindings/arm/versatile-fpga-irq.txt

Quoted 7 lines

Example:

                reg = <0x10000040 0x100>;
                clear-mask = <0xffffffff>;
                valid-mask = <0x00000007>;

Please use the same name.

Oh, I haven't noticed that. Thanks for the information.

Best regards,
Tomasz

#4 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

In reply to Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

---
 Documentation/devicetree/bindings/arm/vic.txt | 6 ++++++
 drivers/irqchip/irq-vic.c                     | 7 ++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

Changes since v7:
- Renamed interrupt-mask property to valid-mask, for consistency with bindings of other interrupt controllers.

Documentation/devicetree/bindings/arm/vic.txt +6 -0
index 266716b..3379666 100644
@@ -18,6 +18,9 @@ Required properties:
 Optional properties:
 
 - interrupts : Interrupt source for parent controllers if the VIC is nested.
+- valid-mask : Bit mask of valid interrupt sources (defaults to all valid)
+- wakeup-mask : Bit mask of interrupt sources that can wake up the system
+  (defaults to all allowed)
 
 Example:
 
@@ -26,4 +29,7 @@ Example:
 		interrupt-controller;
 		#interrupt-cells = <1>;
 		reg = <0x60000 0x1000>;
+
+		valid-mask = <0xffffff7f>;
+		wakeup-mask = <0x0000ff7f>;
 	};
drivers/irqchip/irq-vic.c +6 -1
index 2bbb004..6437b18 100644
@@ -469,6 +469,8 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
 int __init vic_of_init(struct device_node *node, struct device_node *parent)
 {
 	void __iomem *regs;
+	u32 interrupt_mask = ~0;
+	u32 wakeup_mask = ~0;
 
 	if (WARN(parent, "non-root VICs are not supported"))
 		return -EINVAL;
@@ -477,10 +479,13 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent)
 	if (WARN_ON(!regs))
 		return -EIO;
 
+	of_property_read_u32(node, "valid-mask", &interrupt_mask);
+	of_property_read_u32(node, "wakeup-mask", &wakeup_mask);
+
 	/*
 	 * Passing 0 as first IRQ makes the simple domain allocate descriptors
 	 */
-	__vic_init(regs, 0, ~0, ~0, node);
+	__vic_init(regs, 0, interrupt_mask, wakeup_mask, node);
 
 	return 0;
 }
Signature · 1 line
1.8.3.2
#5 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 7 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Quoted 8 lines
---
 Documentation/devicetree/bindings/arm/vic.txt | 6 ++++++
 drivers/irqchip/irq-vic.c                     | 7 ++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

Changes since v7:
- Renamed interrupt-mask property to valid-mask, for consistency with bindings of other interrupt controllers.

Yours,
Linus Walleij

#6 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

In reply to Tomasz Figa
Quoted 5 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

Documentation/devicetree/bindings/arm/vic.txt Required properties: · line 21

Quoted 3 lines
Documentation/devicetree/bindings/arm/vic.txt +1 -0
 
+- valid-mask : Bit mask of valid interrupt sources (defaults to all valid)

Until a device requests an interrupt, it can be left disabled. Once something does request it, it gets enabled. If nothing requests it, it never gets enabled. Doesn't the result of that logic end up being the same thing as valid-mask represents? The only difference would be if some device requests an invalid interrupt source, but then why not just fix the interrupt client instead of adding this property to reject the request?

Quoted 2 lines
+- wakeup-mask : Bit mask of interrupt sources that can wake up the system
+  (defaults to all allowed)

Shouldn't drivers for end-devices request interrupts, and then set wake enable on those interrupts, which would then trickle up the IRQ chain to tell the VIC which interrupts to enable wakeup on?

#7 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 9 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 5 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

To clarify, this is a mask of valid interrupt sources of the VIC, where set bit indicates that given signal is wired and clear bit that it is not.

Quoted 12 lines
Quoted 5 lines
Documentation/devicetree/bindings/arm/vic.txt +1 -0
 
+- valid-mask : Bit mask of valid interrupt sources (defaults to all

valid)

Until a device requests an interrupt, it can be left disabled. Once something does request it, it gets enabled. If nothing requests it, it never gets enabled. Doesn't the result of that logic end up being the same thing as valid-mask represents? The only difference would be if some device requests an invalid interrupt source, but then why not just fix the interrupt client instead of adding this property to reject the request?

This property does not have anything to do with enabling or disabling (aka unmasking/masking) of interrupts. It just lists valid interrupt signals of given VIC.

Quoted 6 lines
Quoted 2 lines
+- wakeup-mask : Bit mask of interrupt sources that can wake up the
system +  (defaults to all allowed)

Shouldn't drivers for end-devices request interrupts, and then set wake enable on those interrupts, which would then trickle up the IRQ chain to tell the VIC which interrupts to enable wakeup on?

This is the same as previous property. It does not have anything to do with requesting particular signal to wake up the system, but rather indicating that particular signal _can_ be requested to do so.

Again, this is not strictly needed for correct operation, but this way you wouldn't get any sanity check over wake up signals being requested.

Best regards,
Tomasz

#8 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 8 lines · Tomasz Figa
Quoted 7 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 5 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Quoted 6 lines
Quoted 2 lines

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

Ah, OK. It may be worth mentioning the intent of the properties. I suppose this is purely a representation of HW then, so it's reasonable to include it in the binding. I'm not sure /quite/ how useful it is; after all the error-checking that it enables will never trigger assuming the rest of the DT is written to "request" the correct interrupts. However, I guess there is little harm in allowing these properties.

Bikeshedding a bit, but perhaps rename wakeup-mask to valid-wakeup-mask (and perhaps valid-mask to valid-source-mask for consistency, although I see you already renamed that to be consistent with other bindings...)? To me, wakeup-mask sounds like a configuration of which sources should be configured to wakeup the system; something to do with configuration/policy rather than HW capabilities.

Either way, the binding,

(I assume those 2 new properties always have 1 cell since the controller can only support up to 32 IRQ sources? If not, then perhaps add wording to describe how long the properties should be).

#9 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 9 lines · On Friday 23 of August 2013 17:19:50 Stephen Warren wrote:
Quoted 8 lines · Tomasz Figa
Quoted 7 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 5 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Quoted 8 lines
Quoted 6 lines
Quoted 2 lines

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

Ah, OK. It may be worth mentioning the intent of the properties.

Right, a bit more detailed description will be nice indeed. I didn't think such thing like this is so uncommon to need such.

Quoted 6 lines

I
suppose this is purely a representation of HW then, so it's reasonable to include it in the binding. I'm not sure /quite/ how useful it is; after all the error-checking that it enables will never trigger assuming the rest of the DT is written to "request" the correct interrupts. However, I guess there is little harm in allowing these properties.

Well, the valid-mask is indeed a bit redundant (although might let you spot errors in interrupt specification in your device tree faster), but wakeup-mask is something that prevents drivers from incorrectly thinking that an interrupt can wake the system up, while it can't. Otherwise enable_irq_wake() wouldn't know when to return an error.

Quoted 6 lines

Bikeshedding a bit, but perhaps rename wakeup-mask to valid-wakeup-mask (and perhaps valid-mask to valid-source-mask for consistency, although I see you already renamed that to be consistent with other bindings...)? To me, wakeup-mask sounds like a configuration of which sources should be configured to wakeup the system; something to do with configuration/policy rather than HW capabilities.

Yes, valid-wakeup-mask sounds reasonably to me. The valid-mask property has been taken from bindings/arm/versatile-fpga-irq.txt, as suggested by Linus Walleij.

Quoted 2 lines

Either way, the binding,

Thanks.

Quoted 3 lines

(I assume those 2 new properties always have 1 cell since the controller can only support up to 32 IRQ sources? If not, then perhaps add wording to describe how long the properties should be).

Correct, one VIC can support up to 32 interrupt sources. A word on this in binding description will be nice indeed.

Best regards,
Tomasz

#10 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

In reply to Tomasz Figa
Quoted 11 lines · Tomasz Figa
Quoted 9 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 5 lines · Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

Quoted 6 lines

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

To clarify, this is a mask of valid interrupt sources of the VIC, where set bit indicates that given signal is wired and clear bit that it is not.

I agree with Stephen here. The valid interrupts are the ones in the DT. The reserved ones are the ones not present. If it is not needed for the operation of the VIC, then remove it. The argument of sanity checking could apply to all interrupt controllers.

Rob

#11 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 1 line · On Saturday 24 of August 2013 10:25:26 Rob Herring wrote:

On Fri, Aug 23, 2013 at 6:04 PM, Tomasz Figa <[email protected]>

Quoted 15 lines · wrote:
Quoted 15 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 9 lines · Tomasz Figa
Quoted 5 lines

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

Quoted 8 lines
Quoted 4 lines

To clarify, this is a mask of valid interrupt sources of the VIC, where
set bit indicates that given signal is wired and clear bit that it is not.

I agree with Stephen here. The valid interrupts are the ones in the DT. The reserved ones are the ones not present. If it is not needed for the operation of the VIC, then remove it. The argument of sanity checking could apply to all interrupt controllers.

Sorry, but I don't get what's wrong in having a more detailed description than required just for operation of the hardware.

The feature of sanity checks based on interrupt_mask (here now called valid-mask) has been present in the VIC driver since a long time already (if not from the beginning of existence of this driver) and before we started using DT, the mask was being passed from platform code as VIC init function argument.

I'd prefer this feature to be available when using DT as well, unless we really want to move things backwards, just because we want to use DT...

Best regards,
Tomasz

#12 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 27 lines · Tomasz Figa
Quoted 1 line · On Saturday 24 of August 2013 10:25:26 Rob Herring wrote:

On Fri, Aug 23, 2013 at 6:04 PM, Tomasz Figa <[email protected]>

Quoted 15 lines · wrote:
Quoted 15 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 9 lines · Tomasz Figa
Quoted 5 lines

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front? Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

Quoted 8 lines
Quoted 4 lines

To clarify, this is a mask of valid interrupt sources of the VIC, where
set bit indicates that given signal is wired and clear bit that it is not.

I agree with Stephen here. The valid interrupts are the ones in the DT. The reserved ones are the ones not present. If it is not needed for the operation of the VIC, then remove it. The argument of sanity checking could apply to all interrupt controllers.

Quoted 8 lines

Sorry, but I don't get what's wrong in having a more detailed description than required just for operation of the hardware.

The feature of sanity checks based on interrupt_mask (here now called valid-mask) has been present in the VIC driver since a long time already (if not from the beginning of existence of this driver) and before we started using DT, the mask was being passed from platform code as VIC init function argument.

So we should base the binding on the Linux software design?

Quoted 2 lines

I'd prefer this feature to be available when using DT as well, unless we really want to move things backwards, just because we want to use DT...

As I mentioned all these arguments apply to ALL interrupt controllers except ones which a mask does not work. So IF this makes sense, then this should be a generic property and generic code to support.

You simply have the same information twice. One is distributed and one is centralized. While it adds a way to validate things it also adds a way to introduce errors. Suppose someone writes a dts such that valid-mask matches the irq lines present in that dts (simply because they were lazy or don't have documentation of all interrupt lines). Then you go add a node with a new interrupt (because the initial dts was not complete). Updating the valid-mask could very easily be forgotten. Yes, this should all be found by testing, but people don't always have access to all the h/w. This issue would also not likely be obvious in a review.

Rob

#13 lore raw

PATCH v8 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

Quoted 35 lines · On Saturday 24 of August 2013 11:35:03 Rob Herring wrote:
Quoted 34 lines · Tomasz Figa
Quoted 1 line · On Saturday 24 of August 2013 10:25:26 Rob Herring wrote:

On Fri, Aug 23, 2013 at 6:04 PM, Tomasz Figa <[email protected]>

Quoted 22 lines · wrote:
Quoted 16 lines · On Friday 23 of August 2013 16:11:18 Stephen Warren wrote:
Quoted 10 lines · Tomasz Figa
Quoted 5 lines

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

Can you explain further why the VIC needs this information up-front?
Presumably it can accumulate it as devices request interrupts.

It does not need this information just for operation, but this makes the hardware description more detailed and allows better sanity checking of interrupts being requested.

Quoted 5 lines

To clarify, this is a mask of valid interrupt sources of the VIC, where
set bit indicates that given signal is wired and clear bit that it is
not.

Quoted 4 lines

I agree with Stephen here. The valid interrupts are the ones in the DT. The reserved ones are the ones not present. If it is not needed for the operation of the VIC, then remove it. The argument of sanity checking could apply to all interrupt controllers.

Sorry, but I don't get what's wrong in having a more detailed description than required just for operation of the hardware.

Quoted 7 lines
Quoted 5 lines

The feature of sanity checks based on interrupt_mask (here now called valid-mask) has been present in the VIC driver since a long time already (if not from the beginning of existence of this driver) and before we started using DT, the mask was being passed from platform code as VIC init function argument.

So we should base the binding on the Linux software design?

I would put it different way: The binding should provide information detailed enough to allow any features allowed by Linux software design.

Well, anyway, I don't believe that existing, pre-ARM, bindings wasn't influenced by how things worked on PowerPC platforms and software running on them (including OpenFirmware and OS'es like Linux).

Quoted 6 lines
Quoted 3 lines

I'd prefer this feature to be available when using DT as well, unless we really want to move things backwards, just because we want to use DT...

As I mentioned all these arguments apply to ALL interrupt controllers except ones which a mask does not work. So IF this makes sense, then this should be a generic property and generic code to support.

Isn't a binding of particular device free to define a private property? Anyway, I wouldn't be opposed to making it generic.

Quoted 1 line

You simply have the same information twice. One is distributed

Assuming you have it specified correctly under client nodes.

Quoted 5 lines

and one
is centralized. While it adds a way to validate things it also adds a way to introduce errors. Suppose someone writes a dts such that valid-mask matches the irq lines present in that dts (simply because they were lazy or don't have documentation of all interrupt lines).

That's why this property is optional. If you don't know how this is set up on your hardware then you don't fill it with a random value, but just skip it instead.

Quoted 5 lines

Then
you go add a node with a new interrupt (because the initial dts was not complete). Updating the valid-mask could very easily be forgotten. Yes, this should all be found by testing, but people don't always have access to all the h/w.

Adding a node with a new interrupt usually means adding support for new hardware. This is something I wouldn't really want to see submitted untested...

Anyway, since I'd like this series to be merged ASAP and this patch is not strictly necessary, especially this optional sanity check, let me just drop this property and move on with other things...

Best regards,
Tomasz

#14 lore raw

PATCH v9 1/7 irqchip: vic: Parse interrupt and resume masks from device tree

In reply to Tomasz Figa

This patch extends vic_of_init to parse valid interrupt sources and resume sources masks from device tree.

If mask values are not specified in device tree, all sources are assumed to be valid, as before this patch.

---
 Documentation/devicetree/bindings/arm/vic.txt | 12 ++++++++++++
 drivers/irqchip/irq-vic.c                     |  7 ++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

Changes since v8:
- Renamed wakeup-mask property to valid-wakeup-mask.
- Extended description of valid-mask and valid-wakeup-mask properties.

Documentation/devicetree/bindings/arm/vic.txt +12 -0
index 266716b..dd52721 100644
@@ -18,6 +18,15 @@ Required properties:
 Optional properties:
 
 - interrupts : Interrupt source for parent controllers if the VIC is nested.
+- valid-mask : A one cell big bit mask of valid interrupt sources. Each bit
+  represents single interrupt source, starting from source 0 at LSb and ending
+  at source 31 at MSb. A bit that is set means that the source is wired and
+  clear means otherwise. If unspecified, defaults to all valid.
+- valid-wakeup-mask : A one cell big bit mask of interrupt sources that can be
+  configured as wake up source for the system. Order of bits is the same as for
+  valid-mask property. A set bit means that this interrupt source can be
+  configured as a wake up source for the system. If unspecied, defaults to all
+  interrupt sources configurable as wake up sources.
 
 Example:
 
@@ -26,4 +35,7 @@ Example:
 		interrupt-controller;
 		#interrupt-cells = <1>;
 		reg = <0x60000 0x1000>;
+
+		valid-mask = <0xffffff7f>;
+		valid-wakeup-mask = <0x0000ff7f>;
 	};
drivers/irqchip/irq-vic.c +6 -1
index 2bbb004..8e21ae0 100644
@@ -469,6 +469,8 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
 int __init vic_of_init(struct device_node *node, struct device_node *parent)
 {
 	void __iomem *regs;
+	u32 interrupt_mask = ~0;
+	u32 wakeup_mask = ~0;
 
 	if (WARN(parent, "non-root VICs are not supported"))
 		return -EINVAL;
@@ -477,10 +479,13 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent)
 	if (WARN_ON(!regs))
 		return -EIO;
 
+	of_property_read_u32(node, "valid-mask", &interrupt_mask);
+	of_property_read_u32(node, "valid-wakeup-mask", &wakeup_mask);
+
 	/*
 	 * Passing 0 as first IRQ makes the simple domain allocate descriptors
 	 */
-	__vic_init(regs, 0, ~0, ~0, node);
+	__vic_init(regs, 0, interrupt_mask, wakeup_mask, node);
 
 	return 0;
 }
Signature · 1 line
1.8.3.2
#15 lore raw

PATCH v7 2/7 ARM: s3c64xx: Bypass legacy initialization when booting with DT

In reply to Tomasz Figa

This patch allows bypassing most of legacy initialization when booting an S3C64xx-based board using device tree, by adding conditional checks for DT presence to initcalls which are no longer necessary when booting with DT..

---
 arch/arm/mach-s3c64xx/common.c  | 12 ++++++++++++
 arch/arm/mach-s3c64xx/dma.c     |  9 +++++++++
 arch/arm/mach-s3c64xx/irq-pm.c  |  9 +++++++++
 arch/arm/mach-s3c64xx/s3c6400.c |  9 +++++++++
 arch/arm/mach-s3c64xx/s3c6410.c |  9 +++++++++
 arch/arm/plat-samsung/init.c    | 12 +++++++++++-
 6 files changed, 59 insertions(+), 1 deletion(-)
arch/arm/mach-s3c64xx/common.c +12 -0
index 7d3cb58..7a3ce4c 100644
@@ -14,6 +14,10 @@
  * published by the Free Software Foundation.
  */
 
+/*
+ * NOTE: Code in this file is not used when booting with Device Tree support.
+ */
+
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/module.h>
@@ -203,6 +207,10 @@ void __init s3c64xx_init_io(struct map_desc *mach_desc, int size)
 
 static __init int s3c64xx_dev_init(void)
 {
+	/* Not applicable when using DT. */
+	if (of_have_populated_dt())
+		return 0;
+
 	subsys_system_register(&s3c64xx_subsys, NULL);
 	return device_register(&s3c64xx_dev);
 }
@@ -404,6 +412,10 @@ static int __init s3c64xx_init_irq_eint(void)
 {
 	int irq;
 
+	/* On DT-enabled systems EINTs are handled by pinctrl-s3c64xx driver. */
+	if (of_have_populated_dt())
+		return -ENODEV;
+
 	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
 		irq_set_chip_and_handler(irq, &s3c_irq_eint, handle_level_irq);
 		irq_set_chip_data(irq, (void *)eint_irq_to_bit(irq));
arch/arm/mach-s3c64xx/dma.c +9 -0
index c511dfa..7e22c21 100644
@@ -12,6 +12,10 @@
  * published by the Free Software Foundation.
 */
 
+/*
+ * NOTE: Code in this file is not used when booting with Device Tree support.
+ */
+
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
@@ -24,6 +28,7 @@
 #include <linux/err.h>
 #include <linux/io.h>
 #include <linux/amba/pl080.h>
+#include <linux/of.h>
 
 #include <mach/dma.h>
 #include <mach/map.h>
@@ -726,6 +731,10 @@ static int __init s3c64xx_dma_init(void)
 {
 	int ret;
 
+	/* This driver is not supported when booting with device tree. */
+	if (of_have_populated_dt())
+		return -ENODEV;
+
 	printk(KERN_INFO "%s: Registering DMA channels\n", __func__);
 
 	dma_pool = dma_pool_create("DMA-LLI", NULL, sizeof(struct pl080s_lli), 16, 0);
arch/arm/mach-s3c64xx/irq-pm.c +9 -0
index c3da1b6..1649c0d 100644
@@ -12,12 +12,17 @@
  * published by the Free Software Foundation.
  */
 
+/*
+ * NOTE: Code in this file is not used when booting with Device Tree support.
+ */
+
 #include <linux/kernel.h>
 #include <linux/syscore_ops.h>
 #include <linux/interrupt.h>
 #include <linux/serial_core.h>
 #include <linux/irq.h>
 #include <linux/io.h>
+#include <linux/of.h>
 
 #include <mach/map.h>
 
@@ -101,6 +106,10 @@ static struct syscore_ops s3c64xx_irq_syscore_ops = {
 
 static __init int s3c64xx_syscore_init(void)
 {
+	/* Appropriate drivers (pinctrl, uart) handle this when using DT. */
+	if (of_have_populated_dt())
+		return 0;
+
 	register_syscore_ops(&s3c64xx_irq_syscore_ops);
 
 	return 0;
arch/arm/mach-s3c64xx/s3c6400.c +9 -0
index 331fe8e..3db0c98 100644
@@ -9,6 +9,10 @@
  * published by the Free Software Foundation.
 */
 
+/*
+ * NOTE: Code in this file is not used when booting with Device Tree support.
+ */
+
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/interrupt.h>
@@ -20,6 +24,7 @@
 #include <linux/device.h>
 #include <linux/serial_core.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -76,6 +81,10 @@ static struct device s3c6400_dev = {
 
 static int __init s3c6400_core_init(void)
 {
+	/* Not applicable when using DT. */
+	if (of_have_populated_dt())
+		return 0;
+
 	return subsys_system_register(&s3c6400_subsys, NULL);
 }
 
arch/arm/mach-s3c64xx/s3c6410.c +9 -0
index 7e6fa12..72b2278 100644
@@ -10,6 +10,10 @@
  * published by the Free Software Foundation.
 */
 
+/*
+ * NOTE: Code in this file is not used when booting with Device Tree support.
+ */
+
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/interrupt.h>
@@ -21,6 +25,7 @@
 #include <linux/device.h>
 #include <linux/serial_core.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -79,6 +84,10 @@ static struct device s3c6410_dev = {
 
 static int __init s3c6410_core_init(void)
 {
+	/* Not applicable when using DT. */
+	if (of_have_populated_dt())
+		return 0;
+
 	return subsys_system_register(&s3c6410_subsys, NULL);
 }
 
arch/arm/plat-samsung/init.c +11 -1
index 50a3ea0..aa9511b 100644
@@ -11,12 +11,18 @@
  * published by the Free Software Foundation.
 */
 
+/*
+ * NOTE: Code in this file is not used on S3C64xx when booting with
+ * Device Tree support.
+ */
+
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/serial_core.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 
 #include <mach/hardware.h>
 
@@ -148,8 +154,12 @@ static int __init s3c_arch_init(void)
 
 	// do the correct init for cpu
 
-	if (cpu == NULL)
+	if (cpu == NULL) {
+		/* Not needed when booting with device tree. */
+		if (of_have_populated_dt())
+			return 0;
 		panic("s3c_arch_init: NULL cpu\n");
+	}
 
 	ret = (cpu->init)();
 	if (ret != 0)
Signature · 1 line
1.8.3.2
#16 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

In reply to Tomasz Figa

Since this driver does not handle GPIO on device tree enabled platforms any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

---
 drivers/gpio/gpio-samsung.c | 34 +++++++---------------------------
 1 file changed, 7 insertions(+), 27 deletions(-)
drivers/gpio/gpio-samsung.c +7 -27
index a1392f4..cc93b1b 100644
@@ -2949,34 +2949,14 @@ static __init int samsung_gpiolib_init(void)
 	int i, nr_chips;
 	int group = 0;
 
-#if defined(CONFIG_PINCTRL_EXYNOS) || defined(CONFIG_PINCTRL_EXYNOS5440)
 	/*
-	* This gpio driver includes support for device tree support and there
-	* are platforms using it. In order to maintain compatibility with those
-	* platforms, and to allow non-dt Exynos4210 platforms to use this
-	* gpiolib support, a check is added to find out if there is a active
-	* pin-controller driver support available. If it is available, this
-	* gpiolib support is ignored and the gpiolib support available in
-	* pin-controller driver is used. This is a temporary check and will go
-	* away when all of the Exynos4210 platforms have switched to using
-	* device tree and the pin-ctrl driver.
-	*/
-	struct device_node *pctrl_np;
-	static const struct of_device_id exynos_pinctrl_ids[] = {
-		{ .compatible = "samsung,s3c2412-pinctrl", },
-		{ .compatible = "samsung,s3c2416-pinctrl", },
-		{ .compatible = "samsung,s3c2440-pinctrl", },
-		{ .compatible = "samsung,s3c2450-pinctrl", },
-		{ .compatible = "samsung,exynos4210-pinctrl", },
-		{ .compatible = "samsung,exynos4x12-pinctrl", },
-		{ .compatible = "samsung,exynos5250-pinctrl", },
-		{ .compatible = "samsung,exynos5440-pinctrl", },
-		{ }
-	};
-	for_each_matching_node(pctrl_np, exynos_pinctrl_ids)
-		if (pctrl_np && of_device_is_available(pctrl_np))
-			return -ENODEV;
-#endif
+	 * Currently there are two drivers that can provide GPIO support for
+	 * Samsung SoCs. For device tree enabled platforms, the new
+	 * pinctrl-samsung driver is used, providing both GPIO and pin control
+	 * interfaces. For legacy (non-DT) platforms this driver is used.
+	 */
+	if (of_have_populated_dt())
+		return -ENODEV;
 
 	samsung_gpiolib_set_cfg(samsung_gpio_cfgs, ARRAY_SIZE(samsung_gpio_cfgs));
 
Signature · 1 line
1.8.3.2
#17 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

Quoted 5 lines · Tomasz Figa

Since this driver does not handle GPIO on device tree enabled platforms any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

Yours,
Linus Walleij

#18 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

Quoted 1 line · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa <[email protected]>

Quoted 9 lines · wrote:
Quoted 6 lines

Since this driver does not handle GPIO on device tree enabled platforms
any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Best regards,
Tomasz

#19 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

Quoted 8 lines · Tomasz Figa
Quoted 2 lines · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

This seems like something I should apply to the GPIO tree right now, shall I?

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Though if the rest of the series might miss v3.12 (seems likely given
the arm-soc deadlines have passed) then Linus could apply this for
v3.12?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130822/03637f11/attachment-0001.sig>

#20 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

In reply to Tomasz Figa
Quoted 9 lines · Tomasz Figa
Quoted 1 line · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa <[email protected]>

Quoted 5 lines · wrote:
Quoted 5 lines

Since this driver does not handle GPIO on device tree enabled platforms
any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

Quoted 9 lines
Quoted 4 lines
Quoted 1 line

This seems like something I should apply to the GPIO tree right now, shall I?

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Oh, I didn't see any dependencies...but if so, Linus do you agree with Tomasz' opinion?

Please let me know so that I could take this with others into the samsung tree. And please kindly ignore my previous reply on this ;-)

Thanks,
Kukjin

#21 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

Quoted 17 lines · On Thursday 22 of August 2013 18:59:23 Kukjin Kim wrote:
Quoted 16 lines · Tomasz Figa
Quoted 2 lines · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa
<[email protected]>

Quoted 10 lines · wrote:
Quoted 7 lines

Since this driver does not handle GPIO on device tree enabled platforms
any more, it should be bypassed whenever device tree is available, to
not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

Quoted 6 lines
Quoted 3 lines

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Oh, I didn't see any dependencies...but if so, Linus do you agree with Tomasz' opinion?

Without this patch DT-based bootup would fail, because the legacy GPIO driver would kick in and register GPIO chips before the pinctrl driver. Things would compile fine, though. So this is a run time dependency, not compile time.

Quoted 2 lines

Please let me know so that I could take this with others into the samsung tree. And please kindly ignore my previous reply on this ;-)

I would be really happy if we could finally merge this for this release. This series is not really invasive in any way, so it is unlikely to introduce any regressions and it has waited so many releases, without any significant changes, due to a lot of other dependencies.

Best regards,
Tomasz

#22 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

In reply to Kukjin Kim
Quoted 14 lines · Kukjin Kim
Quoted 13 lines · Tomasz Figa
Quoted 1 line · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa <[email protected]>

Quoted 9 lines · wrote:
Quoted 6 lines

Since this driver does not handle GPIO on device tree enabled platforms
any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

Quoted 6 lines
Quoted 4 lines

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Oh, I didn't see any dependencies...but if so, Linus do you agree with Tomasz' opinion?

Yes please merge it through the Samsung tree.

Yours,
Linus Walleij

Applied
#23 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

Quoted 19 lines · Linus Walleij
Quoted 18 lines · Kukjin Kim
Quoted 17 lines · Tomasz Figa
Quoted 1 line · On Thursday 22 of August 2013 01:21:25 Linus Walleij wrote:

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa<[email protected]>

Quoted 9 lines · wrote:
Quoted 6 lines

Since this driver does not handle GPIO on device tree enabled platforms
any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

Would be nice, but since this patch is a dependency for rest of this series and there are no other dependencies on GPIO tree, it might be easier to just let Kukjin take all the patches with required Acks.

Quoted 6 lines
Quoted 2 lines

Oh, I didn't see any dependencies...but if so, Linus do you agree with Tomasz' opinion?

Yes please merge it through the Samsung tree.

Applied, thanks.

- Kukjin

#24 lore raw

PATCH v7 3/7 gpio: samsung: Skip initialization if device tree is present

In reply to Linus Walleij
Quoted 4 lines · Linus Walleij

On Wed, Aug 21, 2013 at 11:21 PM, Tomasz Figa <[email protected]> wrote:

Quoted 9 lines
Quoted 5 lines

Since this driver does not handle GPIO on device tree enabled platforms any more, it should be bypassed whenever device tree is available, to not conflict with the new pinctrl-samsung driver.

This seems like something I should apply to the GPIO tree right now, shall I?

I think so. Feel free to add my ack on this.

Thanks,
Kukjin

#25 lore raw

PATCH v7 4/7 ARM: s3c64xx: Add board file for boot using Device Tree

In reply to Tomasz Figa

This patch adds board file that will be used to boot S3C64xx-based boards using Device Tree.

---
 arch/arm/mach-s3c64xx/Kconfig           | 16 +++++++
 arch/arm/mach-s3c64xx/Makefile          |  1 +
 arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c | 85 +++++++++++++++++++++++++++++++++
 3 files changed, 102 insertions(+)
 create mode 100644 arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c
arch/arm/mach-s3c64xx/Kconfig +16 -0
index 041da51..bd14e3a 100644
@@ -306,3 +306,19 @@ config MACH_WLF_CRAGG_6410
 	select SAMSUNG_GPIO_EXTRA128
 	help
 	  Machine support for the Wolfson Cragganmore S3C6410 variant.
+
+config MACH_S3C64XX_DT
+	bool "Samsung S3C6400/S3C6410 machine using Device Tree"
+	select CLKSRC_OF
+	select CPU_S3C6400
+	select CPU_S3C6410
+	select PINCTRL
+	select PINCTRL_S3C64XX
+	select USE_OF
+	help
+	  Machine support for Samsung S3C6400/S3C6410 machines with Device Tree
+	  enabled.
+	  Select this if a fdt blob is available for your S3C64XX SoC based
+	  board.
+	  Note: This is under development and not all peripherals can be
+	  supported with this machine file.
arch/arm/mach-s3c64xx/Makefile +1 -0
index 645a8fe..6faedcf 100644
@@ -57,3 +57,4 @@ obj-$(CONFIG_MACH_SMARTQ7)		+= mach-smartq7.o
 obj-$(CONFIG_MACH_SMDK6400)		+= mach-smdk6400.o
 obj-$(CONFIG_MACH_SMDK6410)		+= mach-smdk6410.o
 obj-$(CONFIG_MACH_WLF_CRAGG_6410)	+= mach-crag6410.o mach-crag6410-module.o
+obj-$(CONFIG_MACH_S3C64XX_DT)		+= mach-s3c64xx-dt.o
arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c new file +85 -0

85 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#26 lore raw

PATCH v7 5/7 ARM: dts: Add basic dts include files for Samsung S3C64xx SoCs

In reply to Tomasz Figa

This patch adds basic device tree definitions for Samsung S3C64xx SoCs.

Since all the SoCs in the series are very similar, the files are created hierarchically - one file for the whole series and then separate files for particular SoCs including the common one.

---
 arch/arm/boot/dts/s3c6400.dtsi         |  41 ++
 arch/arm/boot/dts/s3c6410.dtsi         |  57 +++
 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi | 687 +++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/s3c64xx.dtsi         | 199 ++++++++++
 4 files changed, 984 insertions(+)
 create mode 100644 arch/arm/boot/dts/s3c6400.dtsi
 create mode 100644 arch/arm/boot/dts/s3c6410.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx.dtsi
arch/arm/boot/dts/s3c6400.dtsi new file +41 -0
new file mode 100644
index 0000000..692f827
@@ -0,0 +1,41 @@
+/*
+ * Samsung's S3C6400 SoC device tree source
+ *
+ * Copyright (c) 2013 Tomasz Figa <[email protected]>
+ *
+ * Samsung's S3C6400 SoC device nodes are listed in this file. S3C6400
+ * based board files can include this file and provide values for board specfic
+ * bindings.
+ *
+ * Note: This file does not include device nodes for all the controllers in
+ * S3C6400 SoC. As device tree coverage for S3C6400 increases, additional
+ * nodes can be added to this file.
+ *
+ * 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.
+*/
+
+#include "s3c64xx.dtsi"
+
+/ {
+	compatible = "samsung,s3c6400";
+};
+
+&vic0 {
+	interrupt-mask = <0xfffffe1f>;
+	wakeup-mask = <0x00200004>;
+};
+
+&vic1 {
+	interrupt-mask = <0xffffffff>;
+	wakeup-mask = <0x53020000>;
+};
+
+&soc {
+	clocks: clock-controller at 7e00f000 {
+		compatible = "samsung,s3c6400-clock";
+		reg = <0x7e00f000 0x1000>;
+		#clock-cells = <1>;
+	};
+};
arch/arm/boot/dts/s3c6410.dtsi new file +57 -0

57 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx-pinctrl.dtsi new file +687 -0

687 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx.dtsi new file +199 -0

199 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#27 lore raw

PATCH v8 5/7 ARM: dts: Add basic dts include files for Samsung S3C64xx SoCs

This patch adds basic device tree definitions for Samsung S3C64xx SoCs.

Since all the SoCs in the series are very similar, the files are created hierarchically - one file for the whole series and then separate files for particular SoCs including the common one.

---
 arch/arm/boot/dts/s3c6400.dtsi         |  41 ++
 arch/arm/boot/dts/s3c6410.dtsi         |  57 +++
 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi | 687 +++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/s3c64xx.dtsi         | 199 ++++++++++
 4 files changed, 984 insertions(+)
 create mode 100644 arch/arm/boot/dts/s3c6400.dtsi
 create mode 100644 arch/arm/boot/dts/s3c6410.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx.dtsi

Changes since v7:
- Updated VIC nodes to reflect changes done to patch 1/7 (renamed interrupt-mask property to valid-mask).

arch/arm/boot/dts/s3c6400.dtsi new file +41 -0
new file mode 100644
index 0000000..9fec67e
@@ -0,0 +1,41 @@
+/*
+ * Samsung's S3C6400 SoC device tree source
+ *
+ * Copyright (c) 2013 Tomasz Figa <[email protected]>
+ *
+ * Samsung's S3C6400 SoC device nodes are listed in this file. S3C6400
+ * based board files can include this file and provide values for board specfic
+ * bindings.
+ *
+ * Note: This file does not include device nodes for all the controllers in
+ * S3C6400 SoC. As device tree coverage for S3C6400 increases, additional
+ * nodes can be added to this file.
+ *
+ * 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.
+*/
+
+#include "s3c64xx.dtsi"
+
+/ {
+	compatible = "samsung,s3c6400";
+};
+
+&vic0 {
+	valid-mask = <0xfffffe1f>;
+	wakeup-mask = <0x00200004>;
+};
+
+&vic1 {
+	valid-mask = <0xffffffff>;
+	wakeup-mask = <0x53020000>;
+};
+
+&soc {
+	clocks: clock-controller at 7e00f000 {
+		compatible = "samsung,s3c6400-clock";
+		reg = <0x7e00f000 0x1000>;
+		#clock-cells = <1>;
+	};
+};
arch/arm/boot/dts/s3c6410.dtsi new file +57 -0

57 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx-pinctrl.dtsi new file +687 -0

687 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx.dtsi new file +199 -0

199 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#28 lore raw

PATCH v9 5/7 ARM: dts: Add basic dts include files for Samsung S3C64xx SoCs

This patch adds basic device tree definitions for Samsung S3C64xx SoCs.

Since all the SoCs in the series are very similar, the files are created hierarchically - one file for the whole series and then separate files for particular SoCs including the common one.

---
 arch/arm/boot/dts/s3c6400.dtsi         |  41 ++
 arch/arm/boot/dts/s3c6410.dtsi         |  57 +++
 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi | 687 +++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/s3c64xx.dtsi         | 199 ++++++++++
 4 files changed, 984 insertions(+)
 create mode 100644 arch/arm/boot/dts/s3c6400.dtsi
 create mode 100644 arch/arm/boot/dts/s3c6410.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/s3c64xx.dtsi

Changes since v8:
- Updated VIC nodes to reflect changes done to patch 1/7 (renamed wakeuo-mask property to valid-wakeup-mask).

arch/arm/boot/dts/s3c6400.dtsi new file +41 -0
new file mode 100644
index 0000000..a7d1c8e
@@ -0,0 +1,41 @@
+/*
+ * Samsung's S3C6400 SoC device tree source
+ *
+ * Copyright (c) 2013 Tomasz Figa <[email protected]>
+ *
+ * Samsung's S3C6400 SoC device nodes are listed in this file. S3C6400
+ * based board files can include this file and provide values for board specfic
+ * bindings.
+ *
+ * Note: This file does not include device nodes for all the controllers in
+ * S3C6400 SoC. As device tree coverage for S3C6400 increases, additional
+ * nodes can be added to this file.
+ *
+ * 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.
+*/
+
+#include "s3c64xx.dtsi"
+
+/ {
+	compatible = "samsung,s3c6400";
+};
+
+&vic0 {
+	valid-mask = <0xfffffe1f>;
+	valid-wakeup-mask = <0x00200004>;
+};
+
+&vic1 {
+	valid-mask = <0xffffffff>;
+	valid-wakeup-mask = <0x53020000>;
+};
+
+&soc {
+	clocks: clock-controller at 7e00f000 {
+		compatible = "samsung,s3c6400-clock";
+		reg = <0x7e00f000 0x1000>;
+		#clock-cells = <1>;
+	};
+};
arch/arm/boot/dts/s3c6410.dtsi new file +57 -0

57 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx-pinctrl.dtsi new file +687 -0

687 lines not on this page · raw message

arch/arm/boot/dts/s3c64xx.dtsi new file +199 -0

199 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#29 lore raw

PATCH v7 6/7 ARM: dts: Add dts file for S3C6410-based Mini6410 board

In reply to Tomasz Figa

This patch adds basic device tree sources for FriendlyARM Mini6410 board based on Samsung S3C6410 SoC.

---
 arch/arm/boot/dts/Makefile             |   1 +
 arch/arm/boot/dts/s3c6410-mini6410.dts | 228 +++++++++++++++++++++++++++++++++
 2 files changed, 229 insertions(+)
 create mode 100644 arch/arm/boot/dts/s3c6410-mini6410.dts
arch/arm/boot/dts/Makefile +1 -0
index ada589c..72f8af3 100644
@@ -194,6 +194,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
 	ccu8540.dtb \
 	ccu9540.dtb
 dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb
+dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb
 dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
 	emev2-kzm9d-reference.dtb \
 	r8a7740-armadillo800eva.dtb \
arch/arm/boot/dts/s3c6410-mini6410.dts new file +228 -0

228 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#30 lore raw

PATCH v7 7/7 ARM: dts: Add dts file for S3C6410-based SMDK6410 board

In reply to Tomasz Figa

This patch adds basic device tree sources for SAMSUNG SMDK6410 board based on SAMSUNG S3C6410 SoC.

Currently only UARTs, SD channel 0 and 100Mbps ethernet (SMSC911x) are supported.

---
 arch/arm/boot/dts/Makefile             |   3 +-
 arch/arm/boot/dts/s3c6410-smdk6410.dts | 103 +++++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/boot/dts/s3c6410-smdk6410.dts
arch/arm/boot/dts/Makefile +2 -1
index 72f8af3..e55c644 100644
@@ -194,7 +194,8 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
 	ccu8540.dtb \
 	ccu9540.dtb
 dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb
-dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb
+dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb \
+	s3c6410-smdk6410.dtb
 dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
 	emev2-kzm9d-reference.dtb \
 	r8a7740-armadillo800eva.dtb \
arch/arm/boot/dts/s3c6410-smdk6410.dts new file +103 -0

103 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#31 lore raw

v7 cover Initial Device Tree support for S3C64xx

In reply to Tomasz Figa
Quoted 88 lines · Tomasz Figa

This series adds Device Tree support for Samsung S3C64xx SoC series.

It fixes several problems preventing from booting an S3C64xx-based system using Device Tree, adds all the infrastructure for Device Tree-based board support, including mach-s3c64xx-dt and dts include files for S3C64xx SoCs, and basic device tree source for FriendlyARM Mini6410 and SAMSUNG SMDK6410 boards.

Current support is somewhat limite, but should be fine as a start and will be extended in future, hopefully with help of S3C64xx board maintainers.

Depends on:
- [PATCH v2 0/8] Common Clock Framework support for Samsung S3C64xx

    http://thread.gmane.org/gmane.linux.usb.general/90493

On Samsung S3C6410-based Mini6410 and SMDK6410 boards:

Changes since v6:
- Rebased onto current for-next branch of Kgene's tree,
- Dropped the idea of .init_platform() machine callback,
- Added support for i2c controllers,
- Replaced separate apb and ahb nodes with a single common soc node,
- Updated cpus node according to CPU bindings,
- Updated fixed rate clock nodes to use generic bindings,
- Added support for PWM buzzer and I2C EEPROM on Mini6410 board,
- Simplified the condition of skipping legacy GPIO initialization.

Changes since v5:
- Rebased onto current for-next branch of Kgene's tree,
- Added support for new Common Clock Framework based clock driver,
- Introduced hierarchical structure of device nodes (representing physical AHB and APB buses),
- Bypassed most of legacy initialization when booting with DT,
- Used preprocessor macros in dts files to improve readabilty,
- Added support for SMDK6410 board.

Changes since v4:
- Rebased onto current for-next branch of Kgene's tree
- Added support for pinctrl (driver merged through pinctrl tree)
- Added labels to all nodes that can be overridden from board dts
- Modified board dts to use the&label syntax to reference device nodes

Changes since v3:
- Rebased onto current for-next branch of Kgene's tree
- Updated timer node for next version of samsung-time patches
- Replaced local s3c64xx_dt_init_irq with irqchip_init

Changes since v2:
- Updated timer node for next version of samsung-time patches

Changes since v1:
- Dropped two VIC-related patches that are no longer necessary
- Added Device Tree-based instantation of system timers
- Corrected VIC interrupt specifiers
- Adjusted CPU compatible values and dropped @id

Tomasz Figa (7):
ARM: common: vic: Parse interrupt and resume masks from device tree
ARM: s3c64xx: Bypass legacy initialization when booting with DT
gpio: samsung: Skip initialization if device tree is present
ARM: s3c64xx: Add board file for boot using Device Tree
ARM: dts: Add basic dts include files for Samsung S3C64xx SoCs
ARM: dts: Add dts file for S3C6410-based Mini6410 board
ARM: dts: Add dts file for S3C6410-based SMDK6410 board

  Documentation/devicetree/bindings/arm/vic.txt |   6 +
  arch/arm/boot/dts/Makefile                    |   2 +
  arch/arm/boot/dts/s3c6400.dtsi                |  41 ++
  arch/arm/boot/dts/s3c6410-mini6410.dts        | 228 +++++++++
  arch/arm/boot/dts/s3c6410-smdk6410.dts        | 103 ++++
  arch/arm/boot/dts/s3c6410.dtsi                |  57 +++
  arch/arm/boot/dts/s3c64xx-pinctrl.dtsi        | 687 ++++++++++++++++++++++++++
  arch/arm/boot/dts/s3c64xx.dtsi                | 199 ++++++++
  arch/arm/mach-s3c64xx/Kconfig                 |  16 +
  arch/arm/mach-s3c64xx/Makefile                |   1 +
  arch/arm/mach-s3c64xx/common.c                |  12 +
  arch/arm/mach-s3c64xx/dma.c                   |   9 +
  arch/arm/mach-s3c64xx/irq-pm.c                |   9 +
  arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c       |  85 ++++
  arch/arm/mach-s3c64xx/s3c6400.c               |   9 +
  arch/arm/mach-s3c64xx/s3c6410.c               |   9 +
  arch/arm/plat-samsung/init.c                  |  12 +-
  drivers/gpio/gpio-samsung.c                   |  34 +-
  drivers/irqchip/irq-vic.c                     |   7 +-
  19 files changed, 1497 insertions(+), 29 deletions(-)
Quoted 8 lines

create mode 100644 arch/arm/boot/dts/s3c6400.dtsi create mode 100644 arch/arm/boot/dts/s3c6410-mini6410.dts create mode 100644 arch/arm/boot/dts/s3c6410-smdk6410.dts create mode 100644 arch/arm/boot/dts/s3c6410.dtsi create mode 100644 arch/arm/boot/dts/s3c64xx-pinctrl.dtsi create mode 100644 arch/arm/boot/dts/s3c64xx.dtsi create mode 100644 arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c

Nice, applied this whole series.

Thanks,
Kukjin