]>
Commit | Line | Data |
---|---|---|
bb104d9e SL |
1 | From 1cea832ae3c8172ea39994ec95dc81b14f9960cb Mon Sep 17 00:00:00 2001 |
2 | From: Binbin Wu <binbin.wu@intel.com> | |
3 | Date: Mon, 8 Apr 2019 16:09:10 +0800 | |
4 | Subject: mfd: intel-lpss: Set the device in reset state when init | |
5 | ||
6 | [ Upstream commit dad06532292d77f37fbe831a02948a593500f682 ] | |
7 | ||
8 | In virtualized setup, when system reboots due to warm | |
9 | reset interrupt storm is seen. | |
10 | ||
11 | Call Trace: | |
12 | <IRQ> | |
13 | dump_stack+0x70/0xa5 | |
14 | __report_bad_irq+0x2e/0xc0 | |
15 | note_interrupt+0x248/0x290 | |
16 | ? add_interrupt_randomness+0x30/0x220 | |
17 | handle_irq_event_percpu+0x54/0x80 | |
18 | handle_irq_event+0x39/0x60 | |
19 | handle_fasteoi_irq+0x91/0x150 | |
20 | handle_irq+0x108/0x180 | |
21 | do_IRQ+0x52/0xf0 | |
22 | common_interrupt+0xf/0xf | |
23 | </IRQ> | |
24 | RIP: 0033:0x76fc2cfabc1d | |
25 | Code: 24 28 bf 03 00 00 00 31 c0 48 8d 35 63 77 0e 00 48 8d 15 2e | |
26 | 94 0e 00 4c 89 f9 49 89 d9 4c 89 d3 e8 b8 e2 01 00 48 8b 54 24 18 | |
27 | <48> 89 ef 48 89 de 4c 89 e1 e8 d5 97 01 00 84 c0 74 2d 48 8b 04 | |
28 | 24 | |
29 | RSP: 002b:00007ffd247c1fc0 EFLAGS: 00000293 ORIG_RAX: ffffffffffffffda | |
30 | RAX: 0000000000000000 RBX: 00007ffd247c1ff0 RCX: 000000000003d3ce | |
31 | RDX: 0000000000000000 RSI: 00007ffd247c1ff0 RDI: 000076fc2cbb6010 | |
32 | RBP: 000076fc2cded010 R08: 00007ffd247c2210 R09: 00007ffd247c22a0 | |
33 | R10: 000076fc29465470 R11: 0000000000000000 R12: 00007ffd247c1fc0 | |
34 | R13: 000076fc2ce8e470 R14: 000076fc27ec9960 R15: 0000000000000414 | |
35 | handlers: | |
36 | [<000000000d3fa913>] idma64_irq | |
37 | Disabling IRQ #27 | |
38 | ||
39 | To avoid interrupt storm, set the device in reset state | |
40 | before bringing out the device from reset state. | |
41 | ||
42 | Changelog v2: | |
43 | - correct the subject line by adding "mfd: " | |
44 | ||
45 | Signed-off-by: Binbin Wu <binbin.wu@intel.com> | |
46 | Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> | |
47 | Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> | |
48 | Signed-off-by: Lee Jones <lee.jones@linaro.org> | |
49 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
50 | --- | |
51 | drivers/mfd/intel-lpss.c | 3 +++ | |
52 | 1 file changed, 3 insertions(+) | |
53 | ||
54 | diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c | |
55 | index 19ac8bc8e7ea..22dd8c055048 100644 | |
56 | --- a/drivers/mfd/intel-lpss.c | |
57 | +++ b/drivers/mfd/intel-lpss.c | |
58 | @@ -273,6 +273,9 @@ static void intel_lpss_init_dev(const struct intel_lpss *lpss) | |
59 | { | |
60 | u32 value = LPSS_PRIV_SSP_REG_DIS_DMA_FIN; | |
61 | ||
62 | + /* Set the device in reset state */ | |
63 | + writel(0, lpss->priv + LPSS_PRIV_RESETS); | |
64 | + | |
65 | intel_lpss_deassert_reset(lpss); | |
66 | ||
67 | intel_lpss_set_remap_addr(lpss); | |
68 | -- | |
69 | 2.20.1 | |
70 |