ASoC: tegra: Sort ADMAIF register defaults

Commit 4b05ccb17f ("regcache: Sort the local copy of an unsorted
reg_defaults array") exposed an issue in the Tegra ADMAIF driver and now
the following warning is observed:

 tegra210-admaif 290f000.admaif: Driver needs fixing: Unsorted
  reg_defaults, sorting the copy

This warning occurs because register defaults in the structures
tegra186_admaif_reg_defaults and tegra264_admaif_reg_defaults are not
specified in ascending order which is required by regmap. Fix this by
sorting the register defaults according to their address. Note that in
order to do this it is necessary to split the macro ADMAIF_REG_DEFAULTS
into separate RX and TX macros to the RX and TX registers.

Fixes: f74028e159 ("ASoC: tegra: Add Tegra210 based ADMAIF driver")
Cc: stable@vger.kernel.org
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://patch.msgid.link/20260821153734.158426-4-jonathanh@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Jon Hunter 2026-08-21 16:37:33 +01:00 committed by Mark Brown
parent 5442b8093a
commit 18d48bfd1b
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -26,94 +26,162 @@
#define CH_RX_REG(reg, id) CH_REG(admaif->soc_data->rx_base, reg, id)
#define REG_DEFAULTS(id, rx_ctrl, tx_ctrl, tx_base, rx_base, cif_ctrl) \
#define RX_REG_DEFAULTS(id, rx_ctrl, rx_base, cif_ctrl) \
{ CH_REG(rx_base, TEGRA_ADMAIF_RX_INT_MASK, id), 0x00000001 }, \
{ CH_REG(rx_base, TEGRA_ADMAIF_CH_ACIF_RX_CTRL, id), cif_ctrl }, \
{ CH_REG(rx_base, TEGRA_ADMAIF_RX_FIFO_CTRL, id), rx_ctrl }, \
{ CH_REG(rx_base, TEGRA_ADMAIF_RX_FIFO_CTRL, id), rx_ctrl }
#define TX_REG_DEFAULTS(id, tx_ctrl, tx_base, cif_ctrl) \
{ CH_REG(tx_base, TEGRA_ADMAIF_TX_INT_MASK, id), 0x00000001 }, \
{ CH_REG(tx_base, TEGRA_ADMAIF_CH_ACIF_TX_CTRL, id), cif_ctrl }, \
{ CH_REG(tx_base, TEGRA_ADMAIF_TX_FIFO_CTRL, id), tx_ctrl }
#define ADMAIF_REG_DEFAULTS(id, chip) \
REG_DEFAULTS((id) - 1, \
#define ADMAIF_RX_REG_DEFAULTS(id, chip) \
RX_REG_DEFAULTS((id) - 1, \
chip ## _ADMAIF_RX ## id ## _FIFO_CTRL_REG_DEFAULT, \
chip ## _ADMAIF_TX ## id ## _FIFO_CTRL_REG_DEFAULT, \
chip ## _ADMAIF_TX_BASE, \
chip ## _ADMAIF_RX_BASE, \
chip ## _ADMAIF_CIF_REG_DEFAULT)
#define ADMAIF_TX_REG_DEFAULTS(id, chip) \
TX_REG_DEFAULTS((id) - 1, \
chip ## _ADMAIF_TX ## id ## _FIFO_CTRL_REG_DEFAULT, \
chip ## _ADMAIF_TX_BASE, \
chip ## _ADMAIF_CIF_REG_DEFAULT)
static const struct reg_default tegra186_admaif_reg_defaults[] = {
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA186_ADMAIF_GLOBAL_BASE), 0x00000003},
ADMAIF_REG_DEFAULTS(1, TEGRA186),
ADMAIF_REG_DEFAULTS(2, TEGRA186),
ADMAIF_REG_DEFAULTS(3, TEGRA186),
ADMAIF_REG_DEFAULTS(4, TEGRA186),
ADMAIF_REG_DEFAULTS(5, TEGRA186),
ADMAIF_REG_DEFAULTS(6, TEGRA186),
ADMAIF_REG_DEFAULTS(7, TEGRA186),
ADMAIF_REG_DEFAULTS(8, TEGRA186),
ADMAIF_REG_DEFAULTS(9, TEGRA186),
ADMAIF_REG_DEFAULTS(10, TEGRA186),
ADMAIF_REG_DEFAULTS(11, TEGRA186),
ADMAIF_REG_DEFAULTS(12, TEGRA186),
ADMAIF_REG_DEFAULTS(13, TEGRA186),
ADMAIF_REG_DEFAULTS(14, TEGRA186),
ADMAIF_REG_DEFAULTS(15, TEGRA186),
ADMAIF_REG_DEFAULTS(16, TEGRA186),
ADMAIF_REG_DEFAULTS(17, TEGRA186),
ADMAIF_REG_DEFAULTS(18, TEGRA186),
ADMAIF_REG_DEFAULTS(19, TEGRA186),
ADMAIF_REG_DEFAULTS(20, TEGRA186)
ADMAIF_RX_REG_DEFAULTS(1, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(2, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(3, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(4, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(5, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(6, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(7, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(8, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(9, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(10, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(11, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(12, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(13, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(14, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(15, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(16, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(17, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(18, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(19, TEGRA186),
ADMAIF_RX_REG_DEFAULTS(20, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(1, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(2, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(3, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(4, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(5, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(6, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(7, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(8, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(9, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(10, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(11, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(12, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(13, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(14, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(15, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(16, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(17, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(18, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(19, TEGRA186),
ADMAIF_TX_REG_DEFAULTS(20, TEGRA186),
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA186_ADMAIF_GLOBAL_BASE), 0x00000003}
};
static const struct reg_default tegra210_admaif_reg_defaults[] = {
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA210_ADMAIF_GLOBAL_BASE), 0x00000003},
ADMAIF_REG_DEFAULTS(1, TEGRA210),
ADMAIF_REG_DEFAULTS(2, TEGRA210),
ADMAIF_REG_DEFAULTS(3, TEGRA210),
ADMAIF_REG_DEFAULTS(4, TEGRA210),
ADMAIF_REG_DEFAULTS(5, TEGRA210),
ADMAIF_REG_DEFAULTS(6, TEGRA210),
ADMAIF_REG_DEFAULTS(7, TEGRA210),
ADMAIF_REG_DEFAULTS(8, TEGRA210),
ADMAIF_REG_DEFAULTS(9, TEGRA210),
ADMAIF_REG_DEFAULTS(10, TEGRA210)
ADMAIF_RX_REG_DEFAULTS(1, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(2, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(3, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(4, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(5, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(6, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(7, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(8, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(9, TEGRA210),
ADMAIF_RX_REG_DEFAULTS(10, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(1, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(2, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(3, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(4, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(5, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(6, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(7, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(8, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(9, TEGRA210),
ADMAIF_TX_REG_DEFAULTS(10, TEGRA210),
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA210_ADMAIF_GLOBAL_BASE), 0x00000003}
};
static const struct reg_default tegra264_admaif_reg_defaults[] = {
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA264_ADMAIF_GLOBAL_BASE), 0x00000003},
ADMAIF_REG_DEFAULTS(1, TEGRA264),
ADMAIF_REG_DEFAULTS(2, TEGRA264),
ADMAIF_REG_DEFAULTS(3, TEGRA264),
ADMAIF_REG_DEFAULTS(4, TEGRA264),
ADMAIF_REG_DEFAULTS(5, TEGRA264),
ADMAIF_REG_DEFAULTS(6, TEGRA264),
ADMAIF_REG_DEFAULTS(7, TEGRA264),
ADMAIF_REG_DEFAULTS(8, TEGRA264),
ADMAIF_REG_DEFAULTS(9, TEGRA264),
ADMAIF_REG_DEFAULTS(10, TEGRA264),
ADMAIF_REG_DEFAULTS(11, TEGRA264),
ADMAIF_REG_DEFAULTS(12, TEGRA264),
ADMAIF_REG_DEFAULTS(13, TEGRA264),
ADMAIF_REG_DEFAULTS(14, TEGRA264),
ADMAIF_REG_DEFAULTS(15, TEGRA264),
ADMAIF_REG_DEFAULTS(16, TEGRA264),
ADMAIF_REG_DEFAULTS(17, TEGRA264),
ADMAIF_REG_DEFAULTS(18, TEGRA264),
ADMAIF_REG_DEFAULTS(19, TEGRA264),
ADMAIF_REG_DEFAULTS(20, TEGRA264),
ADMAIF_REG_DEFAULTS(21, TEGRA264),
ADMAIF_REG_DEFAULTS(22, TEGRA264),
ADMAIF_REG_DEFAULTS(23, TEGRA264),
ADMAIF_REG_DEFAULTS(24, TEGRA264),
ADMAIF_REG_DEFAULTS(25, TEGRA264),
ADMAIF_REG_DEFAULTS(26, TEGRA264),
ADMAIF_REG_DEFAULTS(27, TEGRA264),
ADMAIF_REG_DEFAULTS(28, TEGRA264),
ADMAIF_REG_DEFAULTS(29, TEGRA264),
ADMAIF_REG_DEFAULTS(30, TEGRA264),
ADMAIF_REG_DEFAULTS(31, TEGRA264),
ADMAIF_REG_DEFAULTS(32, TEGRA264)
ADMAIF_RX_REG_DEFAULTS(1, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(2, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(3, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(4, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(5, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(6, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(7, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(8, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(9, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(10, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(11, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(12, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(13, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(14, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(15, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(16, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(17, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(18, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(19, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(20, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(21, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(22, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(23, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(24, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(25, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(26, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(27, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(28, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(29, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(30, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(31, TEGRA264),
ADMAIF_RX_REG_DEFAULTS(32, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(1, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(2, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(3, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(4, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(5, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(6, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(7, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(8, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(9, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(10, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(11, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(12, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(13, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(14, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(15, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(16, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(17, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(18, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(19, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(20, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(21, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(22, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(23, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(24, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(25, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(26, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(27, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(28, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(29, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(30, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(31, TEGRA264),
ADMAIF_TX_REG_DEFAULTS(32, TEGRA264),
{(TEGRA_ADMAIF_GLOBAL_CG_0 + TEGRA264_ADMAIF_GLOBAL_BASE), 0x00000003}
};
static bool tegra_admaif_wr_reg(struct device *dev, unsigned int reg)