Skip to content

Commit 6b045e2

Browse files
committed
ASoC: SOF: Intel: remove circular dependency for
Merge series from Pierre-Louis Bossart <[email protected]>: The SoundWire BPT support will rely on the HDaudio DMA. This exposes a circular dependency module dependency which has to be resolved by splitting common parts used by HDaudio and SoundWire parts, and 'generic' parts used by HDaudio only. This patchset does not change any functionality, it just moves code around, exposes symbols that are used in the new module. The code has been in use for more than one kernel cycle already so it really shouldn't break any existing platforms. The main issue with such code moves is that it makes backports or fixes more complicated. That's the main reason why we held back these patches until we were reasonably confident on the maturity of MTL and LNL drivers.
2 parents f283219 + 6fe61f3 commit 6b045e2

31 files changed

+811
-637
lines changed

sound/soc/sof/intel/Kconfig

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ config SND_SOC_SOF_MERRIFIELD
9797

9898
config SND_SOC_SOF_INTEL_SKL
9999
tristate
100-
select SND_SOC_SOF_HDA_COMMON
100+
select SND_SOC_SOF_HDA_GENERIC
101101
select SND_SOC_SOF_IPC4
102102

103103
config SND_SOC_SOF_SKYLAKE
@@ -122,7 +122,7 @@ config SND_SOC_SOF_KABYLAKE
122122

123123
config SND_SOC_SOF_INTEL_APL
124124
tristate
125-
select SND_SOC_SOF_HDA_COMMON
125+
select SND_SOC_SOF_HDA_GENERIC
126126
select SND_SOC_SOF_IPC3
127127
select SND_SOC_SOF_IPC4
128128

@@ -148,7 +148,7 @@ config SND_SOC_SOF_GEMINILAKE
148148

149149
config SND_SOC_SOF_INTEL_CNL
150150
tristate
151-
select SND_SOC_SOF_HDA_COMMON
151+
select SND_SOC_SOF_HDA_GENERIC
152152
select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
153153
select SND_SOC_SOF_IPC3
154154
select SND_SOC_SOF_IPC4
@@ -184,10 +184,11 @@ config SND_SOC_SOF_COMETLAKE
184184

185185
config SND_SOC_SOF_INTEL_ICL
186186
tristate
187-
select SND_SOC_SOF_HDA_COMMON
187+
select SND_SOC_SOF_HDA_GENERIC
188188
select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
189189
select SND_SOC_SOF_IPC3
190190
select SND_SOC_SOF_IPC4
191+
select SND_SOC_SOF_INTEL_CNL
191192

192193
config SND_SOC_SOF_ICELAKE
193194
tristate "SOF support for Icelake"
@@ -211,10 +212,11 @@ config SND_SOC_SOF_JASPERLAKE
211212

212213
config SND_SOC_SOF_INTEL_TGL
213214
tristate
214-
select SND_SOC_SOF_HDA_COMMON
215+
select SND_SOC_SOF_HDA_GENERIC
215216
select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
216217
select SND_SOC_SOF_IPC3
217218
select SND_SOC_SOF_IPC4
219+
select SND_SOC_SOF_INTEL_CNL
218220

219221
config SND_SOC_SOF_TIGERLAKE
220222
tristate "SOF support for Tigerlake"
@@ -248,7 +250,7 @@ config SND_SOC_SOF_ALDERLAKE
248250

249251
config SND_SOC_SOF_INTEL_MTL
250252
tristate
251-
select SND_SOC_SOF_HDA_COMMON
253+
select SND_SOC_SOF_HDA_GENERIC
252254
select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
253255
select SND_SOC_SOF_IPC4
254256

@@ -264,9 +266,10 @@ config SND_SOC_SOF_METEORLAKE
264266

265267
config SND_SOC_SOF_INTEL_LNL
266268
tristate
267-
select SND_SOC_SOF_HDA_COMMON
269+
select SND_SOC_SOF_HDA_GENERIC
268270
select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
269271
select SND_SOC_SOF_IPC4
272+
select SND_SOC_SOF_INTEL_MTL
270273

271274
config SND_SOC_SOF_LUNARLAKE
272275
tristate "SOF support for Lunarlake"
@@ -280,6 +283,10 @@ config SND_SOC_SOF_LUNARLAKE
280283

