| Altera SoCFPGA ECC Manager |
| This driver uses the EDAC framework to implement the SOCFPGA ECC Manager. |
| The ECC Manager counts and corrects single bit errors and counts/handles |
| double bit errors which are uncorrectable. |
| |
| Cyclone5 and Arria5 ECC Manager |
| Required Properties: |
| - compatible : Should be "altr,socfpga-ecc-manager" |
| - #address-cells: must be 1 |
| - #size-cells: must be 1 |
| - ranges : standard definition, should translate from local addresses |
| |
| Subcomponents: |
| |
| L2 Cache ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-l2-ecc" |
| - reg : Address and size for ECC error interrupt clear registers. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt. Note the rising edge type. |
| |
| On Chip RAM ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-ocram-ecc" |
| - reg : Address and size for ECC error interrupt clear registers. |
| - iram : phandle to On-Chip RAM definition. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt. Note the rising edge type. |
| |
| Example: |
| |
| eccmgr: eccmgr@ffd08140 { |
| compatible = "altr,socfpga-ecc-manager"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| l2-ecc@ffd08140 { |
| compatible = "altr,socfpga-l2-ecc"; |
| reg = <0xffd08140 0x4>; |
| interrupts = <0 36 1>, <0 37 1>; |
| }; |
| |
| ocram-ecc@ffd08144 { |
| compatible = "altr,socfpga-ocram-ecc"; |
| reg = <0xffd08144 0x4>; |
| iram = <&ocram>; |
| interrupts = <0 178 1>, <0 179 1>; |
| }; |
| }; |
| |
| Arria10 SoCFPGA ECC Manager |
| The Arria10 SoC ECC Manager handles the IRQs for each peripheral |
| in a shared register instead of individual IRQs like the Cyclone5 |
| and Arria5. Therefore the device tree is different as well. |
| |
| Required Properties: |
| - compatible : Should be "altr,socfpga-a10-ecc-manager" |
| - altr,sysgr-syscon : phandle to Arria10 System Manager Block |
| containing the ECC manager registers. |
| - #address-cells: must be 1 |
| - #size-cells: must be 1 |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt. |
| - interrupt-controller : boolean indicator that ECC Manager is an interrupt controller |
| - #interrupt-cells : must be set to 2. |
| - ranges : standard definition, should translate from local addresses |
| |
| Subcomponents: |
| |
| L2 Cache ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-a10-l2-ecc" |
| - reg : Address and size for ECC error interrupt clear registers. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| On-Chip RAM ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-a10-ocram-ecc" |
| - reg : Address and size for ECC block registers. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| Ethernet FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-eth-mac-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent Ethernet node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| NAND FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-nand-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent NAND node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| DMA FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-dma-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent DMA node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| USB FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-usb-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent USB node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| QSPI FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-qspi-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent QSPI node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order. |
| |
| SDMMC FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-sdmmc-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent SD/MMC node. |
| - interrupts : Should be single bit error interrupt, then double bit error |
| interrupt, in this order for port A, and then single bit error interrupt, |
| then double bit error interrupt in this order for port B. |
| |
| Example: |
| |
| eccmgr: eccmgr@ffd06000 { |
| compatible = "altr,socfpga-a10-ecc-manager"; |
| altr,sysmgr-syscon = <&sysmgr>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| interrupts = <0 2 IRQ_TYPE_LEVEL_HIGH>, |
| <0 0 IRQ_TYPE_LEVEL_HIGH>; |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| ranges; |
| |
| l2-ecc@ffd06010 { |
| compatible = "altr,socfpga-a10-l2-ecc"; |
| reg = <0xffd06010 0x4>; |
| interrupts = <0 IRQ_TYPE_LEVEL_HIGH>, |
| <32 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| ocram-ecc@ff8c3000 { |
| compatible = "altr,socfpga-a10-ocram-ecc"; |
| reg = <0xff8c3000 0x90>; |
| interrupts = <1 IRQ_TYPE_LEVEL_HIGH>, |
| <33 IRQ_TYPE_LEVEL_HIGH> ; |
| }; |
| |
| emac0-rx-ecc@ff8c0800 { |
| compatible = "altr,socfpga-eth-mac-ecc"; |
| reg = <0xff8c0800 0x400>; |
| altr,ecc-parent = <&gmac0>; |
| interrupts = <4 IRQ_TYPE_LEVEL_HIGH>, |
| <36 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| emac0-tx-ecc@ff8c0c00 { |
| compatible = "altr,socfpga-eth-mac-ecc"; |
| reg = <0xff8c0c00 0x400>; |
| altr,ecc-parent = <&gmac0>; |
| interrupts = <5 IRQ_TYPE_LEVEL_HIGH>, |
| <37 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| nand-buf-ecc@ff8c2000 { |
| compatible = "altr,socfpga-nand-ecc"; |
| reg = <0xff8c2000 0x400>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <11 IRQ_TYPE_LEVEL_HIGH>, |
| <43 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| nand-rd-ecc@ff8c2400 { |
| compatible = "altr,socfpga-nand-ecc"; |
| reg = <0xff8c2400 0x400>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <13 IRQ_TYPE_LEVEL_HIGH>, |
| <45 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| nand-wr-ecc@ff8c2800 { |
| compatible = "altr,socfpga-nand-ecc"; |
| reg = <0xff8c2800 0x400>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <12 IRQ_TYPE_LEVEL_HIGH>, |
| <44 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| dma-ecc@ff8c8000 { |
| compatible = "altr,socfpga-dma-ecc"; |
| reg = <0xff8c8000 0x400>; |
| altr,ecc-parent = <&pdma>; |
| interrupts = <10 IRQ_TYPE_LEVEL_HIGH>, |
| <42 IRQ_TYPE_LEVEL_HIGH>; |
| |
| usb0-ecc@ff8c8800 { |
| compatible = "altr,socfpga-usb-ecc"; |
| reg = <0xff8c8800 0x400>; |
| altr,ecc-parent = <&usb0>; |
| interrupts = <2 IRQ_TYPE_LEVEL_HIGH>, |
| <34 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| qspi-ecc@ff8c8400 { |
| compatible = "altr,socfpga-qspi-ecc"; |
| reg = <0xff8c8400 0x400>; |
| altr,ecc-parent = <&qspi>; |
| interrupts = <14 IRQ_TYPE_LEVEL_HIGH>, |
| <46 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| sdmmc-ecc@ff8c2c00 { |
| compatible = "altr,socfpga-sdmmc-ecc"; |
| reg = <0xff8c2c00 0x400>; |
| altr,ecc-parent = <&mmc>; |
| interrupts = <15 IRQ_TYPE_LEVEL_HIGH>, |
| <47 IRQ_TYPE_LEVEL_HIGH>, |
| <16 IRQ_TYPE_LEVEL_HIGH>, |
| <48 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| }; |
| |
| Stratix10 SoCFPGA ECC Manager (ARM64) |
| The Stratix10 SoC ECC Manager handles the IRQs for each peripheral |
| in a shared register similar to the Arria10. However, Stratix10 ECC |
| requires access to registers that can only be read from Secure Monitor |
| with SMC calls. Therefore the device tree is slightly different. Note |
| that only 1 interrupt is sent in Stratix10 because the double bit errors |
| are treated as SErrors in ARM64 instead of IRQs in ARM32. |
| |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-ecc-manager" |
| - altr,sysgr-syscon : phandle to Stratix10 System Manager Block |
| containing the ECC manager registers. |
| - interrupts : Should be single bit error interrupt. |
| - interrupt-controller : boolean indicator that ECC Manager is an interrupt controller |
| - #interrupt-cells : must be set to 2. |
| - #address-cells: must be 1 |
| - #size-cells: must be 1 |
| - ranges : standard definition, should translate from local addresses |
| |
| Subcomponents: |
| |
| SDRAM ECC |
| Required Properties: |
| - compatible : Should be "altr,sdram-edac-s10" |
| - interrupts : Should be single bit error interrupt. |
| |
| On-Chip RAM ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-ocram-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent OCRAM node. |
| - interrupts : Should be single bit error interrupt. |
| |
| Ethernet FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-eth-mac-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent Ethernet node. |
| - interrupts : Should be single bit error interrupt. |
| |
| NAND FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-nand-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent NAND node. |
| - interrupts : Should be single bit error interrupt. |
| |
| DMA FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-dma-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent DMA node. |
| - interrupts : Should be single bit error interrupt. |
| |
| USB FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-usb-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent USB node. |
| - interrupts : Should be single bit error interrupt. |
| |
| SDMMC FIFO ECC |
| Required Properties: |
| - compatible : Should be "altr,socfpga-s10-sdmmc-ecc" |
| - reg : Address and size for ECC block registers. |
| - altr,ecc-parent : phandle to parent SD/MMC node. |
| - interrupts : Should be single bit error interrupt for port A |
| and then single bit error interrupt for port B. |
| |
| Example: |
| |
| eccmgr { |
| compatible = "altr,socfpga-s10-ecc-manager"; |
| altr,sysmgr-syscon = <&sysmgr>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| interrupts = <0 15 4>; |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| ranges; |
| |
| sdramedac { |
| compatible = "altr,sdram-edac-s10"; |
| interrupts = <16 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| ocram-ecc@ff8cc000 { |
| compatible = "altr,socfpga-s10-ocram-ecc"; |
| reg = <ff8cc000 0x100>; |
| altr,ecc-parent = <&ocram>; |
| interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| emac0-rx-ecc@ff8c0000 { |
| compatible = "altr,socfpga-s10-eth-mac-ecc"; |
| reg = <0xff8c0000 0x100>; |
| altr,ecc-parent = <&gmac0>; |
| interrupts = <4 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| emac0-tx-ecc@ff8c0400 { |
| compatible = "altr,socfpga-s10-eth-mac-ecc"; |
| reg = <0xff8c0400 0x100>; |
| altr,ecc-parent = <&gmac0>; |
| interrupts = <5 IRQ_TYPE_LEVEL_HIGH>' |
| }; |
| |
| nand-buf-ecc@ff8c8000 { |
| compatible = "altr,socfpga-s10-nand-ecc"; |
| reg = <0xff8c8000 0x100>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| nand-rd-ecc@ff8c8400 { |
| compatible = "altr,socfpga-s10-nand-ecc"; |
| reg = <0xff8c8400 0x100>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <13 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| nand-wr-ecc@ff8c8800 { |
| compatible = "altr,socfpga-s10-nand-ecc"; |
| reg = <0xff8c8800 0x100>; |
| altr,ecc-parent = <&nand>; |
| interrupts = <12 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| dma-ecc@ff8c9000 { |
| compatible = "altr,socfpga-s10-dma-ecc"; |
| reg = <0xff8c9000 0x100>; |
| altr,ecc-parent = <&pdma>; |
| interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; |
| |
| usb0-ecc@ff8c4000 { |
| compatible = "altr,socfpga-s10-usb-ecc"; |
| reg = <0xff8c4000 0x100>; |
| altr,ecc-parent = <&usb0>; |
| interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| sdmmc-ecc@ff8c8c00 { |
| compatible = "altr,socfpga-s10-sdmmc-ecc"; |
| reg = <0xff8c8c00 0x100>; |
| altr,ecc-parent = <&mmc>; |
| interrupts = <14 IRQ_TYPE_LEVEL_HIGH>, |
| <15 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| }; |