提交 0a243bd4 编写于 作者: J Jon Hunter 提交者: Thierry Reding

soc/tegra: pmc: Fix verification of valid partitions

The Tegra power partitions are referenced by numerical IDs which are the
same values programmed into the PMC registers for controlling the
partition. For a given device, the valid partition IDs may not be
contiguous and so simply checking that an ID is not greater than the
maximum ID supported may not mean it is valid. Fix this by checking if
the powergate is defined in the list of powergates for the Tegra SoC.

Add a helper function for checking valid powergates and use where we
need to verify if the powergate ID is valid or not.
Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
Reviewed-by: NMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: NThierry Reding <treding@nvidia.com>
上级 0ecf2d33
......@@ -179,6 +179,11 @@ static inline bool tegra_powergate_state(int id)
return (tegra_pmc_readl(PWRGATE_STATUS) & BIT(id)) != 0;
}
static inline bool tegra_powergate_is_valid(int id)
{
return (pmc->soc && pmc->soc->powergates[id]);
}
/**
* tegra_powergate_set() - set the state of a partition
* @id: partition ID
......@@ -206,7 +211,7 @@ static int tegra_powergate_set(unsigned int id, bool new_state)
*/
int tegra_powergate_power_on(unsigned int id)
{
if (!pmc->soc || id >= pmc->soc->num_powergates)
if (!tegra_powergate_is_valid(id))
return -EINVAL;
return tegra_powergate_set(id, true);
......@@ -218,7 +223,7 @@ int tegra_powergate_power_on(unsigned int id)
*/
int tegra_powergate_power_off(unsigned int id)
{
if (!pmc->soc || id >= pmc->soc->num_powergates)
if (!tegra_powergate_is_valid(id))
return -EINVAL;
return tegra_powergate_set(id, false);
......@@ -233,7 +238,7 @@ int tegra_powergate_is_powered(unsigned int id)
{
int status;
if (!pmc->soc || id >= pmc->soc->num_powergates)
if (!tegra_powergate_is_valid(id))
return -EINVAL;
mutex_lock(&pmc->powergates_lock);
......@@ -251,7 +256,7 @@ int tegra_powergate_remove_clamping(unsigned int id)
{
u32 mask;
if (!pmc->soc || id >= pmc->soc->num_powergates)
if (!tegra_powergate_is_valid(id))
return -EINVAL;
mutex_lock(&pmc->powergates_lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册