EDAC/altera: Add Stratix10 SDMMC support [Linux 5.3]

This Linux kernel change "EDAC/altera: Add Stratix10 SDMMC support" is included in the Linux 5.3 release. This change is authored by Thor Thayer <thor.thayer [at] linux.intel.com> on Tue Apr 23 09:36:36 2019 -0500. The commit for this change in Linux stable tree is a428b4d (patch).

EDAC/altera: Add Stratix10 SDMMC support

Add SDMMC support for Stratix10 which has IRQ differences from Arria10.
Update comment accordingly.

Signed-off-by: Thor Thayer <thor.thayer@linux.intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: devicetree@vger.kernel.org
Cc: dinguyen@kernel.org
Cc: James Morse <james.morse@arm.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Cc: mark.rutland@arm.com
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: robh+dt@kernel.org
Link: https://lkml.kernel.org/r/1556030197-24534-4-git-send-email-thor.thayer@linux.intel.com

There are 16 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/edac/altera_edac.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c
index b7bc8f0..c2e693e 100644
--- a/drivers/edac/altera_edac.c
+++ b/drivers/edac/altera_edac.c
@@ -1583,8 +1583,12 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
    dci->mod_name = ecc_name;
    dci->dev_name = ecc_name;

-   /* Update the IRQs for PortB */
+   /* Update the PortB IRQs - A10 has 4, S10 has 2, Index accordingly */
+#ifdef CONFIG_ARCH_STRATIX10
+   altdev->sb_irq = irq_of_parse_and_map(np, 1);
+#else
    altdev->sb_irq = irq_of_parse_and_map(np, 2);
+#endif
    if (!altdev->sb_irq) {
        edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB SBIRQ alloc\n");
        rc = -ENODEV;
@@ -1599,6 +1603,15 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
        goto err_release_group_1;
    }

+#ifdef CONFIG_ARCH_STRATIX10
+   /* Use IRQ to determine SError origin instead of assigning IRQ */
+   rc = of_property_read_u32_index(np, "interrupts", 1, &altdev->db_irq);
+   if (rc) {
+       edac_printk(KERN_ERR, EDAC_DEVICE,
+               "Error PortB DBIRQ alloc\n");
+       goto err_release_group_1;
+   }
+#else
    altdev->db_irq = irq_of_parse_and_map(np, 3);
    if (!altdev->db_irq) {
        edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB DBIRQ alloc\n");
@@ -1613,6 +1626,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
        edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
        goto err_release_group_1;
    }
+#endif

    rc = edac_device_add_device(dci);
    if (rc) {

Leave a Reply

Your email address will not be published. Required fields are marked *