281284
config SND_SOC_SOF_HDA_COMMON
282285
tristate
286+
287+
config SND_SOC_SOF_HDA_GENERIC
288+
tristate
289+
select SND_SOC_SOF_HDA_COMMON
283290
select SND_SOC_SOF_INTEL_COMMON
284291
select SND_SOC_SOF_PCI_DEV
285292
select SND_INTEL_DSP_CONFIG
@@ -296,7 +303,7 @@ config SND_SOC_SOF_HDA_MLINK
296303
This option is not user-selectable but automagically handled by
297304
'select' statements at a higher level.
298305

299-
if SND_SOC_SOF_HDA_COMMON
306+
if SND_SOC_SOF_HDA_GENERIC
300307

301308
config SND_SOC_SOF_HDA_LINK
302309
bool "SOF support for HDA Links(HDA/HDMI)"
@@ -316,7 +323,7 @@ config SND_SOC_SOF_HDA_AUDIO_CODEC
316323
Say Y if you want to enable HDAudio codecs with SOF.
317324
If unsure select "N".
318325

319-
endif ## SND_SOC_SOF_HDA_COMMON
326+
endif ## SND_SOC_SOF_HDA_GENERIC
320327

321328
config SND_SOC_SOF_HDA_LINK_BASELINE
322329
tristate

sound/soc/sof/intel/Makefile

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
snd-sof-acpi-intel-byt-objs := byt.o
44
snd-sof-acpi-intel-bdw-objs := bdw.o
55

6-
snd-sof-intel-hda-common-objs := hda.o hda-loader.o hda-stream.o hda-trace.o \
6+
snd-sof-intel-hda-common-objs := hda-loader.o hda-stream.o hda-trace.o \
77
hda-dsp.o hda-ipc.o hda-ctrl.o hda-pcm.o \
88
hda-dai.o hda-dai-ops.o hda-bus.o \
9-
skl.o hda-loader-skl.o \
10-
apl.o cnl.o tgl.o icl.o mtl.o lnl.o hda-common-ops.o \
11-
telemetry.o
9+
telemetry.o tracepoints.o
10+
11+
snd-sof-intel-hda-generic-objs := hda.o hda-common-ops.o
1212

1313
snd-sof-intel-hda-mlink-objs := hda-mlink.o
1414

@@ -22,17 +22,18 @@ obj-$(CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP) += snd-sof-intel-atom.o
2222
obj-$(CONFIG_SND_SOC_SOF_BAYTRAIL) += snd-sof-acpi-intel-byt.o
2323
obj-$(CONFIG_SND_SOC_SOF_BROADWELL) += snd-sof-acpi-intel-bdw.o
2424
obj-$(CONFIG_SND_SOC_SOF_HDA_COMMON) += snd-sof-intel-hda-common.o
25+
obj-$(CONFIG_SND_SOC_SOF_HDA_GENERIC) += snd-sof-intel-hda-generic.o
2526
obj-$(CONFIG_SND_SOC_SOF_HDA_MLINK) += snd-sof-intel-hda-mlink.o
2627
obj-$(CONFIG_SND_SOC_SOF_HDA) += snd-sof-intel-hda.o
2728

2829
snd-sof-pci-intel-tng-objs := pci-tng.o
29-
snd-sof-pci-intel-skl-objs := pci-skl.o
30-
snd-sof-pci-intel-apl-objs := pci-apl.o
31-
snd-sof-pci-intel-cnl-objs := pci-cnl.o
32-
snd-sof-pci-intel-icl-objs := pci-icl.o
33-
snd-sof-pci-intel-tgl-objs := pci-tgl.o
34-
snd-sof-pci-intel-mtl-objs := pci-mtl.o
35-
snd-sof-pci-intel-lnl-objs := pci-lnl.o
30+
snd-sof-pci-intel-skl-objs := pci-skl.o skl.o hda-loader-skl.o
31+
snd-sof-pci-intel-apl-objs := pci-apl.o apl.o
32+
snd-sof-pci-intel-cnl-objs := pci-cnl.o cnl.o
33+
snd-sof-pci-intel-icl-objs := pci-icl.o icl.o
34+
snd-sof-pci-intel-tgl-objs := pci-tgl.o tgl.o
35+
snd-sof-pci-intel-mtl-objs := pci-mtl.o mtl.o
36+
snd-sof-pci-intel-lnl-objs := pci-lnl.o lnl.o
3637

