Re: Patch "ASoC: qcom: Fix number of HDMI RDMA channels on sc7180" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Quoting Sasha Levin (2021-02-01 08:52:31)
> This is a note to let you know that I've just added the patch titled
> 
>     ASoC: qcom: Fix number of HDMI RDMA channels on sc7180
> 
> to the 5.10-stable tree which can be found at:
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> 
> The filename of the patch is:
>      asoc-qcom-fix-number-of-hdmi-rdma-channels-on-sc7180.patch
> and it can be found in the queue-5.10 subdirectory.
> 
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@xxxxxxxxxxxxxxx> know about it.
> 

Please drop this from stable queue. It will be reverted shortly and
replaced with a proper patch. See [2] for more info.

Quote:
> In my opinion, It 's better not to apply this patch.
> 
> I will post patch with changing size in sc7180.dtsi file.

After further discussion with Srinivasa it turns out the dtsi file is
correct, but the regmap size is wrong in a different way and the valid
registers functions are also wrong. We'll be sending a proper fix this
week.

Thanks,
Stephen

[2] https://lore.kernel.org/alsa-devel/89cc3dfb-35da-3498-b126-b440c91f9a45@xxxxxxxxxxxxxx/

> 
> 
> commit f3d3274aa72af6366a4cfef1a5a51154aca8cd69
> Author: Stephen Boyd <swboyd@xxxxxxxxxxxx>
> Date:   Fri Jan 15 12:33:29 2021 -0800
> 
>     ASoC: qcom: Fix number of HDMI RDMA channels on sc7180
>     
>     [ Upstream commit 7dfe20ee92f681ab1342015254ddb77a18f40cdb ]
>     
>     Suspending/resuming with an HDMI dongle attached leads to crashes from
>     an audio regmap.
>     
>      Unable to handle kernel paging request at virtual address ffffffc018068000
>      Mem abort info:
>        ESR = 0x96000047
>        EC = 0x25: DABT (current EL), IL = 32 bits
>        SET = 0, FnV = 0
>        EA = 0, S1PTW = 0
>      Data abort info:
>        ISV = 0, ISS = 0x00000047
>        CM = 0, WnR = 1
>      swapper pgtable: 4k pages, 39-bit VAs, pgdp=0000000081b12000
>      [ffffffc018068000] pgd=0000000275d14003, pud=0000000275d14003, pmd=000000026365d003, pte=0000000000000000
>      Internal error: Oops: 96000047 [#1] PREEMPT SMP
>      Call trace:
>       regmap_mmio_write32le+0x2c/0x40
>       regmap_mmio_write+0x48/0x6c
>       _regmap_bus_reg_write+0x34/0x44
>       _regmap_write+0x100/0x150
>       regcache_default_sync+0xc0/0x138
>       regcache_sync+0x188/0x26c
>       lpass_platform_pcmops_resume+0x48/0x54 [snd_soc_lpass_platform]
>       snd_soc_component_resume+0x28/0x40
>       soc_resume_deferred+0x6c/0x178
>       process_one_work+0x208/0x3c8
>       worker_thread+0x23c/0x3e8
>       kthread+0x144/0x178
>       ret_from_fork+0x10/0x18
>      Code: d503201f d50332bf f94002a8 8b344108 (b9000113)
>     
>     I can reliably reproduce this problem by running 'tail' on the registers
>     file in debugfs for the hdmi regmap.
>     
>      # tail /sys/kernel/debug/regmap/62d87000.lpass-lpass_hdmi/registers
>      [   84.658733] Unable to handle kernel paging request at virtual address ffffffd0128e800c
>     
>     This crash happens because we're trying to read registers from the
>     regmap beyond the length of the mapping created by ioremap().
>     
>     The number of hdmi_rdma_channels determines the size of the regmap via
>     this code in sound/soc/qcom/lpass-cpu.c:
>     
>       lpass_hdmi_regmap_config.max_register = LPAIF_HDMI_RDMAPER_REG(variant, variant->hdmi_rdma_channels);
>     
>     According to debugfs the size of the regmap is 0x68010 but according to
>     the DTS file posted in [1] the size is only 0x68000 (see the first reg
>     property of the lpass_cpu node). Let's change the number of channels to
>     be 3 instead of 4 so the math works out to have a max register of
>     0x67010, nicely fitting inside of the region size of 0x68000.
>     
>     Note: I tried to bump up the size of the register region to the next
>     page to include the 0x68010 register but then the tail command caused
>     SErrors with an async abort, implying that the register region doesn't
>     exist or it isn't clocked because the bus is telling us that the
>     register read failed. I reduce the number of channels and played audio
>     through the HDMI channel and it kept working so I think this is correct.
>     
>     Fixes: 2ad63dc8df6b ("ASoC: qcom: sc7180: Add support for audio over DP")
>     Link: https://lore.kernel.org/r/1601448168-18396-2-git-send-email-srivasam@xxxxxxxxxxxxxx [1]
>     Cc: V Sujith Kumar Reddy <vsujithk@xxxxxxxxxxxxxx>
>     Cc: Srinivasa Rao <srivasam@xxxxxxxxxxxxxx>
>     Cc: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx>
>     Cc: Cheng-Yi Chiang <cychiang@xxxxxxxxxxxx>
>     Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx>
>     Link: https://lore.kernel.org/r/20210115203329.846824-1-swboyd@xxxxxxxxxxxx
>     Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
>     Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> 
> diff --git a/sound/soc/qcom/lpass-sc7180.c b/sound/soc/qcom/lpass-sc7180.c
> index c647e627897a2..c33da7faaf913 100644
> --- a/sound/soc/qcom/lpass-sc7180.c
> +++ b/sound/soc/qcom/lpass-sc7180.c
> @@ -170,7 +170,7 @@ static struct lpass_variant sc7180_data = {
>         .rdma_channels          = 5,
>         .hdmi_rdma_reg_base             = 0x64000,
>         .hdmi_rdma_reg_stride   = 0x1000,
> -       .hdmi_rdma_channels             = 4,
> +       .hdmi_rdma_channels             = 3,
>         .dmactl_audif_start     = 1,
>         .wrdma_reg_base         = 0x18000,
>         .wrdma_reg_stride       = 0x1000,




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux