Skip to content

enable CometLake rt5682 evaluate board#535

Closed
zhuyingjiang wants to merge 1 commit intothesofproject:topic/sof-devfrom
zhuyingjiang:topic/enable-cml-rt5682-evaluate-board
Closed

enable CometLake rt5682 evaluate board#535
zhuyingjiang wants to merge 1 commit intothesofproject:topic/sof-devfrom
zhuyingjiang:topic/enable-cml-rt5682-evaluate-board

Conversation

@zhuyingjiang
Copy link
Copy Markdown

The CometLake use a rt5682 codec, which has analog pipeline, DMIC
and HDMI pipelines. This is the machine driver for it. Also this
machine driver can be modified to the intel generic machine driver
for RVP with rt5682.
This fix #514
Signed-off-by: Zhu Yingjiang yingjiang.zhu@linux.intel.com

The CometLake use a rt5682 codec, which has analog pipeline, DMIC
and HDMI pipelines. This is the machine driver for it. Also this
machine driver can be modified to the intel generic machine driver
for RVP with rt5682.

Signed-off-by: Zhu Yingjiang <yingjiang.zhu@linux.intel.com>
Copy link
Copy Markdown
Collaborator

@bardliao bardliao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove platform specific naming such as cml, cometlake... and rename it to a generic name if the driver is going to be used for different platforms. How about "sof_rt5682"?

CML_DPCM_AUDIO_HDMI1_PB,
CML_DPCM_AUDIO_HDMI2_PB,
CML_DPCM_AUDIO_HDMI3_PB,
};
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this enum for?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is all copy/paste stuff that's irrelevant for SOF. please only add what you actually test.

.owner = THIS_MODULE,
.dai_link = cometlake_dais,
.num_links = ARRAY_SIZE(cometlake_dais),
.fully_routed = false,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer to add dapm_routes and set fully_routed = true.

.cpu_dai_name = "iDisp1 Pin",
.codec_name = "ehdaudio0D2",
.codec_dai_name = "intel-hdmi-hifi1",
.platform_name = "0000:00:05.0",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the platform_name correct? Can we just set it to "sof-audio" if the machine driver is only used by SOF?

.be_hw_params_fixup = cometlake_dmic_fixup,
.dpcm_capture = 1,
.no_pcm = 1,
},
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add "#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC)" if the machine driver is going to be used for different platforms? So that we can use it in a platform without HDMI supported.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we need to figure out the usage of platform_name, it's inconsistent and caused issues discussed on alsa-devel

ret = snd_soc_card_jack_new(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&ctx->cometlake_headset, NULL, 0);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need SND_JACK_LINEOUT? It seems there is no Line out on rt5682 codec,

dev_err(rtd->dev, "set TDM slot err:%d\n", ret);
return ret;
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we need to support different sampling rate, we will need to set pll here.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is useless for SOF.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@plbossart Sorry, did you mean snd_soc_dai_set_tdm_slot() is useless? It is embarrassed that we need to call snd_soc_dai_set_tdm_slot() to set the slot width (channel length) of rt5682 even we don't use tdm.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry, please ignore my comment, I was confused with some old SST code where the set_tdm_slot if used for the cpu_dai. This should be the same as in the existing glk_rt5682....c

/*
* set BE channel constraint as user FE channels
*/
channels->min = channels->max = 4;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it necessary to fix the channels to 4?

@zhuyingjiang
Copy link
Copy Markdown
Author

Please remove platform specific naming such as cml, cometlake... and rename it to a generic name if the driver is going to be used for different platforms. How about "sof_rt5682"?

How about "intel_rvp_rt5682", or "sof_rvp_rt5682" @bardliao @mengdonglin

Copy link
Copy Markdown
Member

@plbossart plbossart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove all the parts that are cAVS-specific. We only care about SOF at this point.
Also please make this generic so that we can reuse this machine driver on other development platforms. Nothing in there is CML specific - except for the clock settings.


endif ## SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC || SND_SOC_SOF_HDA_AUDIO_CODEC

if SND_SOC_INTEL_CNL || (SND_SOC_SOF_CANNONLAKE && SND_SOC_SOF_HDA_LINK)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't test the cAVS driver so this should be SOF only (same as PCM512x)


if SND_SOC_INTEL_CNL || (SND_SOC_SOF_CANNONLAKE && SND_SOC_SOF_HDA_LINK)
config SND_SOC_INTEL_CML_RT5682_MACH
tristate "Cometlake with rt5682 I2S mode"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's specific about CML? We could be using this driver on other platforms, and in fact there is a plan to use rt5682 as a replacement for rt5651 so could be using this on up2 as well.