3738
obj-$(CONFIG_SND_SOC_SOF_MERRIFIELD) += snd-sof-pci-intel-tng.o
3839
obj-$(CONFIG_SND_SOC_SOF_INTEL_SKL) += snd-sof-pci-intel-skl.o

sound/soc/sof/intel/apl.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ static const struct snd_sof_debugfs_map apl_dsp_debugfs[] = {
2929

3030
/* apollolake ops */
3131
struct snd_sof_dsp_ops sof_apl_ops;
32-
EXPORT_SYMBOL_NS(sof_apl_ops, SND_SOC_SOF_INTEL_HDA_COMMON);
3332

3433
int sof_apl_ops_init(struct snd_sof_dev *sdev)
3534
{
@@ -97,7 +96,6 @@ int sof_apl_ops_init(struct snd_sof_dev *sdev)
9796

9897
return 0;
9998
};
100-
EXPORT_SYMBOL_NS(sof_apl_ops_init, SND_SOC_SOF_INTEL_HDA_COMMON);
10199

102100
const struct sof_intel_dsp_desc apl_chip_info = {
103101
/* Apollolake */
@@ -121,4 +119,3 @@ const struct sof_intel_dsp_desc apl_chip_info = {
121119
.disable_interrupts = hda_dsp_disable_interrupts,
122120
.hw_ip_version = SOF_INTEL_CAVS_1_5_PLUS,
123121
};
124-
EXPORT_SYMBOL_NS(apl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);

sound/soc/sof/intel/cnl.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ irqreturn_t cnl_ipc4_irq_thread(int irq, void *context)
110110

111111
return IRQ_HANDLED;
112112
}
113+
EXPORT_SYMBOL_NS(cnl_ipc4_irq_thread, SND_SOC_SOF_INTEL_CNL);
113114

114115
irqreturn_t cnl_ipc_irq_thread(int irq, void *context)
115116
{
@@ -202,6 +203,7 @@ irqreturn_t cnl_ipc_irq_thread(int irq, void *context)
202203

203204
return IRQ_HANDLED;
204205
}
206+
EXPORT_SYMBOL_NS(cnl_ipc_irq_thread, SND_SOC_SOF_INTEL_CNL);
205207

206208
static void cnl_ipc_host_done(struct snd_sof_dev *sdev)
207209
{
@@ -284,6 +286,7 @@ int cnl_ipc4_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg)
284286

285287
return 0;
286288
}
289+
EXPORT_SYMBOL_NS(cnl_ipc4_send_msg, SND_SOC_SOF_INTEL_CNL);
287290

288291
int cnl_ipc_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg)
289292
{
@@ -331,6 +334,7 @@ int cnl_ipc_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg)
331334

332335
return 0;
333336
}
337+
EXPORT_SYMBOL_NS(cnl_ipc_send_msg, SND_SOC_SOF_INTEL_CNL);
334338

335339
void cnl_ipc_dump(struct snd_sof_dev *sdev)
336340
{
@@ -351,6 +355,7 @@ void cnl_ipc_dump(struct snd_sof_dev *sdev)
351355
"error: host status 0x%8.8x dsp status 0x%8.8x mask 0x%8.8x\n",
352356
hipcida, hipctdr, hipcctl);
353357
}
358+
EXPORT_SYMBOL_NS(cnl_ipc_dump, SND_SOC_SOF_INTEL_CNL);
354359

355360
void cnl_ipc4_dump(struct snd_sof_dev *sdev)
356361
{
@@ -372,10 +377,11 @@ void cnl_ipc4_dump(struct snd_sof_dev *sdev)
372377
"Host IPC initiator: %#x|%#x|%#x, target: %#x|%#x|%#x, ctl: %#x\n",
373378
hipcidr, hipcidd, hipcida, hipctdr, hipctdd, hipctda, hipcctl);
374379
}
380+
EXPORT_SYMBOL_NS(cnl_ipc4_dump, SND_SOC_SOF_INTEL_CNL);
375381

376382
/* cannonlake ops */
377383
struct snd_sof_dsp_ops sof_cnl_ops;
378-
EXPORT_SYMBOL_NS(sof_cnl_ops, SND_SOC_SOF_INTEL_HDA_COMMON);
384+
EXPORT_SYMBOL_NS(sof_cnl_ops, SND_SOC_SOF_INTEL_CNL);
379385

