[PATCH v2 4/6] drivers: reset: stih415: add softreset controller

2014-02-03 Thread srinivas.kandagatla
From: Srinivas Kandagatla 

This patch adds softreset controller for STiH415 SOC, soft reset
controller is based on system configuration registers which are mapped
via regmap. This reset controller does not have any feedback or
acknowledgement. With this patch a new device "st,stih415-softreset" is
registered with system configuration registers based reset controller
that controls the softreset state of the hardware such as Ethernet, IRB.

Signed-off-by: Srinivas Kandagatla 
---
 .../devicetree/bindings/reset/st,sti-softreset.txt |   46 
 arch/arm/boot/dts/stih415.dtsi |5 +++
 drivers/reset/sti/reset-stih415.c  |   35 +++
 .../dt-bindings/reset-controller/stih415-resets.h  |7 +++
 4 files changed, 93 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/reset/st,sti-softreset.txt

diff --git a/Documentation/devicetree/bindings/reset/st,sti-softreset.txt 
b/Documentation/devicetree/bindings/reset/st,sti-softreset.txt
new file mode 100644
index 000..a8d3d3c
--- /dev/null
+++ b/Documentation/devicetree/bindings/reset/st,sti-softreset.txt
@@ -0,0 +1,46 @@
+STMicroelectronics STi family Sysconfig Peripheral SoftReset Controller
+=
+
+This binding describes a reset controller device that is used to enable and
+disable on-chip peripheral controllers such as USB and SATA, using
+"softreset" control bits found in the STi family SoC system configuration
+registers.
+
+The actual action taken when softreset is asserted is hardware dependent.
+However, when asserted it may not be possible to access the hardware's
+registers and after an assert/deassert sequence the hardware's previous state
+may no longer be valid.
+
+Please refer to reset.txt in this directory for common reset
+controller binding usage.
+
+Required properties:
+- compatible: Should be "st,-softreset" example:
+   "st,stih415-softreset" or "st,stih416-softreset";
+- #reset-cells: 1, see below
+
+example:
+
+   softreset: softreset-controller {
+   #reset-cells = <1>;
+   compatible = "st,stih415-softreset";
+   };
+
+
+Specifying softreset control of devices
+===
+
+Device nodes should specify the reset channel required in their "resets"
+property, containing a phandle to the softreset device node and an
+index specifying which channel to use, as described in reset.txt
+
+example:
+
+   ethernet0{
+   resets  = < STIH415_ETH0_SOFTRESET>;
+   };
+
+Macro definitions for the supported reset channels can be found in:
+
+include/dt-bindings/reset-controller/stih415-resets.h
+include/dt-bindings/reset-controller/stih416-resets.h
diff --git a/arch/arm/boot/dts/stih415.dtsi b/arch/arm/boot/dts/stih415.dtsi
index 19e29f4..d52207c 100644
--- a/arch/arm/boot/dts/stih415.dtsi
+++ b/arch/arm/boot/dts/stih415.dtsi
@@ -34,6 +34,11 @@
compatible = "st,stih415-powerdown";
};
 
