mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
powerpc/maple: Register CPC925 EDAC device on all boards with CPC925
Currently Maple setup code creates cpc925_edac device only on Motorola ATCA-6101 blade. Make setup code check bridge revision and enable EDAC on all U3H bridges. Verified on Momentum MapleD (ppc970fx kit) board. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
de2780a3d8
commit
8a0360a563
1 changed files with 19 additions and 22 deletions
|
@ -338,35 +338,16 @@ define_machine(maple) {
|
|||
#ifdef CONFIG_EDAC
|
||||
/*
|
||||
* Register a platform device for CPC925 memory controller on
|
||||
* Motorola ATCA-6101 blade.
|
||||
* all boards with U3H (CPC925) bridge.
|
||||
*/
|
||||
#define MAPLE_CPC925_MODEL "Motorola,ATCA-6101"
|
||||
static int __init maple_cpc925_edac_setup(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct device_node *np = NULL;
|
||||
struct resource r;
|
||||
const unsigned char *model;
|
||||
int ret;
|
||||
|
||||
np = of_find_node_by_path("/");
|
||||
if (!np) {
|
||||
printk(KERN_ERR "%s: Unable to get root node\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
model = (const unsigned char *)of_get_property(np, "model", NULL);
|
||||
if (!model) {
|
||||
printk(KERN_ERR "%s: Unabel to get model info\n", __func__);
|
||||
of_node_put(np);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = strcmp(model, MAPLE_CPC925_MODEL);
|
||||
of_node_put(np);
|
||||
|
||||
if (ret != 0)
|
||||
return 0;
|
||||
volatile void __iomem *mem;
|
||||
u32 rev;
|
||||
|
||||
np = of_find_node_by_type(NULL, "memory-controller");
|
||||
if (!np) {
|
||||
|
@ -384,6 +365,22 @@ static int __init maple_cpc925_edac_setup(void)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
mem = ioremap(r.start, resource_size(&r));
|
||||
if (!mem) {
|
||||
printk(KERN_ERR "%s: Unable to map memory-controller memory\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rev = __raw_readl(mem);
|
||||
iounmap(mem);
|
||||
|
||||
if (rev < 0x34 || rev > 0x3f) { /* U3H */
|
||||
printk(KERN_ERR "%s: Non-CPC925(U3H) bridge revision: %02x\n",
|
||||
__func__, rev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pdev = platform_device_register_simple("cpc925_edac", 0, &r, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
|
|
Loading…
Reference in a new issue