380386
int sof_cnl_ops_init(struct snd_sof_dev *sdev)
381387
{
@@ -444,7 +450,7 @@ int sof_cnl_ops_init(struct snd_sof_dev *sdev)
444450

445451
return 0;
446452
};
447-
EXPORT_SYMBOL_NS(sof_cnl_ops_init, SND_SOC_SOF_INTEL_HDA_COMMON);
453+
EXPORT_SYMBOL_NS(sof_cnl_ops_init, SND_SOC_SOF_INTEL_CNL);
448454

449455
const struct sof_intel_dsp_desc cnl_chip_info = {
450456
/* Cannonlake */
@@ -467,13 +473,13 @@ const struct sof_intel_dsp_desc cnl_chip_info = {
467473
.enable_sdw_irq = hda_common_enable_sdw_irq,
468474
.check_sdw_irq = hda_common_check_sdw_irq,
469475
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
476+
.sdw_process_wakeen = hda_sdw_process_wakeen_common,
470477
.check_ipc_irq = hda_dsp_check_ipc_irq,
471478
.cl_init = cl_dsp_init,
472479
.power_down_dsp = hda_power_down_dsp,
473480
.disable_interrupts = hda_dsp_disable_interrupts,
474481
.hw_ip_version = SOF_INTEL_CAVS_1_8,
475482
};
476-
EXPORT_SYMBOL_NS(cnl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
477483

478484
/*
479485
* JasperLake is technically derived from IceLake, and should be in
@@ -503,10 +509,11 @@ const struct sof_intel_dsp_desc jsl_chip_info = {
503509
.enable_sdw_irq = hda_common_enable_sdw_irq,
504510
.check_sdw_irq = hda_common_check_sdw_irq,
505511
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
512+
.sdw_process_wakeen = hda_sdw_process_wakeen_common,
506513
.check_ipc_irq = hda_dsp_check_ipc_irq,
507514
.cl_init = cl_dsp_init,
508515
.power_down_dsp = hda_power_down_dsp,
509516
.disable_interrupts = hda_dsp_disable_interrupts,
510517
.hw_ip_version = SOF_INTEL_CAVS_2_0,
511518
};
512-
EXPORT_SYMBOL_NS(jsl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
519+
EXPORT_SYMBOL_NS(jsl_chip_info, SND_SOC_SOF_INTEL_CNL);

sound/soc/sof/intel/hda-bus.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ void sof_hda_bus_init(struct snd_sof_dev *sdev, struct device *dev)
9494
spin_lock_init(&bus->reg_lock);
9595
#endif /* CONFIG_SND_SOC_SOF_HDA_LINK */
9696
}
97+
EXPORT_SYMBOL_NS(sof_hda_bus_init, SND_SOC_SOF_INTEL_HDA_COMMON);
9798

9899
void sof_hda_bus_exit(struct snd_sof_dev *sdev)
99100
{
@@ -103,3 +104,4 @@ void sof_hda_bus_exit(struct snd_sof_dev *sdev)
103104
snd_hdac_ext_bus_exit(bus);
104105
#endif
105106
}
107+
EXPORT_SYMBOL_NS(sof_hda_bus_exit, SND_SOC_SOF_INTEL_HDA_COMMON);

sound/soc/sof/intel/hda-common-ops.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,4 @@ const struct snd_sof_dsp_ops sof_hda_common_ops = {
105105

106106
.dsp_arch_ops = &sof_xtensa_arch_ops,
107107
};
108+
EXPORT_SYMBOL_NS(sof_hda_common_ops, SND_SOC_SOF_INTEL_HDA_GENERIC);

sound/soc/sof/intel/hda-ctrl.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ int hda_dsp_ctrl_get_caps(struct snd_sof_dev *sdev)
128128

129129
return 0;
130130
}
131+
EXPORT_SYMBOL_NS(hda_dsp_ctrl_get_caps, SND_SOC_SOF_INTEL_HDA_COMMON);
131132

132133
void hda_dsp_ctrl_ppcap_enable(struct snd_sof_dev *sdev, bool enable)
133134
{
@@ -136,6 +137,7 @@ void hda_dsp_ctrl_ppcap_enable(struct snd_sof_dev *sdev, bool enable)
136137
snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL,
137138
SOF_HDA_PPCTL_GPROCEN, val);
138139
}
140+
EXPORT_SYMBOL_NS(hda_dsp_ctrl_ppcap_enable, SND_SOC_SOF_INTEL_HDA_COMMON);
139141

