mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 22:28:00 +00:00
[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: Dale Farnsworth <dale@farnsworth.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
e1a3107b06
commit
06cce43cf0
3 changed files with 45 additions and 0 deletions
|
@ -389,6 +389,9 @@ config NOT_COHERENT_CACHE
|
||||||
bool
|
bool
|
||||||
depends on 4xx || 8xx || E200
|
depends on 4xx || 8xx || E200
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config CONFIG_CHECK_CACHE_COHERENCY
|
||||||
|
bool
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|
|
@ -530,3 +530,44 @@ void __init setup_panic(void)
|
||||||
{
|
{
|
||||||
atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
|
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 */
|
||||||
|
|
|
@ -49,6 +49,7 @@ config MPC10X_BRIDGE
|
||||||
config MV64X60
|
config MV64X60
|
||||||
bool
|
bool
|
||||||
select PPC_INDIRECT_PCI
|
select PPC_INDIRECT_PCI
|
||||||
|
select CONFIG_CHECK_CACHE_COHERENCY
|
||||||
|
|
||||||
config MPC10X_OPENPIC
|
config MPC10X_OPENPIC
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Add table
Reference in a new issue