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

Commit 4c882b01 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Paul Mackerras
Browse files

[PATCH] powerpc: Fix Maple build



The changes to the device node structure broke Maple build. This fixes it.
Unfortunately I coudn't test as my Maple board appears to be dead.

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 8385a6a3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -316,7 +316,6 @@ static int __init add_bridge(struct device_node *dev)
	char* disp_name;
	int *bus_range;
	int primary = 1;
	struct property *of_prop;

	DBG("Adding PCI host bridge %s\n", dev->full_name);

+50 −35
Original line number Diff line number Diff line
@@ -71,38 +71,60 @@
#define DBG(fmt...)
#endif

static void maple_restart(char *cmd)
static unsigned long maple_find_nvram_base(void)
{
	unsigned int maple_nvram_base;
	unsigned int maple_nvram_offset;
	unsigned int maple_nvram_command;
	struct device_node *rtcs;
	unsigned long result = 0;

	/* find NVRAM device */
	rtcs = find_compatible_devices("nvram", "AMD8111");
	if (rtcs && rtcs->addrs) {
		maple_nvram_base = rtcs->addrs[0].address;
	} else {
	rtcs = of_find_compatible_node(NULL, "nvram", "AMD8111");
	if (rtcs) {
		struct resource r;
		if (of_address_to_resource(rtcs, 0, &r)) {
			printk(KERN_EMERG "Maple: Unable to translate NVRAM"
			       " address\n");
			goto bail;
		}
		if (!(r.flags & IORESOURCE_IO)) {
			printk(KERN_EMERG "Maple: NVRAM address isn't PIO!\n");
			goto bail;
		}
		result = r.start;
	} else
		printk(KERN_EMERG "Maple: Unable to find NVRAM\n");
		printk(KERN_EMERG "Maple: Manual Restart Required\n");
		return;
 bail:
	of_node_put(rtcs);
	return result;
}

static void maple_restart(char *cmd)
{
	unsigned int maple_nvram_base;
	unsigned int maple_nvram_offset;
	unsigned int maple_nvram_command;
	struct device_node *sp;

	maple_nvram_base = maple_find_nvram_base();
	if (maple_nvram_base == 0)
		goto fail;

	/* find service processor device */
	rtcs = find_devices("service-processor");
	if (!rtcs) {
	sp = of_find_node_by_name(NULL, "service-processor");
	if (!sp) {
		printk(KERN_EMERG "Maple: Unable to find Service Processor\n");
		printk(KERN_EMERG "Maple: Manual Restart Required\n");
		return;
		goto fail;
	}
	maple_nvram_offset = *(unsigned int*) get_property(rtcs,
	maple_nvram_offset = *(unsigned int*) get_property(sp,
			"restart-addr", NULL);
	maple_nvram_command = *(unsigned int*) get_property(rtcs,
	maple_nvram_command = *(unsigned int*) get_property(sp,
			"restart-value", NULL);
	of_node_put(sp);

	/* send command */
	outb_p(maple_nvram_command, maple_nvram_base + maple_nvram_offset);
	for (;;) ;
 fail:
	printk(KERN_EMERG "Maple: Manual Restart Required\n");
}

static void maple_power_off(void)
@@ -110,33 +132,29 @@ static void maple_power_off(void)
	unsigned int maple_nvram_base;
	unsigned int maple_nvram_offset;
	unsigned int maple_nvram_command;
	struct device_node *rtcs;
	struct device_node *sp;

	/* find NVRAM device */
	rtcs = find_compatible_devices("nvram", "AMD8111");
	if (rtcs && rtcs->addrs) {
		maple_nvram_base = rtcs->addrs[0].address;
	} else {
		printk(KERN_EMERG "Maple: Unable to find NVRAM\n");
		printk(KERN_EMERG "Maple: Manual Power-Down Required\n");
		return;
	}
	maple_nvram_base = maple_find_nvram_base();
	if (maple_nvram_base == 0)
		goto fail;

	/* find service processor device */
	rtcs = find_devices("service-processor");
	if (!rtcs) {
	sp = of_find_node_by_name(NULL, "service-processor");
	if (!sp) {
		printk(KERN_EMERG "Maple: Unable to find Service Processor\n");
		printk(KERN_EMERG "Maple: Manual Power-Down Required\n");
		return;
		goto fail;
	}
	maple_nvram_offset = *(unsigned int*) get_property(rtcs,
	maple_nvram_offset = *(unsigned int*) get_property(sp,
			"power-off-addr", NULL);
	maple_nvram_command = *(unsigned int*) get_property(rtcs,
	maple_nvram_command = *(unsigned int*) get_property(sp,
			"power-off-value", NULL);
	of_node_put(sp);

	/* send command */
	outb_p(maple_nvram_command, maple_nvram_base + maple_nvram_offset);
	for (;;) ;
 fail:
	printk(KERN_EMERG "Maple: Manual Power-Down Required\n");
}

static void maple_halt(void)
@@ -179,9 +197,6 @@ void __init maple_setup_arch(void)
 */
static void __init maple_init_early(void)
{
	unsigned int default_speed;
	u64 physport;

	DBG(" -> maple_init_early\n");

	/* Initialize hash table, from now on, we can take hash faults
+18 −5
Original line number Diff line number Diff line
@@ -168,11 +168,24 @@ unsigned long __init maple_get_boot_time(void)
	struct rtc_time tm;
	struct device_node *rtcs;

	rtcs = find_compatible_devices("rtc", "pnpPNP,b00");
	if (rtcs && rtcs->addrs) {
		maple_rtc_addr = rtcs->addrs[0].address;
		printk(KERN_INFO "Maple: Found RTC at 0x%x\n", maple_rtc_addr);
	} else {
	rtcs = of_find_compatible_node(NULL, "rtc", "pnpPNP,b00");
	if (rtcs) {
		struct resource r;
		if (of_address_to_resource(rtcs, 0, &r)) {
			printk(KERN_EMERG "Maple: Unable to translate RTC"
			       " address\n");
			goto bail;
		}
		if (!(r.flags & IORESOURCE_IO)) {
			printk(KERN_EMERG "Maple: RTC address isn't PIO!\n");
			goto bail;
		}
		maple_rtc_addr = r.start;
		printk(KERN_INFO "Maple: Found RTC at IO 0x%x\n",
		       maple_rtc_addr);
	}
 bail:
	if (maple_rtc_addr == 0) {
		maple_rtc_addr = RTC_PORT(0); /* legacy address */
		printk(KERN_INFO "Maple: No device node for RTC, assuming "
		       "legacy address (0x%x)\n", maple_rtc_addr);