140142
void hda_dsp_ctrl_ppcap_int_enable(struct snd_sof_dev *sdev, bool enable)
141143
{
@@ -144,6 +146,7 @@ void hda_dsp_ctrl_ppcap_int_enable(struct snd_sof_dev *sdev, bool enable)
144146
snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL,
145147
SOF_HDA_PPCTL_PIE, val);
146148
}
149+
EXPORT_SYMBOL_NS(hda_dsp_ctrl_ppcap_int_enable, SND_SOC_SOF_INTEL_HDA_COMMON);
147150

148151
void hda_dsp_ctrl_misc_clock_gating(struct snd_sof_dev *sdev, bool enable)
149152
{
@@ -178,6 +181,7 @@ int hda_dsp_ctrl_clock_power_gating(struct snd_sof_dev *sdev, bool enable)
178181

179182
return 0;
180183
}
184+
EXPORT_SYMBOL_NS(hda_dsp_ctrl_clock_power_gating, SND_SOC_SOF_INTEL_HDA_COMMON);
181185

182186
int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev)
183187
{
@@ -262,6 +266,7 @@ int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev)
262266

263267
return ret;
264268
}
269+
EXPORT_SYMBOL_NS(hda_dsp_ctrl_init_chip, SND_SOC_SOF_INTEL_HDA_COMMON);
265270

266271
void hda_dsp_ctrl_stop_chip(struct snd_sof_dev *sdev)
267272
{
@@ -321,3 +326,8 @@ void hda_dsp_ctrl_stop_chip(struct snd_sof_dev *sdev)
321326

322327
bus->chip_init = false;
323328
}
329+
330+
MODULE_LICENSE("Dual BSD/GPL");
331+
MODULE_IMPORT_NS(SND_SOC_SOF_HDA_MLINK);
332+
MODULE_IMPORT_NS(SND_SOC_SOF_HDA_AUDIO_CODEC);
333+
MODULE_IMPORT_NS(SND_SOC_SOF_HDA_AUDIO_CODEC_I915);

sound/soc/sof/intel/hda-dai.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags,
5454

5555
return 0;
5656
}
57+
EXPORT_SYMBOL_NS(hda_dai_config, SND_SOC_SOF_INTEL_HDA_COMMON);
5758

5859
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_LINK)
5960

@@ -542,6 +543,7 @@ int sdw_hda_dai_hw_params(struct snd_pcm_substream *substream,
542543
}
543544
return 0;
544545
}
546+
EXPORT_SYMBOL_NS(sdw_hda_dai_hw_params, SND_SOC_SOF_INTEL_HDA_COMMON);
545547

546548
int sdw_hda_dai_hw_free(struct snd_pcm_substream *substream,
547549
struct snd_soc_dai *cpu_dai,
@@ -570,12 +572,14 @@ int sdw_hda_dai_hw_free(struct snd_pcm_substream *substream,
570572

571573
return 0;
572574
}
575+
EXPORT_SYMBOL_NS(sdw_hda_dai_hw_free, SND_SOC_SOF_INTEL_HDA_COMMON);
573576

574577
int sdw_hda_dai_trigger(struct snd_pcm_substream *substream, int cmd,
575578
struct snd_soc_dai *cpu_dai)
576579
{
577580
return hda_dai_trigger(substream, cmd, cpu_dai);
578581
}
582+
EXPORT_SYMBOL_NS(sdw_hda_dai_trigger, SND_SOC_SOF_INTEL_HDA_COMMON);
579583

580584
static int hda_dai_suspend(struct hdac_bus *bus)
581585
{
@@ -690,6 +694,7 @@ void hda_set_dai_drv_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *ops)
690694
ipc4_data->nhlt = intel_nhlt_init(sdev->dev);
691695
}
692696
}
697+
EXPORT_SYMBOL_NS(hda_set_dai_drv_ops, SND_SOC_SOF_INTEL_HDA_COMMON);
693698

694699
void hda_ops_free(struct snd_sof_dev *sdev)
695700
{
@@ -855,6 +860,7 @@ struct snd_soc_dai_driver skl_dai[] = {
855860
},
856861
#endif
857862
};
863+
EXPORT_SYMBOL_NS(skl_dai, SND_SOC_SOF_INTEL_HDA_COMMON);
858864

859865
int hda_dsp_dais_suspend(struct snd_sof_dev *sdev)
860866
{

0 commit comments

Comments
 (0)