* [PATCH RESEND v1 0/3] Fixes and cleanup for CS35L41 HDA
@ 2023-05-25 13:59 Stefan Binding
2023-05-25 13:59 ` [PATCH RESEND v1 1/3] ALSA: hda: cs35l41: Clean up Firmware Load Controls Stefan Binding
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Stefan Binding @ 2023-05-25 13:59 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai
Cc: alsa-devel, linux-kernel, patches, Stefan Binding
Several minor issues were found during additional testing and
static analysis. These patches fix these minor issues.
Stefan Binding (3):
ALSA: hda: cs35l41: Clean up Firmware Load Controls
ALSA: hda: cs35l41: Fix endian conversions
ALSA: hda/realtek: Delete cs35l41 component master during free
sound/pci/hda/cs35l41_hda.c | 40 ++++++++++++++++-------------------
sound/pci/hda/patch_realtek.c | 2 ++
2 files changed, 20 insertions(+), 22 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH RESEND v1 1/3] ALSA: hda: cs35l41: Clean up Firmware Load Controls 2023-05-25 13:59 [PATCH RESEND v1 0/3] Fixes and cleanup for CS35L41 HDA Stefan Binding @ 2023-05-25 13:59 ` Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 3/3] ALSA: hda/realtek: Delete cs35l41 component master during free Stefan Binding 2 siblings, 0 replies; 8+ messages in thread From: Stefan Binding @ 2023-05-25 13:59 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: alsa-devel, linux-kernel, patches, Stefan Binding Ensure Firmware Load control and Firmware Type control returns 1 when the value changes. Remove fw_mutex from firmware load control put, since it is unnecessary, and prevents any possibility of mutex inversion. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> --- sound/pci/hda/cs35l41_hda.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index b5210abb5141f..d100189e15b83 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -835,34 +835,26 @@ static int cs35l41_fw_load_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct cs35l41_hda *cs35l41 = snd_kcontrol_chip(kcontrol); - unsigned int ret = 0; - - mutex_lock(&cs35l41->fw_mutex); if (cs35l41->request_fw_load == ucontrol->value.integer.value[0]) - goto err; + return 0; if (cs35l41->fw_request_ongoing) { dev_dbg(cs35l41->dev, "Existing request not complete\n"); - ret = -EBUSY; - goto err; + return -EBUSY; } /* Check if playback is ongoing when initial request is made */ if (cs35l41->playback_started) { dev_err(cs35l41->dev, "Cannot Load/Unload firmware during Playback\n"); - ret = -EBUSY; - goto err; + return -EBUSY; } cs35l41->fw_request_ongoing = true; cs35l41->request_fw_load = ucontrol->value.integer.value[0]; schedule_work(&cs35l41->fw_load_work); -err: - mutex_unlock(&cs35l41->fw_mutex); - - return ret; + return 1; } static int cs35l41_fw_type_ctl_get(struct snd_kcontrol *kcontrol, @@ -881,8 +873,12 @@ static int cs35l41_fw_type_ctl_put(struct snd_kcontrol *kcontrol, struct cs35l41_hda *cs35l41 = snd_kcontrol_chip(kcontrol); if (ucontrol->value.enumerated.item[0] < HDA_CS_DSP_NUM_FW) { - cs35l41->firmware_type = ucontrol->value.enumerated.item[0]; - return 0; + if (cs35l41->firmware_type != ucontrol->value.enumerated.item[0]) { + cs35l41->firmware_type = ucontrol->value.enumerated.item[0]; + return 1; + } else { + return 0; + } } return -EINVAL; -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions 2023-05-25 13:59 [PATCH RESEND v1 0/3] Fixes and cleanup for CS35L41 HDA Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 1/3] ALSA: hda: cs35l41: Clean up Firmware Load Controls Stefan Binding @ 2023-05-25 13:59 ` Stefan Binding 2023-06-05 7:21 ` Takashi Iwai 2023-05-25 13:59 ` [PATCH RESEND v1 3/3] ALSA: hda/realtek: Delete cs35l41 component master during free Stefan Binding 2 siblings, 1 reply; 8+ messages in thread From: Stefan Binding @ 2023-05-25 13:59 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: alsa-devel, linux-kernel, patches, Stefan Binding Found during static analysis, ensure variables are correct types before endian conversion. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> --- sound/pci/hda/cs35l41_hda.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c index d100189e15b83..b02462ae21f04 100644 --- a/sound/pci/hda/cs35l41_hda.c +++ b/sound/pci/hda/cs35l41_hda.c @@ -308,8 +308,8 @@ static int cs35l41_request_firmware_files(struct cs35l41_hda *cs35l41, } #if IS_ENABLED(CONFIG_EFI) -static int cs35l41_apply_calibration(struct cs35l41_hda *cs35l41, unsigned int ambient, - unsigned int r0, unsigned int status, unsigned int checksum) +static int cs35l41_apply_calibration(struct cs35l41_hda *cs35l41, __be32 ambient, __be32 r0, + __be32 status, __be32 checksum) { int ret; @@ -379,10 +379,10 @@ static int cs35l41_save_calibration(struct cs35l41_hda *cs35l41) /* Calibration can only be applied whilst the DSP is not running */ ret = cs35l41_apply_calibration(cs35l41, - cpu_to_be32(cl->calAmbient), - cpu_to_be32(cl->calR), - cpu_to_be32(cl->calStatus), - cpu_to_be32(cl->calR + 1)); + (__be32)cpu_to_be32(cl->calAmbient), + (__be32)cpu_to_be32(cl->calR), + (__be32)cpu_to_be32(cl->calStatus), + (__be32)cpu_to_be32(cl->calR + 1)); } } vfree(data); @@ -745,7 +745,7 @@ static int cs35l41_runtime_resume(struct device *dev) static int cs35l41_smart_amp(struct cs35l41_hda *cs35l41) { - int halo_sts; + __be32 halo_sts; int ret; ret = cs35l41_init_dsp(cs35l41); @@ -773,7 +773,7 @@ static int cs35l41_smart_amp(struct cs35l41_hda *cs35l41) &halo_sts, sizeof(halo_sts)); if (ret) { - dev_err(cs35l41->dev, "Timeout waiting for HALO Core to start. State: %d\n", + dev_err(cs35l41->dev, "Timeout waiting for HALO Core to start. State: %u\n", halo_sts); goto clean_dsp; } -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions 2023-05-25 13:59 ` [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions Stefan Binding @ 2023-06-05 7:21 ` Takashi Iwai 2023-06-05 12:50 ` Stefan Binding 0 siblings, 1 reply; 8+ messages in thread From: Takashi Iwai @ 2023-06-05 7:21 UTC (permalink / raw) To: Stefan Binding Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, patches On Thu, 25 May 2023 15:59:54 +0200, Stefan Binding wrote: > > @@ -379,10 +379,10 @@ static int cs35l41_save_calibration(struct cs35l41_hda *cs35l41) > > /* Calibration can only be applied whilst the DSP is not running */ > ret = cs35l41_apply_calibration(cs35l41, > - cpu_to_be32(cl->calAmbient), > - cpu_to_be32(cl->calR), > - cpu_to_be32(cl->calStatus), > - cpu_to_be32(cl->calR + 1)); > + (__be32)cpu_to_be32(cl->calAmbient), > + (__be32)cpu_to_be32(cl->calR), > + (__be32)cpu_to_be32(cl->calStatus), > + (__be32)cpu_to_be32(cl->calR + 1)); Do we really need those cast? Even if yes, it must be with __force prefix for the endian cast in general. thanks, Takashi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions 2023-06-05 7:21 ` Takashi Iwai @ 2023-06-05 12:50 ` Stefan Binding 2023-06-05 13:17 ` Takashi Iwai 0 siblings, 1 reply; 8+ messages in thread From: Stefan Binding @ 2023-06-05 12:50 UTC (permalink / raw) To: Takashi Iwai Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, patches Hi Takashi, On 05/06/2023 08:21, Takashi Iwai wrote: > On Thu, 25 May 2023 15:59:54 +0200, > Stefan Binding wrote: >> @@ -379,10 +379,10 @@ static int cs35l41_save_calibration(struct cs35l41_hda *cs35l41) >> >> /* Calibration can only be applied whilst the DSP is not running */ >> ret = cs35l41_apply_calibration(cs35l41, >> - cpu_to_be32(cl->calAmbient), >> - cpu_to_be32(cl->calR), >> - cpu_to_be32(cl->calStatus), >> - cpu_to_be32(cl->calR + 1)); >> + (__be32)cpu_to_be32(cl->calAmbient), >> + (__be32)cpu_to_be32(cl->calR), >> + (__be32)cpu_to_be32(cl->calStatus), >> + (__be32)cpu_to_be32(cl->calR + 1)); > Do we really need those cast? Even if yes, it must be with __force > prefix for the endian cast in general. These casts were added because we found some warnings when we ran the static analyzer sparse locally. I think these warnings are very minor, and we can drop this patch if you prefer? Thanks, Stefan > > thanks, > > Takashi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions 2023-06-05 12:50 ` Stefan Binding @ 2023-06-05 13:17 ` Takashi Iwai 2023-06-05 15:23 ` Stefan Binding 0 siblings, 1 reply; 8+ messages in thread From: Takashi Iwai @ 2023-06-05 13:17 UTC (permalink / raw) To: Stefan Binding Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, patches On Mon, 05 Jun 2023 14:50:54 +0200, Stefan Binding wrote: > > Hi Takashi, > > On 05/06/2023 08:21, Takashi Iwai wrote: > > On Thu, 25 May 2023 15:59:54 +0200, > > Stefan Binding wrote: > >> @@ -379,10 +379,10 @@ static int cs35l41_save_calibration(struct cs35l41_hda *cs35l41) > >> /* Calibration can only be applied > >> whilst the DSP is not running */ > >> ret = cs35l41_apply_calibration(cs35l41, > >> - cpu_to_be32(cl->calAmbient), > >> - cpu_to_be32(cl->calR), > >> - cpu_to_be32(cl->calStatus), > >> - cpu_to_be32(cl->calR + 1)); > >> + (__be32)cpu_to_be32(cl->calAmbient), > >> + (__be32)cpu_to_be32(cl->calR), > >> + (__be32)cpu_to_be32(cl->calStatus), > >> + (__be32)cpu_to_be32(cl->calR + 1)); > > Do we really need those cast? Even if yes, it must be with __force > > prefix for the endian cast in general. > > These casts were added because we found some warnings when we ran the > static analyzer sparse locally. > I think these warnings are very minor, and we can drop this patch if > you prefer? The warnings must be bogus, or maybe pointing to other things? The cpu_to_be32() macro itself must return a __be32 value, hence it makes no sense to add an extra cast . If the static analysis still shows such a warning, it should be fixed differently -- either fix the analyzer or fix the cpu_to_be32() macro itself. The changes of the argument types to __be32 are fine. I'm arguing only about those unnecessary cast. thanks, Takashi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions 2023-06-05 13:17 ` Takashi Iwai @ 2023-06-05 15:23 ` Stefan Binding 0 siblings, 0 replies; 8+ messages in thread From: Stefan Binding @ 2023-06-05 15:23 UTC (permalink / raw) To: Takashi Iwai Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, patches Hi Takashi, On 05/06/2023 14:17, Takashi Iwai wrote: > On Mon, 05 Jun 2023 14:50:54 +0200, > Stefan Binding wrote: >> Hi Takashi, >> >> On 05/06/2023 08:21, Takashi Iwai wrote: >>> On Thu, 25 May 2023 15:59:54 +0200, >>> Stefan Binding wrote: >>>> @@ -379,10 +379,10 @@ static int cs35l41_save_calibration(struct cs35l41_hda *cs35l41) >>>> /* Calibration can only be applied >>>> whilst the DSP is not running */ >>>> ret = cs35l41_apply_calibration(cs35l41, >>>> - cpu_to_be32(cl->calAmbient), >>>> - cpu_to_be32(cl->calR), >>>> - cpu_to_be32(cl->calStatus), >>>> - cpu_to_be32(cl->calR + 1)); >>>> + (__be32)cpu_to_be32(cl->calAmbient), >>>> + (__be32)cpu_to_be32(cl->calR), >>>> + (__be32)cpu_to_be32(cl->calStatus), >>>> + (__be32)cpu_to_be32(cl->calR + 1)); >>> Do we really need those cast? Even if yes, it must be with __force >>> prefix for the endian cast in general. >> These casts were added because we found some warnings when we ran the >> static analyzer sparse locally. >> I think these warnings are very minor, and we can drop this patch if >> you prefer? > The warnings must be bogus, or maybe pointing to other things? > The cpu_to_be32() macro itself must return a __be32 value, hence it > makes no sense to add an extra cast . > > If the static analysis still shows such a warning, it should be fixed > differently -- either fix the analyzer or fix the cpu_to_be32() macro > itself. > > The changes of the argument types to __be32 are fine. I'm arguing > only about those unnecessary cast. You are correct, I double checked and the cast is not needed. I'll push up a v2. Thanks, Stefan > > > thanks, > > Takashi ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH RESEND v1 3/3] ALSA: hda/realtek: Delete cs35l41 component master during free 2023-05-25 13:59 [PATCH RESEND v1 0/3] Fixes and cleanup for CS35L41 HDA Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 1/3] ALSA: hda: cs35l41: Clean up Firmware Load Controls Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions Stefan Binding @ 2023-05-25 13:59 ` Stefan Binding 2 siblings, 0 replies; 8+ messages in thread From: Stefan Binding @ 2023-05-25 13:59 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: alsa-devel, linux-kernel, patches, Stefan Binding This ensures that the driver is properly cleaned up when freed. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> --- sound/pci/hda/patch_realtek.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 7b5f194513c7b..e3774903918fe 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -6757,6 +6757,8 @@ static void cs35l41_generic_fixup(struct hda_codec *cdc, int action, const char else spec->gen.pcm_playback_hook = comp_generic_playback_hook; break; + case HDA_FIXUP_ACT_FREE: + component_master_del(dev, &comp_master_ops); } } -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-06-05 15:25 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-05-25 13:59 [PATCH RESEND v1 0/3] Fixes and cleanup for CS35L41 HDA Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 1/3] ALSA: hda: cs35l41: Clean up Firmware Load Controls Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 2/3] ALSA: hda: cs35l41: Fix endian conversions Stefan Binding 2023-06-05 7:21 ` Takashi Iwai 2023-06-05 12:50 ` Stefan Binding 2023-06-05 13:17 ` Takashi Iwai 2023-06-05 15:23 ` Stefan Binding 2023-05-25 13:59 ` [PATCH RESEND v1 3/3] ALSA: hda/realtek: Delete cs35l41 component master during free Stefan Binding
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.