unsigned int method;
        u32 local_id;
        int num_mboxes;
-       struct zynqmp_ipi_mbox *ipi_mboxes;
+       struct zynqmp_ipi_mbox ipi_mboxes[];
 };
 
 static struct device_driver zynqmp_ipi_mbox_driver = {
        int num_mboxes, ret = -EINVAL;
 
        num_mboxes = of_get_child_count(np);
-       pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)),
+       pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes),
                             GFP_KERNEL);
        if (!pdata)
                return -ENOMEM;
        }
 
        pdata->num_mboxes = num_mboxes;
-       pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *)
-                           ((char *)pdata + sizeof(*pdata));
 
        mbox = pdata->ipi_mboxes;
        for_each_available_child_of_node(np, nc) {