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,