const struct mbus_dram_target_info *dram;
struct device *dev = &pdev->dev;
struct mv_cesa_dev *cesa;
- struct mv_cesa_engine *engines;
+ struct mv_cesa_engine *engine;
int irq, ret, i, cpu;
u32 sram_size;
return -ENOTSUPP;
}
- cesa = devm_kzalloc(dev, sizeof(*cesa), GFP_KERNEL);
+ cesa = devm_kzalloc(dev, struct_size(cesa, engines, caps->nengines),
+ GFP_KERNEL);
if (!cesa)
return -ENOMEM;
sram_size = CESA_SA_MIN_SRAM_SIZE;
cesa->sram_size = sram_size;
- cesa->engines = devm_kcalloc(dev, caps->nengines, sizeof(*engines),
- GFP_KERNEL);
- if (!cesa->engines)
- return -ENOMEM;
spin_lock_init(&cesa->lock);
platform_set_drvdata(pdev, cesa);
for (i = 0; i < caps->nengines; i++) {
- struct mv_cesa_engine *engine = &cesa->engines[i];
+ engine = &cesa->engines[i];
char res_name[16];
engine->id = i;
struct dma_pool *padding_pool;
};
-/**
- * struct mv_cesa_dev - CESA device
- * @caps: device capabilities
- * @regs: device registers
- * @sram_size: usable SRAM size
- * @lock: device lock
- * @engines: array of engines
- * @dma: dma pools
- *
- * Structure storing CESA device information.
- */
-struct mv_cesa_dev {
- const struct mv_cesa_caps *caps;
- void __iomem *regs;
- struct device *dev;
- unsigned int sram_size;
- spinlock_t lock;
- struct mv_cesa_engine *engines;
- struct mv_cesa_dev_dma *dma;
-};
-
/**
* struct mv_cesa_engine - CESA engine
* @id: engine id
int irq;
};
+/**
+ * struct mv_cesa_dev - CESA device
+ * @caps: device capabilities
+ * @regs: device registers
+ * @sram_size: usable SRAM size
+ * @lock: device lock
+ * @dma: dma pools
+ * @engines: array of engines
+ *
+ * Structure storing CESA device information.
+ */
+struct mv_cesa_dev {
+ const struct mv_cesa_caps *caps;
+ void __iomem *regs;
+ struct device *dev;
+ unsigned int sram_size;
+ spinlock_t lock;
+ struct mv_cesa_dev_dma *dma;
+ struct mv_cesa_engine engines[];
+};
+
/**
* struct mv_cesa_req_ops - CESA request operations
* @process: process a request chunk result (should return 0 if the