11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***************************************************************************/
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	linux/arch/m68knommu/platform/5249/config.c
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***************************************************************************/
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/param.h>
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h>
145f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer#include <linux/io.h>
15fa1fc24662d57170259948314b0759376eb75777Greg Ungerer#include <linux/platform_device.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/machdep.h>
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/coldfire.h>
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mcfsim.h>
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***************************************************************************/
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
224a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#ifdef CONFIG_M5249C3
234a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
244a1479b6ec268d527b842878da59712620dca78cGreg Ungererstatic struct resource m5249_smc91x_resources[] = {
254a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	{
264a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.start		= 0xe0000300,
274a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.end		= 0xe0000300 + 0x100,
284a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.flags		= IORESOURCE_MEM,
294a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	},
304a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	{
314a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.start		= MCFINTC2_GPIOIRQ6,
324a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.end		= MCFINTC2_GPIOIRQ6,
334a1479b6ec268d527b842878da59712620dca78cGreg Ungerer		.flags		= IORESOURCE_IRQ,
344a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	},
354a1479b6ec268d527b842878da59712620dca78cGreg Ungerer};
364a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
374a1479b6ec268d527b842878da59712620dca78cGreg Ungererstatic struct platform_device m5249_smc91x = {
384a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	.name			= "smc91x",
394a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	.id			= 0,
404a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	.num_resources		= ARRAY_SIZE(m5249_smc91x_resources),
414a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	.resource		= m5249_smc91x_resources,
424a1479b6ec268d527b842878da59712620dca78cGreg Ungerer};
434a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
444a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#endif /* CONFIG_M5249C3 */
454a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
46fa1fc24662d57170259948314b0759376eb75777Greg Ungererstatic struct platform_device *m5249_devices[] __initdata = {
47fa1fc24662d57170259948314b0759376eb75777Greg Ungerer#ifdef CONFIG_M5249C3
48fa1fc24662d57170259948314b0759376eb75777Greg Ungerer	&m5249_smc91x,
49fa1fc24662d57170259948314b0759376eb75777Greg Ungerer#endif
5091d60417212fa6b100107384c5e4f5663ab69c8fSteven King};
5191d60417212fa6b100107384c5e4f5663ab69c8fSteven King
52fa1fc24662d57170259948314b0759376eb75777Greg Ungerer/***************************************************************************/
5391d60417212fa6b100107384c5e4f5663ab69c8fSteven King
5483ca60094e5e907b8b43c60b4c29b1119604cbb8Steven King#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
5591d60417212fa6b100107384c5e4f5663ab69c8fSteven King
5691d60417212fa6b100107384c5e4f5663ab69c8fSteven Kingstatic void __init m5249_qspi_init(void)
5791d60417212fa6b100107384c5e4f5663ab69c8fSteven King{
5891d60417212fa6b100107384c5e4f5663ab69c8fSteven King	/* QSPI irq setup */
5991d60417212fa6b100107384c5e4f5663ab69c8fSteven King	writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI0,
6091d60417212fa6b100107384c5e4f5663ab69c8fSteven King	       MCF_MBAR + MCFSIM_QSPIICR);
6191d60417212fa6b100107384c5e4f5663ab69c8fSteven King	mcf_mapirq2imr(MCF_IRQ_QSPI, MCFINTC_QSPI);
6291d60417212fa6b100107384c5e4f5663ab69c8fSteven King}
6391d60417212fa6b100107384c5e4f5663ab69c8fSteven King
6483ca60094e5e907b8b43c60b4c29b1119604cbb8Steven King#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
655f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer
665f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer/***************************************************************************/
675f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer
684a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#ifdef CONFIG_M5249C3
694a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
704a1479b6ec268d527b842878da59712620dca78cGreg Ungererstatic void __init m5249_smc91x_init(void)
714a1479b6ec268d527b842878da59712620dca78cGreg Ungerer{
724a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	u32  gpio;
734a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
744a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	/* Set the GPIO line as interrupt source for smc91x device */
754a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	gpio = readl(MCF_MBAR2 + MCFSIM2_GPIOINTENABLE);
764a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	writel(gpio | 0x40, MCF_MBAR2 + MCFSIM2_GPIOINTENABLE);
774a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
784a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	gpio = readl(MCF_MBAR2 + MCFSIM2_INTLEVEL5);
794a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	writel(gpio | 0x04000000, MCF_MBAR2 + MCFSIM2_INTLEVEL5);
804a1479b6ec268d527b842878da59712620dca78cGreg Ungerer}
814a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
824a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#endif /* CONFIG_M5249C3 */
834a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
844a1479b6ec268d527b842878da59712620dca78cGreg Ungerer/***************************************************************************/
854a1479b6ec268d527b842878da59712620dca78cGreg Ungerer
865f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerervoid __init config_BSP(char *commandp, int size)
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
8835aefb2645d1ae7576699b2d7b66d6c9503113fcGreg Ungerer	mach_sched_init = hw_timer_init;
89d894b89bf74322845f776bde4d72b70b58926886Greg Ungerer
904a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#ifdef CONFIG_M5249C3
914a1479b6ec268d527b842878da59712620dca78cGreg Ungerer	m5249_smc91x_init();
924a1479b6ec268d527b842878da59712620dca78cGreg Ungerer#endif
9383ca60094e5e907b8b43c60b4c29b1119604cbb8Steven King#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
9491d60417212fa6b100107384c5e4f5663ab69c8fSteven King	m5249_qspi_init();
9591d60417212fa6b100107384c5e4f5663ab69c8fSteven King#endif
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***************************************************************************/
995f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer
1005f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungererstatic int __init init_BSP(void)
1015f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer{
1025f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer	platform_add_devices(m5249_devices, ARRAY_SIZE(m5249_devices));
1035f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer	return 0;
1045f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer}
1055f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer
1065f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungererarch_initcall(init_BSP);
1075f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer
1085f84bd52f03f8606982c75dfbda8c4cc1b725feeGreg Ungerer/***************************************************************************/
109