+   softreset: softreset-controller {
+   #reset-cells = <1>;
+   compatible = "st,stih415-softreset";
+   };
+
syscfg_sbc: sbc-syscfg@fe60{
compatible  = "st,stih415-sbc-syscfg", "syscon";
reg = <0xfe60 0xb4>;
diff --git a/drivers/reset/sti/reset-stih415.c 
b/drivers/reset/sti/reset-stih415.c
index 56c2146..e6f6c41 100644
--- a/drivers/reset/sti/reset-stih415.c
+++ b/drivers/reset/sti/reset-stih415.c
@@ -31,12 +31,29 @@ static const char stih415_lpm[] = "st,stih415-lpm-syscfg";
 #define STIH415_PDN_REAR(_cntl, _stat) \
_SYSCFG_RST_CH(stih415_rear, SYSCFG_336, _cntl, SYSSTAT_384, _stat)
 
+#define STIH415_SRST_REAR(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_rear, _reg, _bit)
+
+#define STIH415_SRST_SBC(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_sbc, _reg, _bit)
+
+#define STIH415_SRST_FRONT(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_front, _reg, _bit)
+
+#define STIH415_SRST_LPM(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_lpm, _reg, _bit)
+
 #define SYSCFG_114 0x38 /* Powerdown request EMI/NAND/Keyscan */
 #define SYSSTAT_1870x15c /* Powerdown status EMI/NAND/Keyscan */
 
 #define SYSCFG_336 0x90 /* Powerdown request USB/SATA/PCIe */
 #define SYSSTAT_3840x150 /* Powerdown status USB/SATA/PCIe */
 
+#define SYSCFG_376 0x130 /* Reset generator 0 control 0 */
+#define SYSCFG_166 0x108 /* Softreset Ethernet 0 */
+#define SYSCFG_31  0x7c /* Softreset Ethernet 1 */
+#define LPM_SYSCFG_1   0x4 /* Softreset IRB */
+
 static const struct syscfg_reset_channel_data stih415_powerdowns[] = {
[STIH415_EMISS_POWERDOWN]   = STIH415_PDN_FRONT(0),
[STIH415_NAND_POWERDOWN]= STIH415_PDN_FRONT(1),
@@ -49,15 +66,33 @@ static const struct 

[PATCH v2 4/6] drivers: reset: stih415: add softreset controller

2014-02-03 Thread srinivas.kandagatla
From: Srinivas Kandagatla srinivas.kandaga...@st.com

This patch adds softreset controller for STiH415 SOC, soft reset
controller is based on system configuration registers which are mapped
via regmap. This reset controller does not have any feedback or
acknowledgement. With this patch a new device st,stih415-softreset is
registered with system configuration registers based reset controller
that controls the softreset state of the hardware such as Ethernet, IRB.

Signed-off-by: Srinivas Kandagatla srinivas.kandaga...@st.com
---
 .../devicetree/bindings/reset/st,sti-softreset.txt |   46 
 arch/arm/boot/dts/stih415.dtsi |5 +++
 drivers/reset/sti/reset-stih415.c  |   35 +++
 .../dt-bindings/reset-controller/stih415-resets.h  |7 +++
 4 files changed, 93 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/reset/st,sti-softreset.txt

diff --git a/Documentation/devicetree/bindings/reset/st,sti-softreset.txt 
b/Documentation/devicetree/bindings/reset/st,sti-softreset.txt
new file mode 100644
index 000..a8d3d3c
--- /dev/null
+++ b/Documentation/devicetree/bindings/reset/st,sti-softreset.txt
@@ -0,0 +1,46 @@
+STMicroelectronics STi family Sysconfig Peripheral SoftReset Controller
+=
+
+This binding describes a reset controller device that is used to enable and
+disable on-chip peripheral controllers such as USB and SATA, using
+softreset control bits found in the STi family SoC system configuration
+registers.
+
+The actual action taken when softreset is asserted is hardware dependent.
+However, when asserted it may not be possible to access the hardware's
+registers and after an assert/deassert sequence the hardware's previous state
+may no longer be valid.
+
+Please refer to reset.txt in this directory for common reset
+controller binding usage.
+
+Required properties:
+- compatible: Should be st,chip-softreset example:
+   st,stih415-softreset or st,stih416-softreset;
+- #reset-cells: 1, see below
+
+example:
+
+   softreset: softreset-controller {
+   #reset-cells = 1;
+   compatible = st,stih415-softreset;
+   };
+
+
+Specifying softreset control of devices
+===
+
+Device nodes should specify the reset channel required in their resets
+property, containing a phandle to the softreset device node and an
+index specifying which channel to use, as described in reset.txt
+
+example:
+
+   ethernet0{
+   resets  = softreset STIH415_ETH0_SOFTRESET;
+   };
+
+Macro definitions for the supported reset channels can be found in:
+
+include/dt-bindings/reset-controller/stih415-resets.h
+include/dt-bindings/reset-controller/stih416-resets.h
diff --git a/arch/arm/boot/dts/stih415.dtsi b/arch/arm/boot/dts/stih415.dtsi
index 19e29f4..d52207c 100644
--- a/arch/arm/boot/dts/stih415.dtsi
+++ b/arch/arm/boot/dts/stih415.dtsi
@@ -34,6 +34,11 @@
compatible = st,stih415-powerdown;
};
 
+   softreset: softreset-controller {
+   #reset-cells = 1;
+   compatible = st,stih415-softreset;
+   };
+
syscfg_sbc: sbc-syscfg@fe60{
compatible  = st,stih415-sbc-syscfg, syscon;
reg = 0xfe60 0xb4;
diff --git a/drivers/reset/sti/reset-stih415.c 
b/drivers/reset/sti/reset-stih415.c
index 56c2146..e6f6c41 100644
--- a/drivers/reset/sti/reset-stih415.c
+++ b/drivers/reset/sti/reset-stih415.c
@@ -31,12 +31,29 @@ static const char stih415_lpm[] = st,stih415-lpm-syscfg;
 #define STIH415_PDN_REAR(_cntl, _stat) \
_SYSCFG_RST_CH(stih415_rear, SYSCFG_336, _cntl, SYSSTAT_384, _stat)
 
+#define STIH415_SRST_REAR(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_rear, _reg, _bit)
+
+#define STIH415_SRST_SBC(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_sbc, _reg, _bit)
+
+#define STIH415_SRST_FRONT(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_front, _reg, _bit)
+
+#define STIH415_SRST_LPM(_reg, _bit) \
+   _SYSCFG_RST_CH_NO_ACK(stih415_lpm, _reg, _bit)
+
 #define SYSCFG_114 0x38 /* Powerdown request EMI/NAND/Keyscan */
 #define SYSSTAT_1870x15c /* Powerdown status EMI/NAND/Keyscan */
 
 #define SYSCFG_336 0x90 /* Powerdown request USB/SATA/PCIe */
 #define SYSSTAT_3840x150 /* Powerdown status USB/SATA/PCIe */
 
+#define SYSCFG_376 0x130 /* Reset generator 0 control 0 */
+#define SYSCFG_166 0x108 /* Softreset Ethernet 0 */
+#define SYSCFG_31  0x7c /* Softreset Ethernet 1 */
+#define LPM_SYSCFG_1   0x4 /* Softreset IRB */
+
 static const struct syscfg_reset_channel_data stih415_powerdowns[] = {
[STIH415_EMISS_POWERDOWN]   = STIH415_PDN_FRONT(0),
[STIH415_NAND_POWERDOWN]= STIH415_PDN_FRONT(1),
@@ -49,15 +66,33 @@ static