diff options
author | John Crispin <blogic@openwrt.org> | 2015-11-04 05:50:13 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2015-11-11 02:38:14 -0500 |
commit | 1a93520504aa035f037e7e255aee670561a38946 (patch) | |
tree | 5718e8589c05dac64ce7a6cf1f391ff6d84d06bc /arch/mips/ralink | |
parent | 81ab9f6c5ff8565e4cba330e340a8979a10521d7 (diff) |
MIPS: ralink: Put the pci bus into reset state before rebooting the SoC
Some pcie cards have problems after a reboot without this.
Signed-off-by: John Crispin <blogic@openwrt.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/11446/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/ralink')
-rw-r--r-- | arch/mips/ralink/reset.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/mips/ralink/reset.c b/arch/mips/ralink/reset.c index ee26d45e48e7..ee117c4bc4a3 100644 --- a/arch/mips/ralink/reset.c +++ b/arch/mips/ralink/reset.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/pm.h> | 11 | #include <linux/pm.h> |
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | #include <linux/of.h> | 13 | #include <linux/of.h> |
14 | #include <linux/delay.h> | ||
14 | #include <linux/reset-controller.h> | 15 | #include <linux/reset-controller.h> |
15 | 16 | ||
16 | #include <asm/reboot.h> | 17 | #include <asm/reboot.h> |
@@ -18,8 +19,10 @@ | |||
18 | #include <asm/mach-ralink/ralink_regs.h> | 19 | #include <asm/mach-ralink/ralink_regs.h> |
19 | 20 | ||
20 | /* Reset Control */ | 21 | /* Reset Control */ |
21 | #define SYSC_REG_RESET_CTRL 0x034 | 22 | #define SYSC_REG_RESET_CTRL 0x034 |
22 | #define RSTCTL_RESET_SYSTEM BIT(0) | 23 | |
24 | #define RSTCTL_RESET_PCI BIT(26) | ||
25 | #define RSTCTL_RESET_SYSTEM BIT(0) | ||
23 | 26 | ||
24 | static int ralink_assert_device(struct reset_controller_dev *rcdev, | 27 | static int ralink_assert_device(struct reset_controller_dev *rcdev, |
25 | unsigned long id) | 28 | unsigned long id) |
@@ -83,6 +86,11 @@ void ralink_rst_init(void) | |||
83 | 86 | ||
84 | static void ralink_restart(char *command) | 87 | static void ralink_restart(char *command) |
85 | { | 88 | { |
89 | if (IS_ENABLED(CONFIG_PCI)) { | ||
90 | rt_sysc_m32(0, RSTCTL_RESET_PCI, SYSC_REG_RESET_CTRL); | ||
91 | mdelay(50); | ||
92 | } | ||
93 | |||
86 | local_irq_disable(); | 94 | local_irq_disable(); |
87 | rt_sysc_w32(RSTCTL_RESET_SYSTEM, SYSC_REG_RESET_CTRL); | 95 | rt_sysc_w32(RSTCTL_RESET_SYSTEM, SYSC_REG_RESET_CTRL); |
88 | unreachable(); | 96 | unreachable(); |