041a89a419
Make the ColdFire 5249 MBAR peripheral register definitions absolute addresses, instead of offsets into the region. The various ColdFire parts use different methods to address the internal registers, some are absolute, some are relative to peripheral regions which can be mapped at different address ranges (such as the MBAR and IPSBAR registers). We don't want to deal with this in the code when we are accessing these registers, so make all register definitions the absolute address - factoring out whether it is an offset into a peripheral region. This makes them all consistently defined, and reduces the occasional bugs caused by inconsistent definition of the register addresses. Signed-off-by: Greg Ungerer <gerg@uclinux.org>
109 lines
2.5 KiB
C
109 lines
2.5 KiB
C
/***************************************************************************/
|
|
|
|
/*
|
|
* linux/arch/m68knommu/platform/5249/config.c
|
|
*
|
|
* Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
|
|
*/
|
|
|
|
/***************************************************************************/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/param.h>
|
|
#include <linux/init.h>
|
|
#include <linux/io.h>
|
|
#include <linux/platform_device.h>
|
|
#include <asm/machdep.h>
|
|
#include <asm/coldfire.h>
|
|
#include <asm/mcfsim.h>
|
|
|
|
/***************************************************************************/
|
|
|
|
#ifdef CONFIG_M5249C3
|
|
|
|
static struct resource m5249_smc91x_resources[] = {
|
|
{
|
|
.start = 0xe0000300,
|
|
.end = 0xe0000300 + 0x100,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
{
|
|
.start = MCFINTC2_GPIOIRQ6,
|
|
.end = MCFINTC2_GPIOIRQ6,
|
|
.flags = IORESOURCE_IRQ,
|
|
},
|
|
};
|
|
|
|
static struct platform_device m5249_smc91x = {
|
|
.name = "smc91x",
|
|
.id = 0,
|
|
.num_resources = ARRAY_SIZE(m5249_smc91x_resources),
|
|
.resource = m5249_smc91x_resources,
|
|
};
|
|
|
|
#endif /* CONFIG_M5249C3 */
|
|
|
|
static struct platform_device *m5249_devices[] __initdata = {
|
|
#ifdef CONFIG_M5249C3
|
|
&m5249_smc91x,
|
|
#endif
|
|
};
|
|
|
|
/***************************************************************************/
|
|
|
|
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
|
|
|
static void __init m5249_qspi_init(void)
|
|
{
|
|
/* QSPI irq setup */
|
|
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI0,
|
|
MCFSIM_QSPIICR);
|
|
mcf_mapirq2imr(MCF_IRQ_QSPI, MCFINTC_QSPI);
|
|
}
|
|
|
|
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
|
|
|
/***************************************************************************/
|
|
|
|
#ifdef CONFIG_M5249C3
|
|
|
|
static void __init m5249_smc91x_init(void)
|
|
{
|
|
u32 gpio;
|
|
|
|
/* Set the GPIO line as interrupt source for smc91x device */
|
|
gpio = readl(MCFSIM2_GPIOINTENABLE);
|
|
writel(gpio | 0x40, MCFSIM2_GPIOINTENABLE);
|
|
|
|
gpio = readl(MCFSIM2_INTLEVEL5);
|
|
writel(gpio | 0x04000000, MCFSIM2_INTLEVEL5);
|
|
}
|
|
|
|
#endif /* CONFIG_M5249C3 */
|
|
|
|
/***************************************************************************/
|
|
|
|
void __init config_BSP(char *commandp, int size)
|
|
{
|
|
mach_sched_init = hw_timer_init;
|
|
|
|
#ifdef CONFIG_M5249C3
|
|
m5249_smc91x_init();
|
|
#endif
|
|
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
|
m5249_qspi_init();
|
|
#endif
|
|
}
|
|
|
|
/***************************************************************************/
|
|
|
|
static int __init init_BSP(void)
|
|
{
|
|
platform_add_devices(m5249_devices, ARRAY_SIZE(m5249_devices));
|
|
return 0;
|
|
}
|
|
|
|
arch_initcall(init_BSP);
|
|
|
|
/***************************************************************************/
|