CML_DPCM_AUDIO_HDMI1_PB,
CML_DPCM_AUDIO_HDMI2_PB,
CML_DPCM_AUDIO_HDMI3_PB,
};
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is all copy/paste stuff that's irrelevant for SOF. please only add what you actually test.


/* set SSP to 24 bit */
snd_mask_none(fmt);
snd_mask_set(fmt, SNDRV_PCM_FORMAT_S24_LE);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

snd_mask_set_format

dev_err(rtd->dev, "set TDM slot err:%d\n", ret);
return ret;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is useless for SOF.

.init = cometlake_rt5682_codec_init,
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBS_CFS,
.ignore_pmdown_time = 1,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the format is specific by topology in SOF

.be_hw_params_fixup = cometlake_dmic_fixup,
.dpcm_capture = 1,
.no_pcm = 1,
},
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we need to figure out the usage of platform_name, it's inconsistent and caused issues discussed on alsa-devel

.chip_info = &cnl_chip_info,
.nocodec_fw_filename = "intel/sof-cnl.ri",
.nocodec_tplg_filename = "intel/sof-cnl.tplg",
.nocodec_tplg_filename = "intel/sof-cnl-nocodec.tplg",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

separate PR

@wenqingfu
Copy link
Copy Markdown

How about "intel_rvp_rt5682", or "sof_rvp_rt5682"

there is no need for 'rvp' in the middle, it's meaningless to people who don't know what it stands for.

@plbossart
Copy link
Copy Markdown
Member

maybe all machine drivers supporting SOF only should really be tagged as such with sof_xyz, where xyz is based on codec/speaker amp hints. We'd need however to make sure HDMI can be commented out to make sure it's reusable even with legacy platforms where HDMI does not exist (as done for pcm512x)

@zhuyingjiang
Copy link
Copy Markdown
Author

Close this since bard opened #553

plbossart pushed a commit that referenced this pull request Sep 16, 2020
Move all allocations outside of the regulator_lock()ed section.

======================================================
WARNING: possible circular locking dependency detected
5.7.13+ #535 Not tainted
------------------------------------------------------
f2fs_discard-179:7/702 is trying to acquire lock:
c0e5d920 (regulator_list_mutex){+.+.}-{3:3}, at: regulator_lock_dependent+0x54/0x2c0

but task is already holding lock:
cb95b080 (&dcc->cmd_lock){+.+.}-{3:3}, at: __issue_discard_cmd+0xec/0x5f8

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

[...]

-> #3 (fs_reclaim){+.+.}-{0:0}:
       fs_reclaim_acquire.part.11+0x40/0x50
       fs_reclaim_acquire+0x24/0x28
       __kmalloc_track_caller+0x54/0x218
       kstrdup+0x40/0x5c
       create_regulator+0xf4/0x368
       regulator_resolve_supply+0x1a0/0x200
       regulator_register+0x9c8/0x163c

[...]

other info that might help us debug this:

Chain exists of:
  regulator_list_mutex --> &sit_i->sentry_lock --> &dcc->cmd_lock

[...]

Fixes: f8702f9 ("regulator: core: Use ww_mutex for regulators locking")
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/6eebc99b2474f4ffaa0405b15178ece0e7e4f608.1597195321.git.mirq-linux@rere.qmqm.pl
Signed-off-by: Mark Brown <broonie@kernel.org>
bardliao pushed a commit to bardliao/linux that referenced this pull request Oct 31, 2024
The altmode device release refers to its parent device, but without keeping
a reference to it.

When registering the altmode, get a reference to the parent and put it in
the release function.

Before this fix, when using CONFIG_DEBUG_KOBJECT_RELEASE, we see issues
like this:

