Hi Lucas,
url:
https://github.com/0day-ci/linux/commits/Lucas-Stach/i-MX8MM-GPC-improvem...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git for-next
config: i386-randconfig-m021-20210718 (attached as .config)
compiler: gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
smatch warnings:
drivers/soc/imx/imx8m-blk-ctrl.c:222 imx8m_blk_ctrl_probe() warn: missing error code
'ret'
vim +/ret +222 drivers/soc/imx/imx8m-blk-ctrl.c
446185fda14696 Lucas Stach 2021-07-17 150 static int imx8m_blk_ctrl_probe(struct
platform_device *pdev)
446185fda14696 Lucas Stach 2021-07-17 151 {
446185fda14696 Lucas Stach 2021-07-17 152 const struct imx8m_blk_ctrl_data *bc_data;
446185fda14696 Lucas Stach 2021-07-17 153 struct device *dev = &pdev->dev;
446185fda14696 Lucas Stach 2021-07-17 154 struct imx8m_blk_ctrl *bc;
446185fda14696 Lucas Stach 2021-07-17 155 void __iomem *base;
446185fda14696 Lucas Stach 2021-07-17 156 int i, ret;
446185fda14696 Lucas Stach 2021-07-17 157
446185fda14696 Lucas Stach 2021-07-17 158 struct regmap_config regmap_config = {
446185fda14696 Lucas Stach 2021-07-17 159 .reg_bits = 32,
446185fda14696 Lucas Stach 2021-07-17 160 .val_bits = 32,
446185fda14696 Lucas Stach 2021-07-17 161 .reg_stride = 4,
446185fda14696 Lucas Stach 2021-07-17 162 };
446185fda14696 Lucas Stach 2021-07-17 163
446185fda14696 Lucas Stach 2021-07-17 164 bc = devm_kzalloc(dev, sizeof(*bc),
GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17 165 if (!bc)
446185fda14696 Lucas Stach 2021-07-17 166 return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17 167
446185fda14696 Lucas Stach 2021-07-17 168 bc->dev = dev;
446185fda14696 Lucas Stach 2021-07-17 169
446185fda14696 Lucas Stach 2021-07-17 170 bc_data = of_device_get_match_data(dev);
446185fda14696 Lucas Stach 2021-07-17 171
446185fda14696 Lucas Stach 2021-07-17 172 base = devm_platform_ioremap_resource(pdev,
0);
446185fda14696 Lucas Stach 2021-07-17 173 if (IS_ERR(base))
446185fda14696 Lucas Stach 2021-07-17 174 return PTR_ERR(base);
446185fda14696 Lucas Stach 2021-07-17 175
446185fda14696 Lucas Stach 2021-07-17 176 regmap_config.max_register =
bc_data->max_reg;
446185fda14696 Lucas Stach 2021-07-17 177 bc->regmap = devm_regmap_init_mmio(dev,
base, ®map_config);
446185fda14696 Lucas Stach 2021-07-17 178 if (IS_ERR(bc->regmap))
446185fda14696 Lucas Stach 2021-07-17 179 return dev_err_probe(dev,
PTR_ERR(bc->regmap),
446185fda14696 Lucas Stach 2021-07-17 180 "failed to init regmap
\n");
446185fda14696 Lucas Stach 2021-07-17 181
446185fda14696 Lucas Stach 2021-07-17 182 bc->domains = devm_kcalloc(dev,
bc_data->num_domains,
446185fda14696 Lucas Stach 2021-07-17 183 sizeof(struct imx8m_blk_ctrl_domain),
446185fda14696 Lucas Stach 2021-07-17 184 GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17 185 if (!bc->domains)
446185fda14696 Lucas Stach 2021-07-17 186 return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17 187
446185fda14696 Lucas Stach 2021-07-17 188 bc->onecell_data.num_domains =
bc_data->num_domains;
446185fda14696 Lucas Stach 2021-07-17 189 bc->onecell_data.xlate =
imx8m_blk_ctrl_xlate;
446185fda14696 Lucas Stach 2021-07-17 190 bc->onecell_data.domains =
446185fda14696 Lucas Stach 2021-07-17 191 devm_kcalloc(dev, bc_data->num_domains,
446185fda14696 Lucas Stach 2021-07-17 192 sizeof(struct generic_pm_domain *),
GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17 193 if (!bc->onecell_data.domains)
446185fda14696 Lucas Stach 2021-07-17 194 return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17 195
446185fda14696 Lucas Stach 2021-07-17 196 bc->bus_power_dev =
genpd_dev_pm_attach_by_name(dev, "bus");
446185fda14696 Lucas Stach 2021-07-17 197 if (IS_ERR(bc->bus_power_dev))
446185fda14696 Lucas Stach 2021-07-17 198 return dev_err_probe(dev,
PTR_ERR(bc->bus_power_dev),
446185fda14696 Lucas Stach 2021-07-17 199 "failed to attach power
domain\n");
446185fda14696 Lucas Stach 2021-07-17 200
446185fda14696 Lucas Stach 2021-07-17 201 for (i = 0; i < bc_data->num_domains;
i++) {
446185fda14696 Lucas Stach 2021-07-17 202 const struct imx8m_blk_ctrl_domain_data
*data = &bc_data->domains[i];
446185fda14696 Lucas Stach 2021-07-17 203 struct imx8m_blk_ctrl_domain *domain =
&bc->domains[i];
446185fda14696 Lucas Stach 2021-07-17 204 int j;
446185fda14696 Lucas Stach 2021-07-17 205
446185fda14696 Lucas Stach 2021-07-17 206 domain->data = data;
446185fda14696 Lucas Stach 2021-07-17 207
446185fda14696 Lucas Stach 2021-07-17 208 for (j = 0; j < data->num_clks; j++)
446185fda14696 Lucas Stach 2021-07-17 209 domain->clks[j].id =
data->clk_names[j];
446185fda14696 Lucas Stach 2021-07-17 210
446185fda14696 Lucas Stach 2021-07-17 211 ret = devm_clk_bulk_get(dev,
data->num_clks, domain->clks);
446185fda14696 Lucas Stach 2021-07-17 212 if (ret) {
446185fda14696 Lucas Stach 2021-07-17 213 dev_err_probe(dev, ret, "failed to get
clock\n");
446185fda14696 Lucas Stach 2021-07-17 214 goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17 215 }
446185fda14696 Lucas Stach 2021-07-17 216
446185fda14696 Lucas Stach 2021-07-17 217 domain->power_dev =
446185fda14696 Lucas Stach 2021-07-17 218 dev_pm_domain_attach_by_name(dev,
data->gpc_name);
446185fda14696 Lucas Stach 2021-07-17 219 if (IS_ERR(domain->power_dev )) {
^
Extra space character.
446185fda14696 Lucas Stach 2021-07-17 220 dev_err_probe(dev,
PTR_ERR(domain->power_dev),
446185fda14696 Lucas Stach 2021-07-17 221 "failed to attach power
domain\n");
446185fda14696 Lucas Stach 2021-07-17 @222 goto cleanup_pds;
ret = PTR_ERR(domain->power_dev);
446185fda14696 Lucas Stach 2021-07-17 223 }
446185fda14696 Lucas Stach 2021-07-17 224
446185fda14696 Lucas Stach 2021-07-17 225 domain->genpd.name = data->name;
446185fda14696 Lucas Stach 2021-07-17 226 domain->genpd.power_on =
imx8m_blk_ctrl_power_on;
446185fda14696 Lucas Stach 2021-07-17 227 domain->genpd.power_off =
imx8m_blk_ctrl_power_off;
446185fda14696 Lucas Stach 2021-07-17 228 domain->bc = bc;
446185fda14696 Lucas Stach 2021-07-17 229
446185fda14696 Lucas Stach 2021-07-17 230 ret = pm_genpd_init(&domain->genpd,
NULL, true);
446185fda14696 Lucas Stach 2021-07-17 231 if (ret) {
446185fda14696 Lucas Stach 2021-07-17 232 dev_err_probe(dev, ret, "failed to
init power domain\n");
446185fda14696 Lucas Stach 2021-07-17 233 dev_pm_domain_detach(domain->power_dev,
true);
446185fda14696 Lucas Stach 2021-07-17 234 goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17 235 }
446185fda14696 Lucas Stach 2021-07-17 236
446185fda14696 Lucas Stach 2021-07-17 237 /*
446185fda14696 Lucas Stach 2021-07-17 238 * We use runtime PM to trigger power on/off
of the upstream GPC
446185fda14696 Lucas Stach 2021-07-17 239 * domain, as a strict hierarchical
parent/child power domain
446185fda14696 Lucas Stach 2021-07-17 240 * setup doesn't allow us to meet the
sequencing requirements.
446185fda14696 Lucas Stach 2021-07-17 241 * This means we have nested locking of
genpd locks, without the
446185fda14696 Lucas Stach 2021-07-17 242 * nesting being visible at the genpd level,
so we need a
446185fda14696 Lucas Stach 2021-07-17 243 * separate lock class to make lockdep aware
of the fact that
446185fda14696 Lucas Stach 2021-07-17 244 * this are separate domain locks that can
be nested without a
446185fda14696 Lucas Stach 2021-07-17 245 * self-deadlock.
446185fda14696 Lucas Stach 2021-07-17 246 */
446185fda14696 Lucas Stach 2021-07-17 247
lockdep_set_class(&domain->genpd.mlock,
446185fda14696 Lucas Stach 2021-07-17 248 &blk_ctrl_genpd_lock_class);
446185fda14696 Lucas Stach 2021-07-17 249
446185fda14696 Lucas Stach 2021-07-17 250 bc->onecell_data.domains[i] =
&domain->genpd;
446185fda14696 Lucas Stach 2021-07-17 251 }
446185fda14696 Lucas Stach 2021-07-17 252
446185fda14696 Lucas Stach 2021-07-17 253 ret =
of_genpd_add_provider_onecell(dev->of_node, &bc->onecell_data);
446185fda14696 Lucas Stach 2021-07-17 254 if (ret) {
446185fda14696 Lucas Stach 2021-07-17 255 dev_err_probe(dev, ret, "failed to add
power domain provider\n");
446185fda14696 Lucas Stach 2021-07-17 256 goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17 257 }
446185fda14696 Lucas Stach 2021-07-17 258
446185fda14696 Lucas Stach 2021-07-17 259 bc->power_nb.notifier_call =
bc_data->power_notifier_fn;
446185fda14696 Lucas Stach 2021-07-17 260 ret =
dev_pm_genpd_add_notifier(bc->bus_power_dev, &bc->power_nb);
446185fda14696 Lucas Stach 2021-07-17 261 if (ret) {
446185fda14696 Lucas Stach 2021-07-17 262 dev_err_probe(dev, ret, "failed to add
power notifier\n");
446185fda14696 Lucas Stach 2021-07-17 263 goto cleanup_provider;
446185fda14696 Lucas Stach 2021-07-17 264 }
446185fda14696 Lucas Stach 2021-07-17 265
446185fda14696 Lucas Stach 2021-07-17 266 dev_set_drvdata(dev, bc);
446185fda14696 Lucas Stach 2021-07-17 267
446185fda14696 Lucas Stach 2021-07-17 268 return 0;
446185fda14696 Lucas Stach 2021-07-17 269
446185fda14696 Lucas Stach 2021-07-17 270 cleanup_provider:
446185fda14696 Lucas Stach 2021-07-17 271 of_genpd_del_provider(dev->of_node);
446185fda14696 Lucas Stach 2021-07-17 272 cleanup_pds:
446185fda14696 Lucas Stach 2021-07-17 273 for (i--; i >= 0; i--) {
446185fda14696 Lucas Stach 2021-07-17 274
pm_genpd_remove(&bc->domains[i].genpd);
446185fda14696 Lucas Stach 2021-07-17 275
dev_pm_domain_detach(bc->domains[i].power_dev, true);
446185fda14696 Lucas Stach 2021-07-17 276 }
446185fda14696 Lucas Stach 2021-07-17 277
446185fda14696 Lucas Stach 2021-07-17 278 dev_pm_domain_detach(bc->bus_power_dev,
true);
446185fda14696 Lucas Stach 2021-07-17 279
446185fda14696 Lucas Stach 2021-07-17 280 return ret;
446185fda14696 Lucas Stach 2021-07-17 281 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org