The ColdFire 5206 and 5206e CPU families are almost identical, we can easily merge the platform support code for them. All the differences are dealt with in the current include/asm/5206sim.h. Signed-off-by: Greg Ungerer <gerg@uclinux.org>tirimbino
parent
171d809df1
commit
f4a5437333
@ -1,18 +0,0 @@ |
||||
#
|
||||
# Makefile for the m68knommu linux kernel.
|
||||
#
|
||||
|
||||
#
|
||||
# If you want to play with the HW breakpoints then you will
|
||||
# need to add define this, which will give you a stack backtrace
|
||||
# on the console port whenever a DBG interrupt occurs. You have to
|
||||
# set up you HW breakpoints to trigger a DBG interrupt:
|
||||
#
|
||||
# ccflags-y := -DTRAP_DBG_INTERRUPT
|
||||
# asflags-y := -DTRAP_DBG_INTERRUPT
|
||||
#
|
||||
|
||||
asflags-$(CONFIG_FULLDEBUG) := -DDEBUGGER_COMPATIBLE_CACHE=1
|
||||
|
||||
obj-y := config.o gpio.o
|
||||
|
@ -1,127 +0,0 @@ |
||||
/***************************************************************************/ |
||||
|
||||
/*
|
||||
* linux/arch/m68knommu/platform/5206e/config.c |
||||
* |
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) |
||||
*/ |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
#include <linux/kernel.h> |
||||
#include <linux/param.h> |
||||
#include <linux/init.h> |
||||
#include <linux/io.h> |
||||
#include <asm/machdep.h> |
||||
#include <asm/coldfire.h> |
||||
#include <asm/mcfsim.h> |
||||
#include <asm/mcfuart.h> |
||||
#include <asm/mcfdma.h> |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
static struct mcf_platform_uart m5206e_uart_platform[] = { |
||||
{ |
||||
.mapbase = MCF_MBAR + MCFUART_BASE1, |
||||
.irq = 73, |
||||
}, |
||||
{ |
||||
.mapbase = MCF_MBAR + MCFUART_BASE2, |
||||
.irq = 74, |
||||
}, |
||||
{ }, |
||||
}; |
||||
|
||||
static struct platform_device m5206e_uart = { |
||||
.name = "mcfuart", |
||||
.id = 0, |
||||
.dev.platform_data = m5206e_uart_platform, |
||||
}; |
||||
|
||||
static struct platform_device *m5206e_devices[] __initdata = { |
||||
&m5206e_uart, |
||||
}; |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
static void __init m5206e_uart_init_line(int line, int irq) |
||||
{ |
||||
if (line == 0) { |
||||
writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
||||
writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); |
||||
mcf_mapirq2imr(irq, MCFINTC_UART0); |
||||
} else if (line == 1) { |
||||
writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
||||
writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); |
||||
mcf_mapirq2imr(irq, MCFINTC_UART1); |
||||
} |
||||
} |
||||
|
||||
static void __init m5206e_uarts_init(void) |
||||
{ |
||||
const int nrlines = ARRAY_SIZE(m5206e_uart_platform); |
||||
int line; |
||||
|
||||
for (line = 0; (line < nrlines); line++) |
||||
m5206e_uart_init_line(line, m5206e_uart_platform[line].irq); |
||||
} |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
static void __init m5206e_timers_init(void) |
||||
{ |
||||
/* Timer1 is always used as system timer */ |
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI3, |
||||
MCF_MBAR + MCFSIM_TIMER1ICR); |
||||
mcf_mapirq2imr(MCF_IRQ_TIMER, MCFINTC_TIMER1); |
||||
|
||||
#ifdef CONFIG_HIGHPROFILE |
||||
/* Timer2 is to be used as a high speed profile timer */ |
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI3, |
||||
MCF_MBAR + MCFSIM_TIMER2ICR); |
||||
mcf_mapirq2imr(MCF_IRQ_PROFILER, MCFINTC_TIMER2); |
||||
#endif |
||||
} |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
void m5206e_cpu_reset(void) |
||||
{ |
||||
local_irq_disable(); |
||||
/* Set watchdog to soft reset, and enabled */ |
||||
__raw_writeb(0xc0, MCF_MBAR + MCFSIM_SYPCR); |
||||
for (;;) |
||||
/* wait for watchdog to timeout */; |
||||
} |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
void __init config_BSP(char *commandp, int size) |
||||
{ |
||||
#if defined(CONFIG_NETtel) |
||||
/* Copy command line from FLASH to local buffer... */ |
||||
memcpy(commandp, (char *) 0xf0004000, size); |
||||
commandp[size-1] = 0; |
||||
#endif /* CONFIG_NETtel */ |
||||
|
||||
mach_reset = m5206e_cpu_reset; |
||||
m5206e_timers_init(); |
||||
m5206e_uarts_init(); |
||||
|
||||
/* Only support the external interrupts on their primary level */ |
||||
mcf_mapirq2imr(25, MCFINTC_EINT1); |
||||
mcf_mapirq2imr(28, MCFINTC_EINT4); |
||||
mcf_mapirq2imr(31, MCFINTC_EINT7); |
||||
} |
||||
|
||||
/***************************************************************************/ |
||||
|
||||
static int __init init_BSP(void) |
||||
{ |
||||
platform_add_devices(m5206e_devices, ARRAY_SIZE(m5206e_devices)); |
||||
return 0; |
||||
} |
||||
|
||||
arch_initcall(init_BSP); |
||||
|
||||
/***************************************************************************/ |
@ -1,49 +0,0 @@ |
||||
/*
|
||||
* Coldfire generic GPIO support |
||||
* |
||||
* (C) Copyright 2009, Steven King <sfking@fdwdc.com> |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation; version 2 of the License. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
*/ |
||||
|
||||
#include <linux/kernel.h> |
||||
#include <linux/init.h> |
||||
|
||||
#include <asm/coldfire.h> |
||||
#include <asm/mcfsim.h> |
||||
#include <asm/mcfgpio.h> |
||||
|
||||
static struct mcf_gpio_chip mcf_gpio_chips[] = { |
||||
{ |
||||
.gpio_chip = { |
||||
.label = "PP", |
||||
.request = mcf_gpio_request, |
||||
.free = mcf_gpio_free, |
||||
.direction_input = mcf_gpio_direction_input, |
||||
.direction_output = mcf_gpio_direction_output, |
||||
.get = mcf_gpio_get_value, |
||||
.set = mcf_gpio_set_value, |
||||
.ngpio = 8, |
||||
}, |
||||
.pddr = (void __iomem *) MCFSIM_PADDR, |
||||
.podr = (void __iomem *) MCFSIM_PADAT, |
||||
.ppdr = (void __iomem *) MCFSIM_PADAT, |
||||
}, |
||||
}; |
||||
|
||||
static int __init mcf_gpio_init(void) |
||||
{ |
||||
unsigned i = 0; |
||||
while (i < ARRAY_SIZE(mcf_gpio_chips)) |
||||
(void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]); |
||||
return 0; |
||||
} |
||||
|
||||
core_initcall(mcf_gpio_init); |
Loading…
Reference in new issue