diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 02a14613e240..29f76538cc4a 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -888,8 +888,13 @@ static void tegra_mc_num_channel_enabled(struct tegra_mc *mc) unsigned int i; u32 value; - value = mc_ch_readl(mc, 0, MC_EMEM_ADR_CFG_CHANNEL_ENABLE); - if (value <= 0) { + if(mc->soc->cfg_channel_enable) { + value = mc_ch_readl(mc, 0, mc->soc->cfg_channel_enable); + if (value <= 0) { + mc->num_channels = mc->soc->num_channels; + return; + } + } else { mc->num_channels = mc->soc->num_channels; return; } diff --git a/drivers/memory/tegra/mc.h b/drivers/memory/tegra/mc.h index 2b8b7f777a29..edb78b85af56 100644 --- a/drivers/memory/tegra/mc.h +++ b/drivers/memory/tegra/mc.h @@ -54,6 +54,7 @@ #define MC_ERR_GENERALIZED_CARVEOUT_STATUS 0xc00 #define MC_ERR_GENERALIZED_CARVEOUT_ADR 0xc04 #define MC_EMEM_ADR_CFG_CHANNEL_ENABLE 0xdf8 +#define T264_MC_EMEM_ADR_CFG_CHANNEL_ENABLE 0x8870 #define MC_GLOBAL_INTSTATUS 0xf24 #define MC_ERR_ADR_HI 0x11fc diff --git a/drivers/memory/tegra/tegra186.c b/drivers/memory/tegra/tegra186.c index 2315ec3c4ee7..2dd92ab43830 100644 --- a/drivers/memory/tegra/tegra186.c +++ b/drivers/memory/tegra/tegra186.c @@ -917,6 +917,7 @@ const struct tegra_mc_soc tegra186_mc_soc = { .clients = tegra186_mc_clients, .num_address_bits = 40, .num_channels = 4, + .cfg_channel_enable = MC_EMEM_ADR_CFG_CHANNEL_ENABLE, .client_id_mask = 0xff, .intmask = MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | diff --git a/drivers/memory/tegra/tegra194.c b/drivers/memory/tegra/tegra194.c index 26035ac3a1eb..a98bc042e8ac 100644 --- a/drivers/memory/tegra/tegra194.c +++ b/drivers/memory/tegra/tegra194.c @@ -1348,6 +1348,7 @@ const struct tegra_mc_soc tegra194_mc_soc = { .clients = tegra194_mc_clients, .num_address_bits = 40, .num_channels = 16, + .cfg_channel_enable = MC_EMEM_ADR_CFG_CHANNEL_ENABLE, .client_id_mask = 0xff, .intmask = MC_INT_DECERR_ROUTE_SANITY | MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS | diff --git a/drivers/memory/tegra/tegra234.c b/drivers/memory/tegra/tegra234.c index 5f57cea48b62..2593993ea7e0 100644 --- a/drivers/memory/tegra/tegra234.c +++ b/drivers/memory/tegra/tegra234.c @@ -1137,6 +1137,7 @@ const struct tegra_mc_soc tegra234_mc_soc = { .clients = tegra234_mc_clients, .num_address_bits = 40, .num_channels = 16, + .cfg_channel_enable = MC_EMEM_ADR_CFG_CHANNEL_ENABLE, .client_id_mask = 0x1ff, .intmask = MC_INT_DECERR_ROUTE_SANITY | MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS | diff --git a/drivers/memory/tegra/tegra264.c b/drivers/memory/tegra/tegra264.c index cd1e38eeeb21..3fe3c4d23444 100644 --- a/drivers/memory/tegra/tegra264.c +++ b/drivers/memory/tegra/tegra264.c @@ -301,6 +301,7 @@ const struct tegra_mc_soc tegra264_mc_soc = { .clients = tegra264_mc_clients, .num_address_bits = 40, .num_channels = 16, + .cfg_channel_enable = T264_MC_EMEM_ADR_CFG_CHANNEL_ENABLE, .client_id_mask = 0x1ff, .intmask = MC_INT_DECERR_ROUTE_SANITY | MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS | diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h index af1d73a7f0cd..0aad0b312d49 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -181,6 +181,7 @@ struct tegra_mc_soc { u16 client_id_mask; u8 num_channels; + const u32 cfg_channel_enable; const struct tegra_smmu_soc *smmu;