On 15-09-21, 11:55, Mikko Perttunen wrote: > The return value from tegra_bpmp_transfer indicates the success or > failure of the IPC transaction with BPMP. If the transaction > succeeded, we also need to check the actual command's result code. > Add code to do this. > > While at it, explicitly handle missing CPU clusters, which can > occur on floorswept chips. This worked before as well, but > possibly only by accident. > > Signed-off-by: Mikko Perttunen <mperttunen@xxxxxxxxxx> > --- > drivers/cpufreq/tegra186-cpufreq.c | 4 ++++ > drivers/cpufreq/tegra194-cpufreq.c | 8 +++++++- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c > index 5d1943e787b0..6c88827f4e62 100644 > --- a/drivers/cpufreq/tegra186-cpufreq.c > +++ b/drivers/cpufreq/tegra186-cpufreq.c > @@ -159,6 +159,10 @@ static struct cpufreq_frequency_table *init_vhint_table( > table = ERR_PTR(err); > goto free; > } > + if (msg.rx.ret) { > + table = ERR_PTR(-EINVAL); > + goto free; > + } > > for (i = data->vfloor; i <= data->vceil; i++) { > u16 ndiv = data->ndiv[i]; > diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c > index a9620e4489ae..ac381db25dbe 100644 > --- a/drivers/cpufreq/tegra194-cpufreq.c > +++ b/drivers/cpufreq/tegra194-cpufreq.c > @@ -242,7 +242,7 @@ static int tegra194_cpufreq_init(struct cpufreq_policy *policy) > > smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); > > - if (cl >= data->num_clusters) > + if (cl >= data->num_clusters || !data->tables[cl]) > return -EINVAL; > > /* set same policy for all cpus in a cluster */ > @@ -310,6 +310,12 @@ init_freq_table(struct platform_device *pdev, struct tegra_bpmp *bpmp, > err = tegra_bpmp_transfer(bpmp, &msg); > if (err) > return ERR_PTR(err); > + if (msg.rx.ret == -BPMP_EINVAL) { > + /* Cluster not available */ > + return NULL; > + } > + if (msg.rx.ret) > + return ERR_PTR(-EINVAL); > > /* > * Make sure frequency table step is a multiple of mdiv to match Applied. Thanks. -- viresh