Adding AST2400 and AST2600 edac driver support. Signed-off-by: Troy Lee <troy_lee@xxxxxxxxxxxxxx> --- Changes since v2: - Remove cross dependencies export functions - Update Kconfig depends on ARCH_ASPEED - Patch create against latest Linux kernel mainline --- drivers/edac/Kconfig | 6 +++--- drivers/edac/aspeed_edac.c | 15 +++++---------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig index 7a47680d6f07..c410331e8ee8 100644 --- a/drivers/edac/Kconfig +++ b/drivers/edac/Kconfig @@ -515,10 +515,10 @@ config EDAC_QCOM health, you should probably say 'Y' here. config EDAC_ASPEED - tristate "Aspeed AST 2500 SoC" - depends on MACH_ASPEED_G5 + tristate "Aspeed AST BMC SoC" + depends on ARCH_ASPEED help - Support for error detection and correction on the Aspeed AST 2500 SoC. + Support for error detection and correction on the Aspeed AST BMC SoC. First, ECC must be configured in the bootloader. Then, this driver will expose error counters via the EDAC kernel framework. diff --git a/drivers/edac/aspeed_edac.c b/drivers/edac/aspeed_edac.c index fde809efc520..c9d1d8a8fcba 100644 --- a/drivers/edac/aspeed_edac.c +++ b/drivers/edac/aspeed_edac.c @@ -239,7 +239,7 @@ static int init_csrows(struct mem_ctl_info *mci) int rc; /* retrieve info about physical memory from device tree */ - np = of_find_node_by_path("/memory"); + np = of_find_node_by_name(NULL, "memory"); if (!np) { dev_err(mci->pdev, "dt: missing /memory node\n"); return -ENODEV; @@ -282,7 +282,6 @@ static int aspeed_probe(struct platform_device *pdev) struct edac_mc_layer layers[2]; struct mem_ctl_info *mci; void __iomem *regs; - u32 reg04; int rc; regs = devm_platform_ioremap_resource(pdev, 0); @@ -294,13 +293,6 @@ static int aspeed_probe(struct platform_device *pdev) if (IS_ERR(aspeed_regmap)) return PTR_ERR(aspeed_regmap); - /* bail out if ECC mode is not configured */ - regmap_read(aspeed_regmap, ASPEED_MCR_CONF, ®04); - if (!(reg04 & ASPEED_MCR_CONF_ECC)) { - dev_err(&pdev->dev, "ECC mode is not configured in u-boot\n"); - return -EPERM; - } - edac_op_state = EDAC_OPSTATE_INT; /* allocate & init EDAC MC data structure */ @@ -375,10 +367,13 @@ static int aspeed_remove(struct platform_device *pdev) static const struct of_device_id aspeed_of_match[] = { + { .compatible = "aspeed,ast2400-sdram-edac" }, { .compatible = "aspeed,ast2500-sdram-edac" }, + { .compatible = "aspeed,ast2600-sdram-edac" }, {}, }; +MODULE_DEVICE_TABLE(of, aspeed_of_match); static struct platform_driver aspeed_driver = { .driver = { @@ -392,5 +387,5 @@ module_platform_driver(aspeed_driver); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Stefan Schaeckeler <sschaeck@xxxxxxxxx>"); -MODULE_DESCRIPTION("Aspeed AST2500 EDAC driver"); +MODULE_DESCRIPTION("Aspeed BMC SoC EDAC driver"); MODULE_VERSION("1.0"); -- 2.17.1