ASoC: tegra: sort the reg_defaults tables
Subsystems (4)
cover ASoC: tegra: sort the reg_defaults tables
reg_defaults must be sorted by ascending register address, since regcache_lookup_reg() locates entries in it with bsearch(). When a table is not sorted, bsearch() cannot find the entries which follow a descending step, so regcache_reg_needs_sync() falls back to reporting that a sync is needed for them. Those registers are then written to the device on every regcache_sync() even when they were never touched.
See commit fd80df352ba1 ("regcache: Add support for sorting defaults arrays") for the same problem in a different context.
The series is based on broonie/for-linus (05eebef3c7b2).
Affected tables:
tegra210_i2s_reg_defaults 2 of 8 entries unreachable tegra264_i2s_reg_defaults 4 of 9 entries unreachable tegra210_mixer_reg_defaults 1 entry unreachable
Peter Ujfalusi (3):
ASoC: tegra210_i2s: sort the register default table
ASoC: tegra210_i2s: sort the Tegra264 register default table
ASoC: tegra210_mixer: sort the register default table
sound/soc/tegra/tegra210_i2s.c | 8 ++++---- sound/soc/tegra/tegra210_mixer.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-)
Signature · 1 line
2.55.0
PATCH 1/3 ASoC: tegra210_i2s: sort the register default table
reg_defaults must be sorted by ascending register address, as regcache_lookup_reg() locates entries in it with bsearch(). See commit fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
TEGRA210_I2S_ENABLE (0x80) is listed after TEGRA210_I2S_CG (0x88) and TEGRA210_I2S_TIMING (0xa4), so both it and TEGRA210_I2S_TIMING are unreachable. regcache_reg_needs_sync() then cannot compare them against their default and reports that a sync is needed, so they are written to the device on every regcache_sync() even when they were never touched.
Sort the table by register address.
--- sound/soc/tegra/tegra210_i2s.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/tegra/tegra210_i2s.c +1 -1
@@ -23,9 +23,9 @@ static const struct reg_default tegra210_i2s_reg_defaults[] = { { TEGRA210_I2S_RX_CIF_CTRL, 0x00007700 }, { TEGRA210_I2S_TX_INT_MASK, 0x00000003 }, { TEGRA210_I2S_TX_CIF_CTRL, 0x00007700 }, + { TEGRA210_I2S_ENABLE, 0x1 }, { TEGRA210_I2S_CG, 0x1 }, { TEGRA210_I2S_TIMING, 0x0000001f }, - { TEGRA210_I2S_ENABLE, 0x1 },/* * Below update does not have any effect on Tegra186 and Tegra194. * On Tegra210, I2S4 has "i2s4a" and "i2s4b" pins and below update
Signature · 1 line
2.55.0
PATCH 2/3 ASoC: tegra210_i2s: sort the Tegra264 register default table
In reply to Peter Ujfalusireg_defaults must be sorted by ascending register address, as regcache_lookup_reg() locates entries in it with bsearch(). See commit fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
TEGRA264_I2S_ENABLE (0x100), TEGRA264_I2S_RX_FIFO_WR_ACCESS_MODE (0x30) and TEGRA264_I2S_TX_FIFO_RD_ACCESS_MODE (0xb0) are listed at the end of the table, after TEGRA264_I2S_TIMING (0x130), which leaves 4 of the 9 entries unreachable. regcache_reg_needs_sync() then cannot compare them against their default and reports that a sync is needed, so they are written to the device on every regcache_sync() even when they were never touched.
Sort the table by register address.
--- sound/soc/tegra/tegra210_i2s.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
sound/soc/tegra/tegra210_i2s.c +3 -3
@@ -38,13 +38,13 @@ static const struct reg_default tegra210_i2s_reg_defaults[] = {static const struct reg_default tegra264_i2s_reg_defaults[] = { {TEGRA210_I2S_RX_INT_MASK ,0x00000003 }, {TEGRA210_I2S_RX_CIF_CTRL ,0x00003f00 }, + {TEGRA264_I2S_RX_FIFO_WR_ACCESS_MODE ,0x1 }, {TEGRA264_I2S_TX_INT_MASK ,0x00000003 }, {TEGRA264_I2S_TX_CIF_CTRL ,0x00003f00 }, + {TEGRA264_I2S_TX_FIFO_RD_ACCESS_MODE ,0x1 }, + {TEGRA264_I2S_ENABLE ,0x1 }, {TEGRA264_I2S_CG ,0x1 }, {TEGRA264_I2S_TIMING ,0x0000001f }, - {TEGRA264_I2S_ENABLE ,0x1 }, - {TEGRA264_I2S_RX_FIFO_WR_ACCESS_MODE ,0x1 }, - {TEGRA264_I2S_TX_FIFO_RD_ACCESS_MODE ,0x1 }, }; static void tegra210_i2s_set_slot_ctrl(struct tegra210_i2s *i2s,
Signature · 1 line
2.55.0
PATCH 3/3 ASoC: tegra210_mixer: sort the register default table
In reply to Peter Ujfalusireg_defaults must be sorted by ascending register address, as regcache_lookup_reg() locates entries in it with bsearch(). See commit fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
TEGRA210_MIXER_ENABLE (0x400) is the last entry of the table, after TEGRA210_MIXER_PEAKM_RAM_CTRL (0x434), which makes it unreachable. regcache_reg_needs_sync() then cannot compare it against its default and reports that a sync is needed, so it is written to the device on every regcache_sync() even when it was never touched.
Sort the table by register address.
--- sound/soc/tegra/tegra210_mixer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/tegra/tegra210_mixer.c +1 -1
@@ -57,10 +57,10 @@ static const struct reg_default tegra210_mixer_reg_defaults[] = {MIXER_TX_REG_DEFAULTS (3 ),MIXER_TX_REG_DEFAULTS (4 ), + { TEGRA210_MIXER_ENABLE, 0x1 }, { TEGRA210_MIXER_CG, 0x00000001}, { TEGRA210_MIXER_GAIN_CFG_RAM_CTRL, 0x00004000}, { TEGRA210_MIXER_PEAKM_RAM_CTRL, 0x00004000}, - { TEGRA210_MIXER_ENABLE, 0x1 }, };/* Default gain parameters */
Signature · 1 line
2.55.0
Mark Brown
maintainerQuoted 10 lines · Peter Ujfalusi
ASoC: tegra: sort the
reg_defaultstables
reg_defaultsmust be sorted by ascending register address, sinceregcache_lookup_reg()locates entries in it withbsearch(). When a table is not sorted,bsearch()cannot find the entries which follow a descending step, soregcache_reg_needs_sync()falls back to reporting that a sync is needed for them. Those registers are then written to the device on everyregcache_sync()even when they were never touched.[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.3
Thanks!
[1/3] ASoC: tegra210_i2s: sort the register default table
https://git.kernel.org/broonie/sound/c/597273563d90 [2/3] ASoC: tegra210_i2s: sort the Tegra264 register default table https://git.kernel.org/broonie/sound/c/82da8df38800 [3/3] ASoC: tegra210_mixer: sort the register default table https://git.kernel.org/broonie/sound/c/f70bc276fc7f
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark