[PATCH 2/4] EDAC/altera: use flag to differentiate 64-bit platforms
Dinh Nguyen <[email protected]> Mon, 20 Jul 2026 15:14:23 -0500
| Newsgroups | org.kernel.vger.linux-edac,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
In commit (d4486fc3098e "EDAC/altera: Use ECC manager compatible to select A10/S10 IRQ layout"), it added a way to only differentiate Stratix10 from a 32-bit platform. In preparation to add support for Agilex5, it needs a way to make a further differentiation. Make use of the driver match data to hold a flag for different platforms, specifically Stratix10 and Agilex5. Signed-off-by: Dinh Nguyen <[email protected]> --- drivers/edac/altera_edac.c | 17 +++++++++-------- drivers/edac/altera_edac.h | 5 ++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 777ba6efcc542..8a5b08e0d0583 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -1507,7 +1507,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device) int edac_idx, rc; struct device_node *np; const struct edac_device_prv_data *prv = &a10_sdmmceccb_data; - bool is_s10 = device->edac->is_s10; + unsigned long flag = {unsigned long)device->edac->flag; rc = altr_check_ecc_deps(device); if (rc) @@ -1555,7 +1555,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device) */ /* Using compatibles to determine the IRQ Index */ - if (is_s10) + if (flag == SOCFPGA_S10) altdev->sb_irq = irq_of_parse_and_map(np, 1); else altdev->sb_irq = irq_of_parse_and_map(np, 2); @@ -1573,7 +1573,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device) goto err_release_group_1; } - if (is_s10) { + if (flag == SOCFPGA_S10) { /* Use IRQ to determine SError origin instead of assigning IRQ */ rc = of_property_read_u32_index(np, "interrupts", 1, &altdev->db_irq); if (rc) { @@ -1979,7 +1979,7 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac, goto err_release_group1; } - if (edac->is_s10) { + if (edac->flag == SOCFPGA_S10) { /* Use IRQ to determine SError origin instead of assigning IRQ */ rc = of_property_read_u32_index(np, "interrupts", 0, &altdev->db_irq); if (rc) { @@ -2125,7 +2125,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev) platform_set_drvdata(pdev, edac); INIT_LIST_HEAD(&edac->a10_ecc_devices); - edac->is_s10 = !!device_get_match_data(&pdev->dev); + edac->flag = (unsigned long)device_get_match_data(&pdev->dev); edac->ecc_mgr_map = altr_sysmgr_regmap_lookup_by_phandle(pdev->dev.of_node, @@ -2158,8 +2158,8 @@ static int altr_edac_a10_probe(struct platform_device *pdev) irq_set_chained_handler_and_data(edac->sb_irq, altr_edac_a10_irq_handler, edac); - if (edac->is_s10) - { + + if (edac->flag == SOCFPGA_S10) { int dberror, err_addr; edac->panic_notifier.notifier_call = s10_edac_dberr_handler; @@ -2210,7 +2210,8 @@ static int altr_edac_a10_probe(struct platform_device *pdev) static const struct of_device_id altr_edac_a10_of_match[] = { { .compatible = "altr,socfpga-a10-ecc-manager" }, - { .compatible = "altr,socfpga-s10-ecc-manager", .data = (void *)1 }, + { .compatible = "altr,socfpga-s10-ecc-manager", + .data = (void *)SOCFPGA_S10 }, {}, }; MODULE_DEVICE_TABLE(of, altr_edac_a10_of_match); diff --git a/drivers/edac/altera_edac.h b/drivers/edac/altera_edac.h index 9387056fd65e3..74ab7bfc3e748 100644 --- a/drivers/edac/altera_edac.h +++ b/drivers/edac/altera_edac.h @@ -351,6 +351,9 @@ struct altr_sdram_mc_data { #define ECC_READ_EOVR 0x2 #define ECC_READ_EDOVR 0x3 +#define SOCFPGA_S10 0x1 +#define SOCFPGA_AGILEX5 0x2 + struct altr_edac_device_dev; struct edac_device_prv_data { @@ -394,7 +397,7 @@ struct altr_arria10_edac { struct irq_chip irq_chip; struct list_head a10_ecc_devices; struct notifier_block panic_notifier; - bool is_s10; + unsigned long flag; }; #endif /* #ifndef _ALTERA_EDAC_H */ -- 2.42.0.411.g813d9a9188