Hi Lucas, url: https://github.com/0day-ci/linux/commits/Lucas-Stach/i-MX8MM-GPC-improvements-and-BLK_CTRL-driver/20210718-102944 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 Reported-by: Dan Carpenter 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