mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
m68knommu: remove duplicate ColdFire mcf_autovector() code
Each of the ColdFire CPU platform code that used the old style interrupt controller had its own copy of the mcf_autovector() function. They are all the same, remove them all and create a single function in the common coldfire/intc.c code. Signed-off-by: Greg Ungerer <gerg@uclinux.org>
This commit is contained in:
parent
5938084bd8
commit
5187995f0a
7 changed files with 27 additions and 83 deletions
|
@ -68,23 +68,6 @@ static void __init m5206_uarts_init(void)
|
|||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
volatile unsigned char *mbar;
|
||||
unsigned char icr;
|
||||
|
||||
if ((vec >= 25) && (vec <= 31)) {
|
||||
vec -= 25;
|
||||
mbar = (volatile unsigned char *) MCF_MBAR;
|
||||
icr = MCFSIM_ICR_AUTOVEC | (vec << 3);
|
||||
*(mbar + MCFSIM_ICR1 + vec) = icr;
|
||||
vec = 0x1 << (vec + 1);
|
||||
mcf_setimr(mcf_getimr() & ~vec);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(unsigned int timer, unsigned int level)
|
||||
{
|
||||
volatile unsigned char *icrp;
|
||||
|
|
|
@ -69,23 +69,6 @@ static void __init m5206e_uarts_init(void)
|
|||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
volatile unsigned char *mbar;
|
||||
unsigned char icr;
|
||||
|
||||
if ((vec >= 25) && (vec <= 31)) {
|
||||
vec -= 25;
|
||||
mbar = (volatile unsigned char *) MCF_MBAR;
|
||||
icr = MCFSIM_ICR_AUTOVEC | (vec << 3);
|
||||
*(mbar + MCFSIM_ICR1 + vec) = icr;
|
||||
vec = 0x1 << (vec + 1);
|
||||
mcf_setimr(mcf_getimr() & ~vec);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(unsigned int timer, unsigned int level)
|
||||
{
|
||||
volatile unsigned char *icrp;
|
||||
|
|
|
@ -66,20 +66,6 @@ static void __init m5249_uarts_init(void)
|
|||
}
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
volatile unsigned char *mbar;
|
||||
|
||||
if ((vec >= 25) && (vec <= 31)) {
|
||||
mbar = (volatile unsigned char *) MCF_MBAR;
|
||||
vec = 0x1 << (vec - 24);
|
||||
*(mbar + MCFSIM_AVR) |= vec;
|
||||
mcf_setimr(mcf_getimr() & ~vec);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(unsigned int timer, unsigned int level)
|
||||
|
|
|
@ -148,13 +148,6 @@ void mcf_disableall(void)
|
|||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
/* Everything is auto-vectored on the 5272 */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(int timer, int level)
|
||||
{
|
||||
volatile unsigned long *icrp;
|
||||
|
|
|
@ -83,20 +83,6 @@ static void __init m5307_uarts_init(void)
|
|||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
volatile unsigned char *mbar;
|
||||
|
||||
if ((vec >= 25) && (vec <= 31)) {
|
||||
mbar = (volatile unsigned char *) MCF_MBAR;
|
||||
vec = 0x1 << (vec - 24);
|
||||
*(mbar + MCFSIM_AVR) |= vec;
|
||||
mcf_setimr(mcf_getimr() & ~vec);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(unsigned int timer, unsigned int level)
|
||||
{
|
||||
volatile unsigned char *icrp;
|
||||
|
|
|
@ -74,20 +74,6 @@ static void __init m5407_uarts_init(void)
|
|||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_autovector(unsigned int vec)
|
||||
{
|
||||
volatile unsigned char *mbar;
|
||||
|
||||
if ((vec >= 25) && (vec <= 31)) {
|
||||
mbar = (volatile unsigned char *) MCF_MBAR;
|
||||
vec = 0x1 << (vec - 24);
|
||||
*(mbar + MCFSIM_AVR) |= vec;
|
||||
mcf_setimr(mcf_getimr() & ~vec);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mcf_settimericr(unsigned int timer, unsigned int level)
|
||||
{
|
||||
volatile unsigned char *icrp;
|
||||
|
|
|
@ -18,6 +18,33 @@
|
|||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/*
|
||||
* Define the vector numbers for the basic 7 interrupt sources.
|
||||
* These are often referred to as the "external" interrupts in
|
||||
* the ColdFire documentation (for the early ColdFire cores at least).
|
||||
*/
|
||||
#define EIRQ1 25
|
||||
#define EIRQ7 31
|
||||
|
||||
/*
|
||||
* Interrupts can be "vectored" on the ColdFire cores that support this old
|
||||
* interrupt controller. That is, the device raising the interrupt can also
|
||||
* supply the vector number to interrupt through. The AVR register of the
|
||||
* interrupt controller enables or disables this for each external interrupt,
|
||||
* so provide generic support for this. Setting this up is out-of-band for
|
||||
* the interrupt system API's, and needs to be done by the driver that
|
||||
* supports this device. Very few devices actually use this.
|
||||
*/
|
||||
void mcf_autovector(int irq)
|
||||
{
|
||||
if ((irq >= EIRQ1) && (irq <= EIRQ7)) {
|
||||
u8 avec;
|
||||
avec = __raw_readb(MCF_MBAR + MCFSIM_AVR);
|
||||
avec |= (0x1 << (irq - EIRQ1 + 1));
|
||||
__raw_writeb(avec, MCF_MBAR + MCFSIM_AVR);
|
||||
}
|
||||
}
|
||||
|
||||
static void intc_irq_mask(unsigned int irq)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue