aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/reset/sti
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@st.com>2013-11-12 05:28:03 -0500
committerSrinivas Kandagatla <srinivas.kandagatla@st.com>2014-03-11 06:53:26 -0400
commite9de663517f50523bca5347d463546b27c242c1c (patch)
treec6979a42ca22ff3454adcf6851ce573ee39789ce /drivers/reset/sti
parenta596ebd3f705ff5348b9f7a7be280568ab45832d (diff)
drivers: reset: stih416: add softreset controller
This patch adds softreset controller for STiH416 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,stih416-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.kandagatla@st.com> Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Diffstat (limited to 'drivers/reset/sti')
-rw-r--r--drivers/reset/sti/reset-stih416.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/drivers/reset/sti/reset-stih416.c b/drivers/reset/sti/reset-stih416.c
index 0becfc57ad58..fe3bf02bdc8c 100644
--- a/drivers/reset/sti/reset-stih416.c
+++ b/drivers/reset/sti/reset-stih416.c
@@ -24,6 +24,7 @@ static const char stih416_front[] = "st,stih416-front-syscfg";
24static const char stih416_rear[] = "st,stih416-rear-syscfg"; 24static const char stih416_rear[] = "st,stih416-rear-syscfg";
25static const char stih416_sbc[] = "st,stih416-sbc-syscfg"; 25static const char stih416_sbc[] = "st,stih416-sbc-syscfg";
26static const char stih416_lpm[] = "st,stih416-lpm-syscfg"; 26static const char stih416_lpm[] = "st,stih416-lpm-syscfg";
27static const char stih416_cpu[] = "st,stih416-cpu-syscfg";
27 28
28#define STIH416_PDN_FRONT(_bit) \ 29#define STIH416_PDN_FRONT(_bit) \
29 _SYSCFG_RST_CH(stih416_front, SYSCFG_1500, _bit, SYSSTAT_1578, _bit) 30 _SYSCFG_RST_CH(stih416_front, SYSCFG_1500, _bit, SYSSTAT_1578, _bit)
@@ -37,6 +38,29 @@ static const char stih416_lpm[] = "st,stih416-lpm-syscfg";
37#define SYSCFG_2525 0x834 /* Powerdown request USB/SATA/PCIe */ 38#define SYSCFG_2525 0x834 /* Powerdown request USB/SATA/PCIe */
38#define SYSSTAT_2583 0x91c /* Powerdown status USB/SATA/PCIe */ 39#define SYSSTAT_2583 0x91c /* Powerdown status USB/SATA/PCIe */
39 40
41#define SYSCFG_2552 0x8A0 /* Reset Generator control 0 */
42#define SYSCFG_1539 0x86c /* Softreset Ethernet 0 */
43#define SYSCFG_510 0x7f8 /* Softreset Ethernet 1 */
44#define LPM_SYSCFG_1 0x4 /* Softreset IRB */
45#define SYSCFG_2553 0x8a4 /* Softreset SATA0/1, PCIE0/1 */
46#define SYSCFG_7563 0x8cc /* MPE softresets 0 */
47#define SYSCFG_7564 0x8d0 /* MPE softresets 1 */
48
49#define STIH416_SRST_CPU(_reg, _bit) \
50 _SYSCFG_RST_CH_NO_ACK(stih416_cpu, _reg, _bit)
51
52#define STIH416_SRST_FRONT(_reg, _bit) \
53 _SYSCFG_RST_CH_NO_ACK(stih416_front, _reg, _bit)
54
55#define STIH416_SRST_REAR(_reg, _bit) \
56 _SYSCFG_RST_CH_NO_ACK(stih416_rear, _reg, _bit)
57
58#define STIH416_SRST_LPM(_reg, _bit) \
59 _SYSCFG_RST_CH_NO_ACK(stih416_lpm, _reg, _bit)
60
61#define STIH416_SRST_SBC(_reg, _bit) \
62 _SYSCFG_RST_CH_NO_ACK(stih416_sbc, _reg, _bit)
63
40static const struct syscfg_reset_channel_data stih416_powerdowns[] = { 64static const struct syscfg_reset_channel_data stih416_powerdowns[] = {
41 [STIH416_EMISS_POWERDOWN] = STIH416_PDN_FRONT(0), 65 [STIH416_EMISS_POWERDOWN] = STIH416_PDN_FRONT(0),
42 [STIH416_NAND_POWERDOWN] = STIH416_PDN_FRONT(1), 66 [STIH416_NAND_POWERDOWN] = STIH416_PDN_FRONT(1),
@@ -51,15 +75,55 @@ static const struct syscfg_reset_channel_data stih416_powerdowns[] = {
51 [STIH416_PCIE1_POWERDOWN] = STIH416_PDN_REAR(5, 8), 75 [STIH416_PCIE1_POWERDOWN] = STIH416_PDN_REAR(5, 8),
52}; 76};
53 77
78static const struct syscfg_reset_channel_data stih416_softresets[] = {
79 [STIH416_ETH0_SOFTRESET] = STIH416_SRST_FRONT(SYSCFG_1539, 0),
80 [STIH416_ETH1_SOFTRESET] = STIH416_SRST_SBC(SYSCFG_510, 0),
81 [STIH416_IRB_SOFTRESET] = STIH416_SRST_LPM(LPM_SYSCFG_1, 6),
82 [STIH416_USB0_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 9),
83 [STIH416_USB1_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 10),
84 [STIH416_USB2_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 11),
85 [STIH416_USB3_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 28),
86 [STIH416_SATA0_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 7),
87 [STIH416_SATA1_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 3),
88 [STIH416_PCIE0_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 15),
89 [STIH416_PCIE1_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 2),
90 [STIH416_AUD_DAC_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 14),
91 [STIH416_HDTVOUT_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 5),
92 [STIH416_VTAC_M_RX_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 25),
93 [STIH416_VTAC_A_RX_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2552, 26),
94 [STIH416_SYNC_HD_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 5),
95 [STIH416_SYNC_SD_SOFTRESET] = STIH416_SRST_REAR(SYSCFG_2553, 6),
96 [STIH416_BLITTER_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 10),
97 [STIH416_GPU_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 11),
98 [STIH416_VTAC_M_TX_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 18),
99 [STIH416_VTAC_A_TX_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 19),
100 [STIH416_VTG_AUX_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 21),
101 [STIH416_JPEG_DEC_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7563, 23),
102 [STIH416_HVA_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7564, 2),
103 [STIH416_COMPO_M_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7564, 3),
104 [STIH416_COMPO_A_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7564, 4),
105 [STIH416_VP8_DEC_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7564, 10),
106 [STIH416_VTG_MAIN_SOFTRESET] = STIH416_SRST_CPU(SYSCFG_7564, 16),
107};
108
54static struct syscfg_reset_controller_data stih416_powerdown_controller = { 109static struct syscfg_reset_controller_data stih416_powerdown_controller = {
55 .wait_for_ack = true, 110 .wait_for_ack = true,
56 .nr_channels = ARRAY_SIZE(stih416_powerdowns), 111 .nr_channels = ARRAY_SIZE(stih416_powerdowns),
57 .channels = stih416_powerdowns, 112 .channels = stih416_powerdowns,
58}; 113};
59 114
115static struct syscfg_reset_controller_data stih416_softreset_controller = {
116 .wait_for_ack = false,
117 .active_low = true,
118 .nr_channels = ARRAY_SIZE(stih416_softresets),
119 .channels = stih416_softresets,
120};
121
60static struct of_device_id stih416_reset_match[] = { 122static struct of_device_id stih416_reset_match[] = {
61 { .compatible = "st,stih416-powerdown", 123 { .compatible = "st,stih416-powerdown",
62 .data = &stih416_powerdown_controller, }, 124 .data = &stih416_powerdown_controller, },
125 { .compatible = "st,stih416-softreset",
126 .data = &stih416_softreset_controller, },
63 {}, 127 {},
64}; 128};
65 129