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

Commit 06cce43c authored by Dale Farnsworth's avatar Dale Farnsworth Committed by Paul Mackerras
Browse files

[POWERPC] Check cache coherency of kernel vs firmware



check_cache_coherency() verifies that the cache coherency setting of
the kernel (CONFIG_NOT_COHERENT_CACHE) matches that left by the firmware,
as indicated by coherency-off device tree property.

Signed-off-by: default avatarDale Farnsworth <dale@farnsworth.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent e1a3107b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -389,6 +389,9 @@ config NOT_COHERENT_CACHE
	bool
	depends on 4xx || 8xx || E200
	default y

config CONFIG_CHECK_CACHE_COHERENCY
	bool
endmenu

source "init/Kconfig"
+41 −0
Original line number Diff line number Diff line
@@ -530,3 +530,44 @@ void __init setup_panic(void)
{
	atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
}

#ifdef CONFIG_CHECK_CACHE_COHERENCY
/*
 * For platforms that have configurable cache-coherency.  This function
 * checks that the cache coherency setting of the kernel matches the setting
 * left by the firmware, as indicated in the device tree.  Since a mismatch
 * will eventually result in DMA failures, we print * and error and call
 * BUG() in that case.
 */

#ifdef CONFIG_NOT_COHERENT_CACHE
#define KERNEL_COHERENCY	0
#else
#define KERNEL_COHERENCY	1
#endif

static int __init check_cache_coherency(void)
{
	struct device_node *np;
	const void *prop;
	int devtree_coherency;

	np = of_find_node_by_path("/");
	prop = of_get_property(np, "coherency-off", NULL);
	of_node_put(np);

	devtree_coherency = prop ? 0 : 1;

	if (devtree_coherency != KERNEL_COHERENCY) {
		printk(KERN_ERR
			"kernel coherency:%s != device tree_coherency:%s\n",
			KERNEL_COHERENCY ? "on" : "off",
			devtree_coherency ? "on" : "off");
		BUG();
	}

	return 0;
}

late_initcall(check_cache_coherency);
#endif /* CONFIG_CHECK_CACHE_COHERENCY */
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ config MPC10X_BRIDGE
config MV64X60
	bool
	select PPC_INDIRECT_PCI
	select CONFIG_CHECK_CACHE_COHERENCY

config MPC10X_OPENPIC
	bool