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

Commit 4672cddf authored by Linus Walleij's avatar Linus Walleij Committed by Russell King
Browse files

ARM: 7518/1: integrator: convert AMBA devices to device tree



This converts the AMBA (PrimeCell) devices on the Integrator/AP
and Integrator/CP over to probing from the Device Tree if the
kernel is compiled for Device Tree support.

We continue to #ifdef out all non-DT code and vice versa on
respective boot type to get a clean cut.

We need to add a bunch of auxdata (compare to the Versatile)
to handle bus names and callbacks alike.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 4980f9bc
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -30,4 +30,42 @@
		reg = <0x14000000 0x100>;
		clear-mask = <0xffffffff>;
	};

	fpga {
		compatible = "arm,amba-bus", "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		interrupt-parent = <&pic>;

		/*
		 * These PrimeCells are in the same locations and using the
		 * same interrupts in all Integrators, however the silicon
		 * version deployed is different.
		 */
		rtc@15000000 {
			reg = <0x15000000 0x1000>;
			interrupts = <8>;
		};

		uart@16000000 {
			reg = <0x16000000 0x1000>;
			interrupts = <1>;
		};

		uart@17000000 {
			reg = <0x17000000 0x1000>;
			interrupts = <2>;
		};

		kmi@18000000 {
			reg = <0x18000000 0x1000>;
			interrupts = <3>;
		};

		kmi@19000000 {
			reg = <0x19000000 0x1000>;
			interrupts = <4>;
		};
	};
};
+32 −0
Original line number Diff line number Diff line
@@ -33,4 +33,36 @@
	pic: pic@14000000 {
		valid-mask = <0x003fffff>;
	};

	fpga {
		/*
		 * The Integator/AP predates the idea to have magic numbers
		 * identifying the PrimeCell in hardware, thus we have to
		 * supply these from the device tree.
		 */
		rtc: rtc@15000000 {
			compatible = "arm,pl030", "arm,primecell";
			arm,primecell-periphid = <0x00041030>;
		};

		uart0: uart@16000000 {
			compatible = "arm,pl010", "arm,primecell";
			arm,primecell-periphid = <0x00041010>;
		};

		uart1: uart@17000000 {
			compatible = "arm,pl010", "arm,primecell";
			arm,primecell-periphid = <0x00041010>;
		};

		kmi0: kmi@18000000 {
			compatible = "arm,pl050", "arm,primecell";
			arm,primecell-periphid = <0x00041050>;
		};

		kmi1: kmi@19000000 {
			compatible = "arm,pl050", "arm,primecell";
			arm,primecell-periphid = <0x00041050>;
		};
	};
};
+49 −0
Original line number Diff line number Diff line
@@ -51,4 +51,53 @@
		clear-mask = <0x00000fff>;
		valid-mask = <0x00000fff>;
	};

	fpga {
		/*
		 * These PrimeCells are at the same location and using
		 * the same interrupts in all Integrators, but in the CP
		 * slightly newer versions are deployed.
		 */
		rtc@15000000 {
			compatible = "arm,pl031", "arm,primecell";
		};

		uart@16000000 {
			compatible = "arm,pl011", "arm,primecell";
		};

		uart@17000000 {
			compatible = "arm,pl011", "arm,primecell";
		};

		kmi@18000000 {
			compatible = "arm,pl050", "arm,primecell";
		};

		kmi@19000000 {
			compatible = "arm,pl050", "arm,primecell";
		};

		/*
		 * These PrimeCells are only available on the Integrator/CP
		 */
		mmc@1c000000 {
			compatible = "arm,pl180", "arm,primecell";
			reg = <0x1c000000 0x1000>;
			interrupts = <23 24>;
			max-frequency = <515633>;
		};

		aaci@1d000000 {
			compatible = "arm,pl041", "arm,primecell";
			reg = <0x1d000000 0x1000>;
			interrupts = <25>;
		};

		clcd@c0000000 {
			compatible = "arm,pl110", "arm,primecell";
			reg = <0xC0000000 0x1000>;
			interrupts = <22>;
		};
	};
};
+2 −0
Original line number Diff line number Diff line
#include <linux/amba/serial.h>
extern struct amba_pl010_data integrator_uart_data;
void integrator_init_early(void);
int integrator_init(bool is_cp);
void integrator_reserve(void);
+6 −2
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@
#include <asm/mach/time.h>
#include <asm/pgtable.h>

static struct amba_pl010_data integrator_uart_data;
#include "common.h"

#ifdef CONFIG_ATAGS

#define INTEGRATOR_RTC_IRQ	{ IRQ_RTCINT }
#define INTEGRATOR_UART0_IRQ	{ IRQ_UARTINT0 }
@@ -86,6 +88,8 @@ int __init integrator_init(bool is_cp)
	return 0;
}

#endif

/*
 * On the Integrator platform, the port RTS and DTR are provided by
 * bits in the following SC_CTRLS register bits:
@@ -125,7 +129,7 @@ static void integrator_uart_set_mctrl(struct amba_device *dev, void __iomem *bas
	__raw_writel(ctrlc, SC_CTRLC);
}

static struct amba_pl010_data integrator_uart_data = {
struct amba_pl010_data integrator_uart_data = {
	.set_mctrl = integrator_uart_set_mctrl,
};

Loading