-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathsof_remove.sh
More file actions
executable file
·333 lines (286 loc) · 9.52 KB
/
sof_remove.sh
File metadata and controls
executable file
·333 lines (286 loc) · 9.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
#!/bin/bash -e
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Intel Corporation. All rights reserved.
TOPDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)
# Used only by more advanced error handling
source_opt_libsh()
{
local libsh="$TOPDIR"/case-lib/lib.sh
if test -e "$libsh"; then
# shellcheck source=case-lib/lib.sh
source "$libsh"
fi
}
remove_module() {
local MODULE="$1"
if grep -q "^${MODULE}[[:blank:]]" /proc/modules; then
printf 'RMMOD\t%s\n' "$MODULE"
sudo rmmod "$MODULE"
else
printf 'SKIP\t%s \tnot loaded\n' "$MODULE"
fi
}
exit_handler()
{
local exit_status="$1"
# Even without any active audio, pulseaudio can use modules
# "non-deterministically". So even if we are successful this time,
# warn about any running pulseaudio because it could make us fail
# the next time.
# TODO: display any pipewire process too.
if pgrep -a pulseaudio; then
systemctl_show_pulseaudio || true
fi
if test "$exit_status" -ne 0; then
lsmod | grep -e sof -e snd -e sound -e drm
# rmmod can fail silently, for instance when "Used by" is -1
printf "%s FAILED\n" "$0"
fi
return "$exit_status"
}
# Always return 0 because if a lingering sof-logger is an error, it's
# not _our_ error.
kill_trace_users()
{
local dma_trace=/sys/kernel/debug/sof/trace
sudo fuser "$dma_trace" || return 0
( set -x
sudo fuser --kill -TERM "$dma_trace" || true
sudo fuser "$dma_trace" || return 0
sleep 1
sudo fuser --kill -KILL "$dma_trace" || true
)
}
source_opt_libsh
trap 'exit_handler $?' EXIT
# Breaks systemctl --user and "double sudo" is not great
test "$(id -u)" -ne 0 ||
>&2 printf '\nWARNING: running as root is not supported\n\n'
# Make sure sudo works first, not after dozens of SKIP
sudo true
# For some reason (bug?) using /sys/kernel/debug/sof/trace hangs rmmod
# Playing audio is not an issue, for instance speaker-test -s 1 -l 0 is
# interrupted when unloading the drivers.
kill_trace_users
# SOF CI has a dependency on usb audio
remove_module snd_usb_audio
remove_module snd_usbmidi_lib
#-------------------------------------------
# Top level devices
# ACPI is after PCI due to TNG dependencies
# TGL and ICL depend on CNL, PTL on LNL and
# LNL on MTL, the non-linear order is
# intentional
#-------------------------------------------
remove_module snd_hda_intel
remove_module snd_sof_pci_intel_tng
remove_module snd_sof_pci_intel_skl
remove_module snd_sof_pci_intel_apl
remove_module snd_sof_pci_intel_tgl
remove_module snd_sof_pci_intel_icl
remove_module snd_sof_pci_intel_cnl
remove_module snd_sof_pci_intel_ptl
remove_module snd_sof_pci_intel_lnl
remove_module snd_sof_pci_intel_mtl
remove_module snd_sof_acpi_intel_byt
remove_module snd_sof_acpi_intel_bdw
#-------------------------------------------
# Top level devices
# i.MX-specific drivers
#-------------------------------------------
remove_module snd_sof_imx8
remove_module snd_sof_imx8m
#-------------------------------------------
# legacy drivers (not used but loaded)
#-------------------------------------------
remove_module snd_soc_catpt
remove_module snd_intel_sst_acpi
remove_module snd_intel_sst_core
remove_module snd_soc_sst_atom_hifi2_platform
remove_module snd_soc_skl
#-------------------------------------------
# AVS drivers (not used but loaded)
#-------------------------------------------
remove_module snd_soc_avs
remove_module snd_soc_hda_codec
#-------------------------------------------
# platform drivers
#-------------------------------------------
remove_module snd_sof_intel_hda_generic
# Attempt 1/2
#
# - In the SDW BRA future this will be "in use by
# snd_sof_intel_hda_sdw_bpt" and will fail. Ignore that failure.
# - In the 6.5-ish "present" 'soundwire_intel' depends on it so it must
# be removed first.
# https://github.com/thesofproject/sof-test/pull/1182
remove_module snd_sof_intel_hda_common || true
#-------------------------------------------
# SoundWire/SOF parts
#-------------------------------------------
remove_module soundwire_intel_init
remove_module soundwire_intel
remove_module soundwire_cadence
remove_module soundwire_generic_allocation
remove_module snd_sof_intel_hda_sdw_bpt
#-------------------------------------------
# platform drivers - take2
#-------------------------------------------
# Attempt 2/2, see above.
remove_module snd_sof_intel_hda_common
remove_module snd_sof_intel_hda
remove_module snd_sof_intel_ipc
remove_module snd_sof_xtensa_dsp
#-------------------------------------------
# Helpers
#-------------------------------------------
remove_module snd_sof_acpi
remove_module snd_sof_pci
remove_module snd_sof_intel_atom
remove_module imx_common
#-------------------------------------------
# Machine drivers
#-------------------------------------------
remove_module snd_soc_sof_rt5682
remove_module snd_soc_sof_da7219_max98373
remove_module snd_soc_sof_da7219
remove_module snd_soc_sst_bdw_rt5677_mach
remove_module snd_soc_bdw_rt286
remove_module snd_soc_sst_broadwell
remove_module snd_soc_sst_bxt_da7219_max98357a
remove_module snd_soc_sst_sof_pcm512x
remove_module snd_soc_sst_bxt_rt298
remove_module snd_soc_sst_sof_wm8804
remove_module snd_soc_sst_byt_cht_da7213
remove_module snd_soc_sst_byt_cht_es8316
remove_module snd_soc_sst_bytcr_rt5640
remove_module snd_soc_sst_bytcr_rt5651
remove_module snd_soc_sst_cht_bsw_max98090_ti
remove_module snd_soc_sst_cht_bsw_nau8824
remove_module snd_soc_sst_cht_bsw_rt5645
remove_module snd_soc_sst_cht_bsw_rt5672
remove_module snd_soc_sst_glk_rt5682_max98357a
remove_module snd_soc_cml_rt1011_rt5682
remove_module snd_soc_skl_hda_dsp
remove_module snd_soc_sdw_rt700
remove_module snd_soc_sdw_rt711_rt1308_rt715
remove_module snd_soc_sof_sdw
remove_module snd_soc_sdw_utils
remove_module snd_soc_sof_es8336
remove_module snd_soc_ehl_rt5660
remove_module snd_soc_intel_sof_board_helpers
remove_module snd_soc_acpi_intel_match
remove_module snd_soc_intel_hda_dsp_common
remove_module snd_soc_intel_sof_cirrus_common
remove_module snd_soc_intel_sof_maxim_common
remove_module snd_soc_intel_sof_nuvoton_common
remove_module snd_soc_intel_sof_realtek_common
#-------------------------------------------
# SOF client drivers
#-------------------------------------------
remove_module snd_sof_probes
remove_module snd_sof_ipc_test
remove_module snd_sof_ipc_flood_test
remove_module snd_sof_ipc_msg_injector
remove_module snd_sof_ipc_kernel_injector
remove_module snd_sof_dma_trace
#-------------------------------------------
# SOF OF driver
#-------------------------------------------
remove_module snd_sof_of
# snd_sof_nocodec dependencies re-ordered
# in https://github.com/thesofproject/linux/pull/2800
# TODO: remove || true and the duplicate below
# when we stop testing old branches.
remove_module snd_sof_nocodec || true
remove_module snd_sof
remove_module snd_sof_nocodec
remove_module snd_sof_utils
#-------------------------------------------
# Codec drivers
#-------------------------------------------
remove_module snd_soc_da7213
remove_module snd_soc_da7219
remove_module snd_soc_pcm512x_i2c
remove_module snd_soc_pcm512x
remove_module snd_soc_rt274
remove_module snd_soc_rt286
remove_module snd_soc_rt298
remove_module snd_soc_rt700
remove_module snd_soc_rt711
remove_module snd_soc_rt711_sdca
remove_module snd_soc_rt712_sdca
remove_module snd_soc_rt712_sdca_dmic
remove_module snd_soc_rt715
remove_module snd_soc_rt715_sdca
remove_module snd_soc_rt722_sdca
remove_module snd_soc_rt1308
remove_module snd_soc_rt1308_sdw
remove_module snd_soc_rt1316_sdw
remove_module snd_soc_rt1318_sdw
remove_module snd_soc_rt1320_sdw
remove_module snd_soc_sdw_mockup
remove_module snd_soc_rt1011
remove_module snd_soc_rt5640
remove_module snd_soc_rt5645
remove_module snd_soc_rt5651
remove_module snd_soc_rt5660
remove_module snd_soc_rt5670
remove_module snd_soc_rt5677
remove_module snd_soc_rt5677_spi
remove_module snd_soc_rt5682_sdw
remove_module snd_soc_rt5682_i2c
remove_module snd_soc_rt5682
remove_module snd_soc_rt5682s
remove_module snd_soc_rl6231
remove_module snd_soc_rl6347a
remove_module snd_soc_wm8804_i2c
remove_module snd_soc_wm8804
remove_module snd_soc_es8316
remove_module snd_soc_es8326
remove_module snd_soc_max98090
remove_module snd_soc_ts3a227e
remove_module snd_soc_max98357a
remove_module snd_soc_max98363
remove_module snd_soc_max98373_sdw
remove_module snd_soc_max98373_i2c
remove_module snd_soc_max98373
remove_module snd_soc_max98390
remove_module snd_soc_hdac_hda
remove_module snd_soc_hdac_hdmi
remove_module snd_hda_codec_hdmi
remove_module snd_soc_dmic
remove_module snd_hda_codec_realtek
remove_module snd_hda_codec_generic
remove_module snd_soc_wm8960
remove_module snd_soc_simple_card
#-------------------------------------------
# Remaining core SOF parts
#-------------------------------------------
remove_module snd_soc_acpi
remove_module snd_intel_dspcfg
remove_module regmap_sdw
remove_module regmap_sdw_mbq
remove_module soundwire_bus
remove_module snd_intel_sdw_acpi
remove_module snd_sof_intel_hda_mlink
remove_module snd_hda_ext_core
#-------------------------------------------
# Remaining core ALSA/ASoC parts
#-------------------------------------------
remove_module snd_soc_core
remove_module snd_hda_codec
remove_module snd_hda_core
remove_module snd_hwdep
remove_module snd_compress
remove_module snd_pcm_dmaengine
remove_module snd_pcm
remove_module snd_ctl_led
remove_module snd_seq_midi
remove_module snd_seq_midi_event
remove_module snd_rawmidi
remove_module snd_seq
remove_module snd_seq_device
remove_module snd_timer
remove_module snd
remove_module soundcore