@@ -28,90 +28,95 @@ static struct quirk_entry quirk_spurious_8042 = {
28
28
.spurious_8042 = true,
29
29
};
30
30
31
+ static struct quirk_entry quirk_s2idle_spurious_8042 = {
32
+ .s2idle_bug_mmio = FCH_PM_BASE + FCH_PM_SCRATCH ,
33
+ .spurious_8042 = true,
34
+ };
35
+
31
36
static const struct dmi_system_id fwbug_list [] = {
32
37
{
33
38
.ident = "L14 Gen2 AMD" ,
34
- .driver_data = & quirk_s2idle_bug ,
39
+ .driver_data = & quirk_s2idle_spurious_8042 ,
35
40
.matches = {
36
41
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
37
42
DMI_MATCH (DMI_PRODUCT_NAME , "20X5" ),
38
43
}
39
44
},
40
45
{
41
46
.ident = "T14s Gen2 AMD" ,
42
- .driver_data = & quirk_s2idle_bug ,
47
+ .driver_data = & quirk_s2idle_spurious_8042 ,
43
48
.matches = {
44
49
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
45
50
DMI_MATCH (DMI_PRODUCT_NAME , "20XF" ),
46
51
}
47
52
},
48
53
{
49
54
.ident = "X13 Gen2 AMD" ,
50
- .driver_data = & quirk_s2idle_bug ,
55
+ .driver_data = & quirk_s2idle_spurious_8042 ,
51
56
.matches = {
52
57
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
53
58
DMI_MATCH (DMI_PRODUCT_NAME , "20XH" ),
54
59
}
55
60
},
56
61
{
57
62
.ident = "T14 Gen2 AMD" ,
58
- .driver_data = & quirk_s2idle_bug ,
63
+ .driver_data = & quirk_s2idle_spurious_8042 ,
59
64
.matches = {
60
65
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
61
66
DMI_MATCH (DMI_PRODUCT_NAME , "20XK" ),
62
67
}
63
68
},
64
69
{
65
70
.ident = "T14 Gen1 AMD" ,
66
- .driver_data = & quirk_s2idle_bug ,
71
+ .driver_data = & quirk_s2idle_spurious_8042 ,
67
72
.matches = {
68
73
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
69
74
DMI_MATCH (DMI_PRODUCT_NAME , "20UD" ),
70
75
}
71
76
},
72
77
{
73
78
.ident = "T14 Gen1 AMD" ,
74
- .driver_data = & quirk_s2idle_bug ,
79
+ .driver_data = & quirk_s2idle_spurious_8042 ,
75
80
.matches = {
76
81
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
77
82
DMI_MATCH (DMI_PRODUCT_NAME , "20UE" ),
78
83
}
79
84
},
80
85
{
81
86
.ident = "T14s Gen1 AMD" ,
82
- .driver_data = & quirk_s2idle_bug ,
87
+ .driver_data = & quirk_s2idle_spurious_8042 ,
83
88
.matches = {
84
89
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
85
90
DMI_MATCH (DMI_PRODUCT_NAME , "20UH" ),
86
91
}
87
92
},
88
93
{
89
94
.ident = "T14s Gen1 AMD" ,
90
- .driver_data = & quirk_s2idle_bug ,
95
+ .driver_data = & quirk_s2idle_spurious_8042 ,
91
96
.matches = {
92
97
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
93
98
DMI_MATCH (DMI_PRODUCT_NAME , "20UJ" ),
94
99
}
95
100
},
96
101
{
97
102
.ident = "P14s Gen1 AMD" ,
98
- .driver_data = & quirk_s2idle_bug ,
103
+ .driver_data = & quirk_s2idle_spurious_8042 ,
99
104
.matches = {
100
105
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
101
106
DMI_MATCH (DMI_PRODUCT_NAME , "20Y1" ),
102
107
}
103
108
},
104
109
{
105
110
.ident = "P14s Gen2 AMD" ,
106
- .driver_data = & quirk_s2idle_bug ,
111
+ .driver_data = & quirk_s2idle_spurious_8042 ,
107
112
.matches = {
108
113
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
109
114
DMI_MATCH (DMI_PRODUCT_NAME , "21A0" ),
110
115
}
111
116
},
112
117
{
113
118
.ident = "P14s Gen2 AMD" ,
114
- .driver_data = & quirk_s2idle_bug ,
119
+ .driver_data = & quirk_s2idle_spurious_8042 ,
115
120
.matches = {
116
121
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
117
122
DMI_MATCH (DMI_PRODUCT_NAME , "21A1" ),
@@ -152,39 +157,39 @@ static const struct dmi_system_id fwbug_list[] = {
152
157
},
153
158
{
154
159
.ident = "IdeaPad 1 14AMN7" ,
155
- .driver_data = & quirk_s2idle_bug ,
160
+ .driver_data = & quirk_s2idle_spurious_8042 ,
156
161
.matches = {
157
162
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
158
163
DMI_MATCH (DMI_PRODUCT_NAME , "82VF" ),
159
164
}
160
165
},
161
166
{
162
167
.ident = "IdeaPad 1 15AMN7" ,
163
- .driver_data = & quirk_s2idle_bug ,
168
+ .driver_data = & quirk_s2idle_spurious_8042 ,
164
169
.matches = {
165
170
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
166
171
DMI_MATCH (DMI_PRODUCT_NAME , "82VG" ),
167
172
}
168
173
},
169
174
{
170
175
.ident = "IdeaPad 1 15AMN7" ,
171
- .driver_data = & quirk_s2idle_bug ,
176
+ .driver_data = & quirk_s2idle_spurious_8042 ,
172
177
.matches = {
173
178
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
174
179
DMI_MATCH (DMI_PRODUCT_NAME , "82X5" ),
175
180
}
176
181
},
177
182
{
178
183
.ident = "IdeaPad Slim 3 14AMN8" ,
179
- .driver_data = & quirk_s2idle_bug ,
184
+ .driver_data = & quirk_s2idle_spurious_8042 ,
180
185
.matches = {
181
186
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
182
187
DMI_MATCH (DMI_PRODUCT_NAME , "82XN" ),
183
188
}
184
189
},
185
190
{
186
191
.ident = "IdeaPad Slim 3 15AMN8" ,
187
- .driver_data = & quirk_s2idle_bug ,
192
+ .driver_data = & quirk_s2idle_spurious_8042 ,
188
193
.matches = {
189
194
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
190
195
DMI_MATCH (DMI_PRODUCT_NAME , "82XQ" ),
@@ -193,7 +198,7 @@ static const struct dmi_system_id fwbug_list[] = {
193
198
/* https://gitlab.freedesktop.org/drm/amd/-/issues/4434 */
194
199
{
195
200
.ident = "Lenovo Yoga 6 13ALC6" ,
196
- .driver_data = & quirk_s2idle_bug ,
201
+ .driver_data = & quirk_s2idle_spurious_8042 ,
197
202
.matches = {
198
203
DMI_MATCH (DMI_BOARD_VENDOR , "LENOVO" ),
199
204
DMI_MATCH (DMI_PRODUCT_NAME , "82ND" ),
@@ -202,7 +207,7 @@ static const struct dmi_system_id fwbug_list[] = {
202
207
/* https://gitlab.freedesktop.org/drm/amd/-/issues/2684 */
203
208
{
204
209
.ident = "HP Laptop 15s-eq2xxx" ,
205
- .driver_data = & quirk_s2idle_bug ,
210
+ .driver_data = & quirk_s2idle_spurious_8042 ,
206
211
.matches = {
207
212
DMI_MATCH (DMI_SYS_VENDOR , "HP" ),
208
213
DMI_MATCH (DMI_PRODUCT_NAME , "HP Laptop 15s-eq2xxx" ),
@@ -285,6 +290,16 @@ void amd_pmc_quirks_init(struct amd_pmc_dev *dev)
285
290
{
286
291
const struct dmi_system_id * dmi_id ;
287
292
293
+ /*
294
+ * IRQ1 may cause an interrupt during resume even without a keyboard
295
+ * press.
296
+ *
297
+ * Affects Renoir, Cezanne and Barcelo SoCs
298
+ *
299
+ * A solution is available in PMFW 64.66.0, but it must be activated by
300
+ * SBIOS. If SBIOS is known to have the fix a quirk can be added for
301
+ * a given system to avoid workaround.
302
+ */
288
303
if (dev -> cpu_id == AMD_CPU_ID_CZN )
289
304
dev -> disable_8042_wakeup = true;
290
305
@@ -295,6 +310,5 @@ void amd_pmc_quirks_init(struct amd_pmc_dev *dev)
295
310
if (dev -> quirks -> s2idle_bug_mmio )
296
311
pr_info ("Using s2idle quirk to avoid %s platform firmware bug\n" ,
297
312
dmi_id -> ident );
298
- if (dev -> quirks -> spurious_8042 )
299
- dev -> disable_8042_wakeup = true;
313
+ dev -> disable_8042_wakeup = dev -> quirks -> spurious_8042 ;
300
314
}
0 commit comments