Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d113838 authored by Thor Thayer's avatar Thor Thayer Committed by Borislav Petkov
Browse files

ARM: socfpga: Enable L2 cache ECC on startup



Enable ECC for L2 cache on machine startup. The ECC has to be enabled
before data is stored in memory otherwise the ECC will fail on reads.

Signed-off-by: default avatarThor Thayer <tthayer@opensource.altera.com>
Acked-by: default avatarDinh Nguyen <dinguyen@opensource.altera.com>
Cc: devicetree@vger.kernel.org
Cc: galak@codeaurora.org
Cc: grant.likely@linaro.org
Cc: ijc+devicetree@hellion.org.uk
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux@arm.linux.org.uk
Cc: linux-doc@vger.kernel.org
Cc: linux-edac <linux-edac@vger.kernel.org>
Cc: mark.rutland@arm.com
Cc: m.chehab@samsung.com
Cc: pawel.moll@arm.com
Cc: robh+dt@kernel.org
Cc: Russell King <linux@arm.linux.org.uk>
Link: http://lkml.kernel.org/r/1455132384-17108-3-git-send-email-tthayer@opensource.altera.com


Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
parent d31e2e84
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -5,3 +5,4 @@
obj-y					:= socfpga.o
obj-y					:= socfpga.o
obj-$(CONFIG_SMP)	+= headsmp.o platsmp.o
obj-$(CONFIG_SMP)	+= headsmp.o platsmp.o
obj-$(CONFIG_SOCFPGA_SUSPEND)	+= pm.o self-refresh.o
obj-$(CONFIG_SOCFPGA_SUSPEND)	+= pm.o self-refresh.o
obj-$(CONFIG_EDAC_ALTERA_L2C)	+= l2_cache.o
+1 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@


extern void socfpga_init_clocks(void);
extern void socfpga_init_clocks(void);
extern void socfpga_sysmgr_init(void);
extern void socfpga_sysmgr_init(void);
void socfpga_init_l2_ecc(void);


extern void __iomem *sys_manager_base_addr;
extern void __iomem *sys_manager_base_addr;
extern void __iomem *rst_manager_base_addr;
extern void __iomem *rst_manager_base_addr;
+41 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright Altera Corporation (C) 2016. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include <linux/io.h>
#include <linux/of_platform.h>
#include <linux/of_address.h>

void socfpga_init_l2_ecc(void)
{
	struct device_node *np;
	void __iomem *mapped_l2_edac_addr;

	np = of_find_compatible_node(NULL, NULL, "altr,socfpga-l2-ecc");
	if (!np) {
		pr_err("Unable to find socfpga-l2-ecc in dtb\n");
		return;
	}

	mapped_l2_edac_addr = of_iomap(np, 0);
	of_node_put(np);
	if (!mapped_l2_edac_addr) {
		pr_err("Unable to find L2 ECC mapping in dtb\n");
		return;
	}

	/* Enable ECC */
	writel(0x01, mapped_l2_edac_addr);
	iounmap(mapped_l2_edac_addr);
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,8 @@ static void __init socfpga_init_irq(void)
{
{
	irqchip_init();
	irqchip_init();
	socfpga_sysmgr_init();
	socfpga_sysmgr_init();
	if (IS_ENABLED(CONFIG_EDAC_ALTERA_L2C))
		socfpga_init_l2_ecc();
}
}


static void socfpga_cyclone5_restart(enum reboot_mode mode, const char *cmd)
static void socfpga_cyclone5_restart(enum reboot_mode mode, const char *cmd)