aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/reset/sti/reset-stih415.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/reset/sti/reset-stih415.c b/drivers/reset/sti/reset-stih415.c
index 56c214644dd9..e6f6c41abe12 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";
31#define STIH415_PDN_REAR(_cntl, _stat) \ 31#define STIH415_PDN_REAR(_cntl, _stat) \
32 _SYSCFG_RST_CH(stih415_rear, SYSCFG_336, _cntl, SYSSTAT_384, _stat) 32 _SYSCFG_RST_CH(stih415_rear, SYSCFG_336, _cntl, SYSSTAT_384, _stat)
33 33
34#define STIH415_SRST_REAR(_reg, _bit) \
35 _SYSCFG_RST_CH_NO_ACK(stih415_rear, _reg, _bit)
36
37#define STIH415_SRST_SBC(_reg, _bit) \
38 _SYSCFG_RST_CH_NO_ACK(stih415_sbc, _reg, _bit)
39
40#define STIH415_SRST_FRONT(_reg, _bit) \
41 _SYSCFG_RST_CH_NO_ACK(stih415_front, _reg, _bit)
42
43#define STIH415_SRST_LPM(_reg, _bit) \
44 _SYSCFG_RST_CH_NO_ACK(stih415_lpm, _reg, _bit)
45
34#define SYSCFG_114 0x38 /* Powerdown request EMI/NAND/Keyscan */ 46#define SYSCFG_114 0x38 /* Powerdown request EMI/NAND/Keyscan */
35#define SYSSTAT_187 0x15c /* Powerdown status EMI/NAND/Keyscan */ 47#define SYSSTAT_187 0x15c /* Powerdown status EMI/NAND/Keyscan */
36 48
37#define SYSCFG_336 0x90 /* Powerdown request USB/SATA/PCIe */ 49#define SYSCFG_336 0x90 /* Powerdown request USB/SATA/PCIe */
38#define SYSSTAT_384 0x150 /* Powerdown status USB/SATA/PCIe */ 50#define SYSSTAT_384 0x150 /* Powerdown status USB/SATA/PCIe */
39 51
52#define SYSCFG_376 0x130 /* Reset generator 0 control 0 */
53#define SYSCFG_166 0x108 /* Softreset Ethernet 0 */
54#define SYSCFG_31 0x7c /* Softreset Ethernet 1 */
55#define LPM_SYSCFG_1 0x4 /* Softreset IRB */
56
40static const struct syscfg_reset_channel_data stih415_powerdowns[] = { 57static const struct syscfg_reset_channel_data stih415_powerdowns[] = {
41 [STIH415_EMISS_POWERDOWN] = STIH415_PDN_FRONT(0), 58 [STIH415_EMISS_POWERDOWN] = STIH415_PDN_FRONT(0),
42 [STIH415_NAND_POWERDOWN] = STIH415_PDN_FRONT(1), 59 [STIH415_NAND_POWERDOWN] = STIH415_PDN_FRONT(1),
@@ -49,15 +66,33 @@ static const struct syscfg_reset_channel_data stih415_powerdowns[] = {
49 [STIH415_PCIE_POWERDOWN] = STIH415_PDN_REAR(5, 8), 66 [STIH415_PCIE_POWERDOWN] = STIH415_PDN_REAR(5, 8),
50}; 67};
51 68
69static const struct syscfg_reset_channel_data stih415_softresets[] = {
70 [STIH415_ETH0_SOFTRESET] = STIH415_SRST_FRONT(SYSCFG_166, 0),
71 [STIH415_ETH1_SOFTRESET] = STIH415_SRST_SBC(SYSCFG_31, 0),
72 [STIH415_IRB_SOFTRESET] = STIH415_SRST_LPM(LPM_SYSCFG_1, 6),
73 [STIH415_USB0_SOFTRESET] = STIH415_SRST_REAR(SYSCFG_376, 9),
74 [STIH415_USB1_SOFTRESET] = STIH415_SRST_REAR(SYSCFG_376, 10),
75 [STIH415_USB2_SOFTRESET] = STIH415_SRST_REAR(SYSCFG_376, 11),
76};
77
52static struct syscfg_reset_controller_data stih415_powerdown_controller = { 78static struct syscfg_reset_controller_data stih415_powerdown_controller = {
53 .wait_for_ack = true, 79 .wait_for_ack = true,
54 .nr_channels = ARRAY_SIZE(stih415_powerdowns), 80 .nr_channels = ARRAY_SIZE(stih415_powerdowns),
55 .channels = stih415_powerdowns, 81 .channels = stih415_powerdowns,
56}; 82};
57 83
84static struct syscfg_reset_controller_data stih415_softreset_controller = {
85 .wait_for_ack = false,
86 .active_low = true,
87 .nr_channels = ARRAY_SIZE(stih415_softresets),
88 .channels = stih415_softresets,
89};
90
58static struct of_device_id stih415_reset_match[] = { 91static struct of_device_id stih415_reset_match[] = {
59 { .compatible = "st,stih415-powerdown", 92 { .compatible = "st,stih415-powerdown",
60 .data = &stih415_powerdown_controller, }, 93 .data = &stih415_powerdown_controller, },
94 { .compatible = "st,stih415-softreset",
95 .data = &stih415_softreset_controller, },
61 {}, 96 {},
62}; 97};
63 98