diff options
-rw-r--r-- | drivers/reset/sti/reset-stih416.c | 64 |
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"; | |||
24 | static const char stih416_rear[] = "st,stih416-rear-syscfg"; | 24 | static const char stih416_rear[] = "st,stih416-rear-syscfg"; |
25 | static const char stih416_sbc[] = "st,stih416-sbc-syscfg"; | 25 | static const char stih416_sbc[] = "st,stih416-sbc-syscfg"; |
26 | static const char stih416_lpm[] = "st,stih416-lpm-syscfg"; | 26 | static const char stih416_lpm[] = "st,stih416-lpm-syscfg"; |
27 | static 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 | |||
40 | static const struct syscfg_reset_channel_data stih416_powerdowns[] = { | 64 | static 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 | ||
78 | static 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 | |||
54 | static struct syscfg_reset_controller_data stih416_powerdown_controller = { | 109 | static 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 | ||
115 | static 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 | |||
60 | static struct of_device_id stih416_reset_match[] = { | 122 | static 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 | ||