Hi Dmitry,
I love your patch! Perhaps something to improve:
[auto build test WARNING on tegra/for-next]
[also build test WARNING on v5.12-rc2 next-20210311]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url:
https://github.com/0day-ci/linux/commits/Dmitry-Osipenko/soc-tegra-Add-de...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
config: arm-defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
#
https://github.com/0day-ci/linux/commit/5ff989fef87fd532be096fb0c86f7f866...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Dmitry-Osipenko/soc-tegra-Add-devm_tegra_core_dev_init_opp_table/20210312-081244
git checkout 5ff989fef87fd532be096fb0c86f7f866655f34c
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
drivers/soc/tegra/core-power-domain.c: In function
'tegra_genpd_set_performance_state':
drivers/soc/tegra/core-power-domain.c:30:8: error: implicit declaration of function
'dev_pm_opp_find_level_ceil'; did you mean 'dev_pm_opp_find_freq_ceil'?
[-Werror=implicit-function-declaration]
30 | opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| dev_pm_opp_find_freq_ceil
> drivers/soc/tegra/core-power-domain.c:30:6: warning: assignment
to 'struct dev_pm_opp *' from 'int' makes pointer from integer without a
cast [-Wint-conversion]
30 | opp =
dev_pm_opp_find_level_ceil(&genpd->dev, &level);
| ^
drivers/soc/tegra/core-power-domain.c:38:8: error: implicit declaration of function
'dev_pm_opp_set_opp'; did you mean 'dev_pm_opp_set_bw'?
[-Werror=implicit-function-declaration]
38 | err = dev_pm_opp_set_opp(&genpd->dev, opp);
| ^~~~~~~~~~~~~~~~~~
| dev_pm_opp_set_bw
drivers/soc/tegra/core-power-domain.c: In function 'tegra_core_domain_probe':
drivers/soc/tegra/core-power-domain.c:74:14: error: implicit declaration of function
'devm_pm_opp_set_regulators'; did you mean 'dev_pm_opp_set_regulators'?
[-Werror=implicit-function-declaration]
74 | opp_table = devm_pm_opp_set_regulators(&pdev->dev, &rname, 1);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| dev_pm_opp_set_regulators
> drivers/soc/tegra/core-power-domain.c:74:12: warning: assignment
to 'struct opp_table *' from 'int' makes pointer from integer without a
cast [-Wint-conversion]
74 | opp_table =
devm_pm_opp_set_regulators(&pdev->dev, &rname, 1);
| ^
drivers/soc/tegra/core-power-domain.c: In function
'tegra_core_domain_set_synced':
drivers/soc/tegra/core-power-domain.c:115:8: error: implicit declaration of function
'dev_pm_opp_sync_regulators'; did you mean 'dev_pm_opp_set_regulators'?
[-Werror=implicit-function-declaration]
115 | err = dev_pm_opp_sync_regulators(dev);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| dev_pm_opp_set_regulators
cc1: some warnings being treated as errors
vim +30 drivers/soc/tegra/core-power-domain.c
23
24 static int tegra_genpd_set_performance_state(struct generic_pm_domain *genpd,
25 unsigned int level)
26 {
27 struct dev_pm_opp *opp;
28 int err;
29
30 opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
31 if (IS_ERR(opp)) {
32 dev_err(&genpd->dev, "failed to find OPP for level %u: %pe\n",
33 level, opp);
34 return PTR_ERR(opp);
35 }
36
37 mutex_lock(&tegra_core_lock);
38 err = dev_pm_opp_set_opp(&genpd->dev, opp);
39 mutex_unlock(&tegra_core_lock);
40
41 dev_pm_opp_put(opp);
42
43 if (err) {
44 dev_err(&genpd->dev, "failed to set voltage to %duV: %d\n",
45 level, err);
46 return err;
47 }
48
49 return 0;
50 }
51
52 static unsigned int
53 tegra_genpd_opp_to_performance_state(struct generic_pm_domain *genpd,
54 struct dev_pm_opp *opp)
55 {
56 return dev_pm_opp_get_level(opp);
57 }
58
59 static int tegra_core_domain_probe(struct platform_device *pdev)
60 {
61 struct generic_pm_domain *genpd;
62 struct opp_table *opp_table;
63 const char *rname = "power";
64 int err;
65
66 genpd = devm_kzalloc(&pdev->dev, sizeof(*genpd), GFP_KERNEL);
67 if (!genpd)
68 return -ENOMEM;
69
70 genpd->name = pdev->dev.of_node->name;
71 genpd->set_performance_state = tegra_genpd_set_performance_state;
72 genpd->opp_to_performance_state = tegra_genpd_opp_to_performance_state;
73
74 opp_table = devm_pm_opp_set_regulators(&pdev->dev,
&rname, 1);
75 if (IS_ERR(opp_table))
76 return dev_err_probe(&pdev->dev, PTR_ERR(opp_table),
77 "failed to set OPP regulator\n");
78
79 err = pm_genpd_init(genpd, NULL, false);
80 if (err) {
81 dev_err(&pdev->dev, "failed to init genpd: %d\n", err);
82 return err;
83 }
84
85 /*
86 * We have a "PMC -> Core" hierarchy of the power domains where
87 * PMC needs to resume and change performance (voltage) of the
88 * Core domain from the PMC GENPD on/off callbacks, hence we need
89 * to annotate the lock in order to remove confusion from the
90 * lockdep checker when a nested access happens.
91 */
92 lockdep_set_class(&genpd->mlock, &tegra_core_domain_lock_class);
93
94 err = of_genpd_add_provider_simple(pdev->dev.of_node, genpd);
95 if (err) {
96 dev_err(&pdev->dev, "failed to add genpd: %d\n", err);
97 goto remove_genpd;
98 }
99
100 return 0;
101
102 remove_genpd:
103 pm_genpd_remove(genpd);
104
105 return err;
106 }
107
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org