Hi Talel, On 24/10/2019 11:03, Talel Shenhar wrote: > The Amazon's Annapurna Labs Memory Controller EDAC supports ECC capability > for error detection and correction (Single bit error correction, Double > detection). This driver introduces EDAC driver for that capability. > diff --git a/drivers/edac/al_mc_edac.c b/drivers/edac/al_mc_edac.c > new file mode 100644 > index 00000000..b9ef7dd > --- /dev/null > +++ b/drivers/edac/al_mc_edac.c > @@ -0,0 +1,355 @@ > +static void devm_al_mc_edac_del(void *data) > +{ > + edac_mc_del_mc(data); > +} > + > +static void devm_al_mc_edac_free(void *data) > +{ > + edac_mc_free(data); > +} > + > +static int al_mc_edac_probe(struct platform_device *pdev) > +{ > + void __iomem *mmio_base; > + struct edac_mc_layer layers[1]; > + struct mem_ctl_info *mci; > + struct al_mc_edac *al_mc; > + int ret; > + > + mmio_base = devm_platform_ioremap_resource(pdev, 0); > + if (IS_ERR(mmio_base)) { > + dev_err(&pdev->dev, "failed to ioremap memory (%ld)\n", > + PTR_ERR(mmio_base)); > + return PTR_ERR(mmio_base); > + } > + > + layers[0].type = EDAC_MC_LAYER_CHIP_SELECT; > + layers[0].size = 1; > + layers[0].is_virt_csrow = false; > + mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, > + sizeof(struct al_mc_edac)); > + if (!mci) > + return -ENOMEM; > + ret = devm_add_action(&pdev->dev, devm_al_mc_edac_free, mci); > + if (ret) { > + edac_mc_free(mci); > + return ret; > + } Cool. (edac_mc.c should probably provide a devm_edac_mc_alloc() that does this, but that can be future) > +static struct platform_driver al_mc_edac_driver = { > + .probe = al_mc_edac_probe, (Looks like you can still remove the module even though there is no .remove here.) Reviewed-by: James Morse <james.morse@xxxxxxx> Thanks, James