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

Commit 8a0360a5 authored by Dmitry Eremin-Solenikov's avatar Dmitry Eremin-Solenikov Committed by Benjamin Herrenschmidt
Browse files

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: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent de2780a3
Loading
Loading
Loading
Loading
+19 −22
Original line number Diff line number Diff line
@@ -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);