[   43.572860] kobject: 'port0.0' (ffff8880057ba008): kobject_release, parent 0000000000000000 (delayed 3000)
[   43.573532] kobject: 'port0.1' (ffff8880057bd008): kobject_release, parent 0000000000000000 (delayed 1000)
[   43.574407] kobject: 'port0' (ffff8880057b9008): kobject_release, parent 0000000000000000 (delayed 3000)
[   43.575059] kobject: 'port1.0' (ffff8880057ca008): kobject_release, parent 0000000000000000 (delayed 4000)
[   43.575908] kobject: 'port1.1' (ffff8880057c9008): kobject_release, parent 0000000000000000 (delayed 4000)
[   43.576908] kobject: 'typec' (ffff8880062dbc00): kobject_release, parent 0000000000000000 (delayed 4000)
[   43.577769] kobject: 'port1' (ffff8880057bf008): kobject_release, parent 0000000000000000 (delayed 3000)
[   46.612867] ==================================================================
[   46.613402] BUG: KASAN: slab-use-after-free in typec_altmode_release+0x38/0x129
[   46.614003] Read of size 8 at addr ffff8880057b9118 by task kworker/2:1/48
[   46.614538]
[   46.614668] CPU: 2 UID: 0 PID: 48 Comm: kworker/2:1 Not tainted 6.12.0-rc1-00138-gedbae730ad31 thesofproject#535
[   46.615391] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
[   46.616042] Workqueue: events kobject_delayed_cleanup
[   46.616446] Call Trace:
[   46.616648]  <TASK>
[   46.616820]  dump_stack_lvl+0x5b/0x7c
[   46.617112]  ? typec_altmode_release+0x38/0x129
[   46.617470]  print_report+0x14c/0x49e
[   46.617769]  ? rcu_read_unlock_sched+0x56/0x69
[   46.618117]  ? __virt_addr_valid+0x19a/0x1ab
[   46.618456]  ? kmem_cache_debug_flags+0xc/0x1d
[   46.618807]  ? typec_altmode_release+0x38/0x129
[   46.619161]  kasan_report+0x8d/0xb4
[   46.619447]  ? typec_altmode_release+0x38/0x129
[   46.619809]  ? process_scheduled_works+0x3cb/0x85f
[   46.620185]  typec_altmode_release+0x38/0x129
[   46.620537]  ? process_scheduled_works+0x3cb/0x85f
[   46.620907]  device_release+0xaf/0xf2
[   46.621206]  kobject_delayed_cleanup+0x13b/0x17a
[   46.621584]  process_scheduled_works+0x4f6/0x85f
[   46.621955]  ? __pfx_process_scheduled_works+0x10/0x10
[   46.622353]  ? hlock_class+0x31/0x9a
[   46.622647]  ? lock_acquired+0x361/0x3c3
[   46.622956]  ? move_linked_works+0x46/0x7d
[   46.623277]  worker_thread+0x1ce/0x291
[   46.623582]  ? __kthread_parkme+0xc8/0xdf
[   46.623900]  ? __pfx_worker_thread+0x10/0x10
[   46.624236]  kthread+0x17e/0x190
[   46.624501]  ? kthread+0xfb/0x190
[   46.624756]  ? __pfx_kthread+0x10/0x10
[   46.625015]  ret_from_fork+0x20/0x40
[   46.625268]  ? __pfx_kthread+0x10/0x10
[   46.625532]  ret_from_fork_asm+0x1a/0x30
[   46.625805]  </TASK>
[   46.625953]
[   46.626056] Allocated by task 678:
[   46.626287]  kasan_save_stack+0x24/0x44
[   46.626555]  kasan_save_track+0x14/0x2d
[   46.626811]  __kasan_kmalloc+0x3f/0x4d
[   46.627049]  __kmalloc_noprof+0x1bf/0x1f0
[   46.627362]  typec_register_port+0x23/0x491
[   46.627698]  cros_typec_probe+0x634/0xbb6
[   46.628026]  platform_probe+0x47/0x8c
[   46.628311]  really_probe+0x20a/0x47d
[   46.628605]  device_driver_attach+0x39/0x72
[   46.628940]  bind_store+0x87/0xd7
[   46.629213]  kernfs_fop_write_iter+0x1aa/0x218
[   46.629574]  vfs_write+0x1d6/0x29b
[   46.629856]  ksys_write+0xcd/0x13b
[   46.630128]  do_syscall_64+0xd4/0x139
[   46.630420]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   46.630820]
[   46.630946] Freed by task 48:
[   46.631182]  kasan_save_stack+0x24/0x44
[   46.631493]  kasan_save_track+0x14/0x2d
[   46.631799]  kasan_save_free_info+0x3f/0x4d
[   46.632144]  __kasan_slab_free+0x37/0x45
[   46.632474]  kfree+0x1d4/0x252
[   46.632725]  device_release+0xaf/0xf2
[   46.633017]  kobject_delayed_cleanup+0x13b/0x17a
[   46.633388]  process_scheduled_works+0x4f6/0x85f
[   46.633764]  worker_thread+0x1ce/0x291
[   46.634065]  kthread+0x17e/0x190
[   46.634324]  ret_from_fork+0x20/0x40
[   46.634621]  ret_from_fork_asm+0x1a/0x30

Fixes: 8a37d87 ("usb: typec: Bus type for alternate modes")
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20241004123738.2964524-1-cascardo@igalia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Write a generic SOF machine driver and topology for Intel RVP to support HDMI/DP audio, ALC5682 and DMIC

4 participants