struct resource *req_mem_cc_regs = NULL;
        void __iomem *cc_base = NULL;
        bool irq_registered = false;
-       struct ssi_drvdata *new_drvdata = kzalloc(sizeof(*new_drvdata),
-                                                 GFP_KERNEL);
+       struct ssi_drvdata *new_drvdata;
        struct device *dev = &plat_dev->dev;
        struct device_node *np = dev->of_node;
        u32 signature_val;
        int rc = 0;
 
-       if (unlikely(!new_drvdata)) {
+       new_drvdata = devm_kzalloc(&plat_dev->dev, sizeof(*new_drvdata),
+                                  GFP_KERNEL);
+       if (!new_drvdata) {
                SSI_LOG_ERR("Failed to allocate drvdata");
                rc = -ENOMEM;
                goto init_cc_res_err;
                                           resource_size(new_drvdata->res_mem));
                        new_drvdata->res_mem = NULL;
                }
-               kfree(new_drvdata);
                dev_set_drvdata(&plat_dev->dev, NULL);
        }
-
        return rc;
 }
 
                drvdata->cc_base = NULL;
                drvdata->res_mem = NULL;
        }
-
-       kfree(drvdata);
        dev_set_drvdata(&plat_dev->dev, NULL);
 }