Stop using immap_t for cpm offset on 85xx

In the future the offsets to various blocks may not be in same location.
Move to using CFG_MPC85xx_CPM_ADDR as the base of the CPM registers
instead of getting it via &immap->im_cpm.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
Kumar Gala 2007-11-28 00:36:33 -06:00
parent f59b55a5b8
commit aafeefbdb8
8 changed files with 87 additions and 88 deletions

View File

@ -37,7 +37,7 @@ DECLARE_GLOBAL_DATA_PTR;
void void
m8560_cpm_reset(void) m8560_cpm_reset(void)
{ {
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile ulong count; volatile ulong count;
gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET); gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);
@ -50,11 +50,11 @@ m8560_cpm_reset(void)
/* /*
* Reset CPM * Reset CPM
*/ */
immr->im_cpm.im_cpm_cp.cpcr = CPM_CR_RST; cpm->im_cpm_cp.cpcr = CPM_CR_RST;
count = 0; count = 0;
do { /* Spin until command processed */ do { /* Spin until command processed */
__asm__ __volatile__ ("eieio"); __asm__ __volatile__ ("eieio");
} while ((immr->im_cpm.im_cpm_cp.cpcr & CPM_CR_FLG) && ++count < 1000000); } while ((cpm->im_cpm_cp.cpcr & CPM_CR_FLG) && ++count < 1000000);
} }
/* Allocate some memory from the dual ported ram. /* Allocate some memory from the dual ported ram.
@ -64,7 +64,7 @@ m8560_cpm_reset(void)
uint uint
m8560_cpm_dpalloc(uint size, uint align) m8560_cpm_dpalloc(uint size, uint align)
{ {
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
uint retloc; uint retloc;
uint align_mask, off; uint align_mask, off;
uint savebase; uint savebase;
@ -86,7 +86,7 @@ m8560_cpm_dpalloc(uint size, uint align)
retloc = gd->dp_alloc_base; retloc = gd->dp_alloc_base;
gd->dp_alloc_base += size; gd->dp_alloc_base += size;
memset((void *)&(immr->im_cpm.im_dprambase[retloc]), 0, size); memset((void *)&(cpm->im_dprambase[retloc]), 0, size);
return(retloc); return(retloc);
} }
@ -120,16 +120,16 @@ m8560_cpm_hostalloc(uint size, uint align)
void void
m8560_cpm_setbrg(uint brg, uint rate) m8560_cpm_setbrg(uint brg, uint rate)
{ {
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile uint *bp; volatile uint *bp;
/* This is good enough to get SMCs running..... /* This is good enough to get SMCs running.....
*/ */
if (brg < 4) { if (brg < 4) {
bp = (uint *)&(immr->im_cpm.im_cpm_brg1.brgc1); bp = (uint *)&(cpm->im_cpm_brg1.brgc1);
} }
else { else {
bp = (uint *)&(immr->im_cpm.im_cpm_brg2.brgc5); bp = (uint *)&(cpm->im_cpm_brg2.brgc5);
brg -= 4; brg -= 4;
} }
bp += brg; bp += brg;
@ -142,16 +142,16 @@ m8560_cpm_setbrg(uint brg, uint rate)
void void
m8560_cpm_fastbrg(uint brg, uint rate, int div16) m8560_cpm_fastbrg(uint brg, uint rate, int div16)
{ {
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile uint *bp; volatile uint *bp;
/* This is good enough to get SMCs running..... /* This is good enough to get SMCs running.....
*/ */
if (brg < 4) { if (brg < 4) {
bp = (uint *)&(immr->im_cpm.im_cpm_brg1.brgc1); bp = (uint *)&(cpm->im_cpm_brg1.brgc1);
} }
else { else {
bp = (uint *)&(immr->im_cpm.im_cpm_brg2.brgc5); bp = (uint *)&(cpm->im_cpm_brg2.brgc5);
brg -= 4; brg -= 4;
} }
bp += brg; bp += brg;
@ -167,14 +167,14 @@ m8560_cpm_fastbrg(uint brg, uint rate, int div16)
void void
m8560_cpm_extcbrg(uint brg, uint rate, uint extclk, int pinsel) m8560_cpm_extcbrg(uint brg, uint rate, uint extclk, int pinsel)
{ {
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile uint *bp; volatile uint *bp;
if (brg < 4) { if (brg < 4) {
bp = (uint *)&(immr->im_cpm.im_cpm_brg1.brgc1); bp = (uint *)&(cpm->im_cpm_brg1.brgc1);
} }
else { else {
bp = (uint *)&(immr->im_cpm.im_cpm_brg2.brgc5); bp = (uint *)&(cpm->im_cpm_brg2.brgc5);
brg -= 4; brg -= 4;
} }
bp += brg; bp += brg;

View File

@ -59,7 +59,7 @@ static void config_qe_ioports(void)
#endif #endif
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
static void config_8560_ioports (volatile immap_t * immr) void config_8560_ioports (volatile ccsr_cpm_t * cpm)
{ {
int portnum; int portnum;
@ -99,7 +99,7 @@ static void config_8560_ioports (volatile immap_t * immr)
} }
if (pmsk != 0) { if (pmsk != 0) {
volatile ioport_t *iop = ioport_addr (immr, portnum); volatile ioport_t *iop = ioport_addr (cpm, portnum);
uint tpmsk = ~pmsk; uint tpmsk = ~pmsk;
/* /*
@ -143,7 +143,7 @@ void cpu_init_f (void)
#ifdef CONFIG_CPM2 #ifdef CONFIG_CPM2
config_8560_ioports(immap); config_8560_ioports((ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR);
#endif #endif
/* Map banks 0 and 1 to the FLASH banks 0 and 1 at preliminary /* Map banks 0 and 1 to the FLASH banks 0 and 1 at preliminary

View File

@ -230,8 +230,8 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
{ {
struct ether_fcc_info_s * info = dev->priv; struct ether_fcc_info_s * info = dev->priv;
int i; int i;
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile ccsr_cpm_cp_t *cp = &(immr->im_cpm.im_cpm_cp); volatile ccsr_cpm_cp_t *cp = &(cpm->im_cpm_cp);
fcc_enet_t *pram_ptr; fcc_enet_t *pram_ptr;
unsigned long mem_addr; unsigned long mem_addr;
@ -242,35 +242,35 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
/* 28.9 - (1-2): ioports have been set up already */ /* 28.9 - (1-2): ioports have been set up already */
/* 28.9 - (3): connect FCC's tx and rx clocks */ /* 28.9 - (3): connect FCC's tx and rx clocks */
immr->im_cpm.im_cpm_mux.cmxuar = 0; /* ATM */ cpm->im_cpm_mux.cmxuar = 0; /* ATM */
immr->im_cpm.im_cpm_mux.cmxfcr = (immr->im_cpm.im_cpm_mux.cmxfcr & ~info->cmxfcr_mask) | cpm->im_cpm_mux.cmxfcr = (cpm->im_cpm_mux.cmxfcr & ~info->cmxfcr_mask) |
info->cmxfcr_value; info->cmxfcr_value;
/* 28.9 - (4): GFMR: disable tx/rx, CCITT CRC, set Mode Ethernet */ /* 28.9 - (4): GFMR: disable tx/rx, CCITT CRC, set Mode Ethernet */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32; cpm->im_cpm_fcc1.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32;
} else if (info->ether_index == 1) { } else if (info->ether_index == 1) {
immr->im_cpm.im_cpm_fcc2.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32; cpm->im_cpm_fcc2.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32;
} else if (info->ether_index == 2) { } else if (info->ether_index == 2) {
immr->im_cpm.im_cpm_fcc3.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32; cpm->im_cpm_fcc3.gfmr = FCC_GFMR_MODE_ENET | FCC_GFMR_TCRC_32;
} }
/* 28.9 - (5): FPSMR: enable full duplex, select CCITT CRC for Ethernet,MII */ /* 28.9 - (5): FPSMR: enable full duplex, select CCITT CRC for Ethernet,MII */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC; cpm->im_cpm_fcc1.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC;
} else if (info->ether_index == 1){ } else if (info->ether_index == 1){
immr->im_cpm.im_cpm_fcc2.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC; cpm->im_cpm_fcc2.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC;
} else if (info->ether_index == 2){ } else if (info->ether_index == 2){
immr->im_cpm.im_cpm_fcc3.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC; cpm->im_cpm_fcc3.fpsmr = CFG_FCC_PSMR | FCC_PSMR_ENCRC;
} }
/* 28.9 - (6): FDSR: Ethernet Syn */ /* 28.9 - (6): FDSR: Ethernet Syn */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.fdsr = 0xD555; cpm->im_cpm_fcc1.fdsr = 0xD555;
} else if (info->ether_index == 1) { } else if (info->ether_index == 1) {
immr->im_cpm.im_cpm_fcc2.fdsr = 0xD555; cpm->im_cpm_fcc2.fdsr = 0xD555;
} else if (info->ether_index == 2) { } else if (info->ether_index == 2) {
immr->im_cpm.im_cpm_fcc3.fdsr = 0xD555; cpm->im_cpm_fcc3.fdsr = 0xD555;
} }
/* reset indeces to current rx/tx bd (see eth_send()/eth_rx()) */ /* reset indeces to current rx/tx bd (see eth_send()/eth_rx()) */
@ -296,7 +296,7 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
rtx.txbd[TX_BUF_CNT - 1].cbd_sc |= BD_ENET_TX_WRAP; rtx.txbd[TX_BUF_CNT - 1].cbd_sc |= BD_ENET_TX_WRAP;
/* 28.9 - (7): initialize parameter ram */ /* 28.9 - (7): initialize parameter ram */
pram_ptr = (fcc_enet_t *)&(immr->im_cpm.im_dprambase[info->proff_enet]); pram_ptr = (fcc_enet_t *)&(cpm->im_dprambase[info->proff_enet]);
/* clear whole structure to make sure all reserved fields are zero */ /* clear whole structure to make sure all reserved fields are zero */
memset((void*)pram_ptr, 0, sizeof(fcc_enet_t)); memset((void*)pram_ptr, 0, sizeof(fcc_enet_t));
@ -385,14 +385,14 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
/* 28.9 - (8)(9): clear out events in FCCE */ /* 28.9 - (8)(9): clear out events in FCCE */
/* 28.9 - (9): FCCM: mask all events */ /* 28.9 - (9): FCCM: mask all events */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.fcce = ~0x0; cpm->im_cpm_fcc1.fcce = ~0x0;
immr->im_cpm.im_cpm_fcc1.fccm = 0; cpm->im_cpm_fcc1.fccm = 0;
} else if (info->ether_index == 1) { } else if (info->ether_index == 1) {
immr->im_cpm.im_cpm_fcc2.fcce = ~0x0; cpm->im_cpm_fcc2.fcce = ~0x0;
immr->im_cpm.im_cpm_fcc2.fccm = 0; cpm->im_cpm_fcc2.fccm = 0;
} else if (info->ether_index == 2) { } else if (info->ether_index == 2) {
immr->im_cpm.im_cpm_fcc3.fcce = ~0x0; cpm->im_cpm_fcc3.fcce = ~0x0;
immr->im_cpm.im_cpm_fcc3.fccm = 0; cpm->im_cpm_fcc3.fccm = 0;
} }
/* 28.9 - (10-12): we don't use ethernet interrupts */ /* 28.9 - (10-12): we don't use ethernet interrupts */
@ -413,11 +413,11 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
/* 28.9 - (14): enable tx/rx in gfmr */ /* 28.9 - (14): enable tx/rx in gfmr */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR; cpm->im_cpm_fcc1.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR;
} else if (info->ether_index == 1) { } else if (info->ether_index == 1) {
immr->im_cpm.im_cpm_fcc2.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR; cpm->im_cpm_fcc2.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR;
} else if (info->ether_index == 2) { } else if (info->ether_index == 2) {
immr->im_cpm.im_cpm_fcc3.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR; cpm->im_cpm_fcc3.gfmr |= FCC_GFMR_ENT | FCC_GFMR_ENR;
} }
return 1; return 1;
@ -426,15 +426,15 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
static void fec_halt(struct eth_device* dev) static void fec_halt(struct eth_device* dev)
{ {
struct ether_fcc_info_s * info = dev->priv; struct ether_fcc_info_s * info = dev->priv;
volatile immap_t *immr = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
/* write GFMR: disable tx/rx */ /* write GFMR: disable tx/rx */
if(info->ether_index == 0) { if(info->ether_index == 0) {
immr->im_cpm.im_cpm_fcc1.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR); cpm->im_cpm_fcc1.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR);
} else if(info->ether_index == 1) { } else if(info->ether_index == 1) {
immr->im_cpm.im_cpm_fcc2.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR); cpm->im_cpm_fcc2.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR);
} else if(info->ether_index == 2) { } else if(info->ether_index == 2) {
immr->im_cpm.im_cpm_fcc3.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR); cpm->im_cpm_fcc3.gfmr &= ~(FCC_GFMR_ENT | FCC_GFMR_ENR);
} }
} }

View File

@ -88,17 +88,17 @@ DECLARE_GLOBAL_DATA_PTR;
int serial_init (void) int serial_init (void)
{ {
volatile immap_t *im = (immap_t *)CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
volatile ccsr_cpm_scc_t *sp; volatile ccsr_cpm_scc_t *sp;
volatile scc_uart_t *up; volatile scc_uart_t *up;
volatile cbd_t *tbdf, *rbdf; volatile cbd_t *tbdf, *rbdf;
volatile ccsr_cpm_cp_t *cp = &(im->im_cpm.im_cpm_cp); volatile ccsr_cpm_cp_t *cp = &(cpm->im_cpm_cp);
uint dpaddr; uint dpaddr;
/* initialize pointers to SCC */ /* initialize pointers to SCC */
sp = (ccsr_cpm_scc_t *) &(im->im_cpm.im_cpm_scc[SCC_INDEX]); sp = (ccsr_cpm_scc_t *) &(cpm->im_cpm_scc[SCC_INDEX]);
up = (scc_uart_t *)&(im->im_cpm.im_dprambase[PROFF_SCC]); up = (scc_uart_t *)&(cpm->im_dprambase[PROFF_SCC]);
/* Disable transmitter/receiver. /* Disable transmitter/receiver.
*/ */
@ -107,8 +107,8 @@ int serial_init (void)
/* put the SCC channel into NMSI (non multiplexd serial interface) /* put the SCC channel into NMSI (non multiplexd serial interface)
* mode and wire the selected SCC Tx and Rx clocks to BRGx (15-15). * mode and wire the selected SCC Tx and Rx clocks to BRGx (15-15).
*/ */
im->im_cpm.im_cpm_mux.cmxscr = \ cpm->im_cpm_mux.cmxscr = \
(im->im_cpm.im_cpm_mux.cmxscr&~CMXSCR_MASK)|CMXSCR_VALUE; (cpm->im_cpm_mux.cmxscr&~CMXSCR_MASK)|CMXSCR_VALUE;
/* Set up the baud rate generator. /* Set up the baud rate generator.
*/ */
@ -123,7 +123,7 @@ int serial_init (void)
/* Set the physical address of the host memory buffers in /* Set the physical address of the host memory buffers in
* the buffer descriptors. * the buffer descriptors.
*/ */
rbdf = (cbd_t *)&(im->im_cpm.im_dprambase[dpaddr]); rbdf = (cbd_t *)&(cpm->im_dprambase[dpaddr]);
rbdf->cbd_bufaddr = (uint) (rbdf+2); rbdf->cbd_bufaddr = (uint) (rbdf+2);
rbdf->cbd_sc = BD_SC_EMPTY | BD_SC_WRAP; rbdf->cbd_sc = BD_SC_EMPTY | BD_SC_WRAP;
tbdf = rbdf + 1; tbdf = rbdf + 1;
@ -201,14 +201,13 @@ serial_putc(const char c)
{ {
volatile scc_uart_t *up; volatile scc_uart_t *up;
volatile cbd_t *tbdf; volatile cbd_t *tbdf;
volatile immap_t *im; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
if (c == '\n') if (c == '\n')
serial_putc ('\r'); serial_putc ('\r');
im = (immap_t *)CFG_IMMR; up = (scc_uart_t *)&(cpm->im_dprambase[PROFF_SCC]);
up = (scc_uart_t *)&(im->im_cpm.im_dprambase[PROFF_SCC]); tbdf = (cbd_t *)&(cpm->im_dprambase[up->scc_genscc.scc_tbase]);
tbdf = (cbd_t *)&(im->im_cpm.im_dprambase[up->scc_genscc.scc_tbase]);
/* Wait for last character to go. /* Wait for last character to go.
*/ */
@ -235,12 +234,11 @@ serial_getc(void)
{ {
volatile cbd_t *rbdf; volatile cbd_t *rbdf;
volatile scc_uart_t *up; volatile scc_uart_t *up;
volatile immap_t *im; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
unsigned char c; unsigned char c;
im = (immap_t *)CFG_IMMR; up = (scc_uart_t *)&(cpm->im_dprambase[PROFF_SCC]);
up = (scc_uart_t *)&(im->im_cpm.im_dprambase[PROFF_SCC]); rbdf = (cbd_t *)&(cpm->im_dprambase[up->scc_genscc.scc_rbase]);
rbdf = (cbd_t *)&(im->im_cpm.im_dprambase[up->scc_genscc.scc_rbase]);
/* Wait for character to show up. /* Wait for character to show up.
*/ */
@ -260,11 +258,10 @@ serial_tstc()
{ {
volatile cbd_t *rbdf; volatile cbd_t *rbdf;
volatile scc_uart_t *up; volatile scc_uart_t *up;
volatile immap_t *im; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
im = (immap_t *)CFG_IMMR; up = (scc_uart_t *)&(cpm->im_dprambase[PROFF_SCC]);
up = (scc_uart_t *)&(im->im_cpm.im_dprambase[PROFF_SCC]); rbdf = (cbd_t *)&(cpm->im_dprambase[up->scc_genscc.scc_rbase]);
rbdf = (cbd_t *)&(im->im_cpm.im_dprambase[up->scc_genscc.scc_rbase]);
return ((rbdf->cbd_sc & BD_SC_EMPTY) == 0); return ((rbdf->cbd_sc & BD_SC_EMPTY) == 0);
} }

View File

@ -55,12 +55,12 @@ int get_clocks (void)
{ {
sys_info_t sys_info; sys_info_t sys_info;
#if defined(CONFIG_CPM2) #if defined(CONFIG_CPM2)
volatile immap_t *immap = (immap_t *) CFG_IMMR; volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR;
uint sccr, dfbrg; uint sccr, dfbrg;
/* set VCO = 4 * BRG */ /* set VCO = 4 * BRG */
immap->im_cpm.im_cpm_intctl.sccr &= 0xfffffffc; cpm->im_cpm_intctl.sccr &= 0xfffffffc;
sccr = immap->im_cpm.im_cpm_intctl.sccr; sccr = cpm->im_cpm_intctl.sccr;
dfbrg = (sccr & SCCR_DFBRG_MSK) >> SCCR_DFBRG_SHIFT; dfbrg = (sccr & SCCR_DFBRG_MSK) >> SCCR_DFBRG_SHIFT;
#endif #endif
get_sys_info (&sys_info); get_sys_info (&sys_info);

View File

@ -1636,9 +1636,11 @@ typedef struct immap {
ccsr_tsec_t im_tsec1; ccsr_tsec_t im_tsec1;
ccsr_tsec_t im_tsec2; ccsr_tsec_t im_tsec2;
ccsr_pic_t im_pic; ccsr_pic_t im_pic;
ccsr_cpm_t im_cpm;
} immap_t; } immap_t;
#define CFG_MPC85xx_CPM_OFFSET (0x80000)
#define CFG_MPC85xx_CPM_ADDR (CFG_IMMR + CFG_MPC85xx_CPM_OFFSET)
extern immap_t *immr; extern immap_t *immr;
#endif /*__IMMAP_85xx__*/ #endif /*__IMMAP_85xx__*/

View File

@ -23,121 +23,121 @@ typedef struct {
extern __inline__ void iopin_set_high (iopin_t * iopin) extern __inline__ void iopin_set_high (iopin_t * iopin)
{ {
volatile uint *datp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdata; volatile uint *datp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdata;
datp[iopin->port * 8] |= (1 << (31 - iopin->pin)); datp[iopin->port * 8] |= (1 << (31 - iopin->pin));
} }
extern __inline__ void iopin_set_low (iopin_t * iopin) extern __inline__ void iopin_set_low (iopin_t * iopin)
{ {
volatile uint *datp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdata; volatile uint *datp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdata;
datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
} }
extern __inline__ uint iopin_is_high (iopin_t * iopin) extern __inline__ uint iopin_is_high (iopin_t * iopin)
{ {
volatile uint *datp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdata; volatile uint *datp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdata;
return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1; return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
} }
extern __inline__ uint iopin_is_low (iopin_t * iopin) extern __inline__ uint iopin_is_low (iopin_t * iopin)
{ {
volatile uint *datp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdata; volatile uint *datp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdata;
return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
} }
extern __inline__ void iopin_set_out (iopin_t * iopin) extern __inline__ void iopin_set_out (iopin_t * iopin)
{ {
volatile uint *dirp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdira; volatile uint *dirp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdira;
dirp[iopin->port * 8] |= (1 << (31 - iopin->pin)); dirp[iopin->port * 8] |= (1 << (31 - iopin->pin));
} }
extern __inline__ void iopin_set_in (iopin_t * iopin) extern __inline__ void iopin_set_in (iopin_t * iopin)
{ {
volatile uint *dirp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdira; volatile uint *dirp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdira;
dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
} }
extern __inline__ uint iopin_is_out (iopin_t * iopin) extern __inline__ uint iopin_is_out (iopin_t * iopin)
{ {
volatile uint *dirp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdira; volatile uint *dirp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdira;
return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1; return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
} }
extern __inline__ uint iopin_is_in (iopin_t * iopin) extern __inline__ uint iopin_is_in (iopin_t * iopin)
{ {
volatile uint *dirp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.pdira; volatile uint *dirp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.pdira;
return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
} }
extern __inline__ void iopin_set_odr (iopin_t * iopin) extern __inline__ void iopin_set_odr (iopin_t * iopin)
{ {
volatile uint *odrp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.podra; volatile uint *odrp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.podra;
odrp[iopin->port * 8] |= (1 << (31 - iopin->pin)); odrp[iopin->port * 8] |= (1 << (31 - iopin->pin));
} }
extern __inline__ void iopin_set_act (iopin_t * iopin) extern __inline__ void iopin_set_act (iopin_t * iopin)
{ {
volatile uint *odrp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.podra; volatile uint *odrp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.podra;
odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
} }
extern __inline__ uint iopin_is_odr (iopin_t * iopin) extern __inline__ uint iopin_is_odr (iopin_t * iopin)
{ {
volatile uint *odrp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.podra; volatile uint *odrp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.podra;
return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1; return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
} }
extern __inline__ uint iopin_is_act (iopin_t * iopin) extern __inline__ uint iopin_is_act (iopin_t * iopin)
{ {
volatile uint *odrp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.podra; volatile uint *odrp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.podra;
return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
} }
extern __inline__ void iopin_set_ded (iopin_t * iopin) extern __inline__ void iopin_set_ded (iopin_t * iopin)
{ {
volatile uint *parp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.ppara; volatile uint *parp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.ppara;
parp[iopin->port * 8] |= (1 << (31 - iopin->pin)); parp[iopin->port * 8] |= (1 << (31 - iopin->pin));
} }
extern __inline__ void iopin_set_gen (iopin_t * iopin) extern __inline__ void iopin_set_gen (iopin_t * iopin)
{ {
volatile uint *parp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.ppara; volatile uint *parp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.ppara;
parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
} }
extern __inline__ uint iopin_is_ded (iopin_t * iopin) extern __inline__ uint iopin_is_ded (iopin_t * iopin)
{ {
volatile uint *parp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.ppara; volatile uint *parp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.ppara;
return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1; return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
} }
extern __inline__ uint iopin_is_gen (iopin_t * iopin) extern __inline__ uint iopin_is_gen (iopin_t * iopin)
{ {
volatile uint *parp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.ppara; volatile uint *parp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.ppara;
return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
} }
extern __inline__ void iopin_set_opt2 (iopin_t * iopin) extern __inline__ void iopin_set_opt2 (iopin_t * iopin)
{ {
volatile uint *sorp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.psora; volatile uint *sorp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.psora;
sorp[iopin->port * 8] |= (1 << (31 - iopin->pin)); sorp[iopin->port * 8] |= (1 << (31 - iopin->pin));
} }
extern __inline__ void iopin_set_opt1 (iopin_t * iopin) extern __inline__ void iopin_set_opt1 (iopin_t * iopin)
{ {
volatile uint *sorp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.psora; volatile uint *sorp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.psora;
sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
} }
extern __inline__ uint iopin_is_opt2 (iopin_t * iopin) extern __inline__ uint iopin_is_opt2 (iopin_t * iopin)
{ {
volatile uint *sorp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.psora; volatile uint *sorp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.psora;
return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1; return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
} }
extern __inline__ uint iopin_is_opt1 (iopin_t * iopin) extern __inline__ uint iopin_is_opt1 (iopin_t * iopin)
{ {
volatile uint *sorp = &((immap_t *) CFG_IMMR)->im_cpm.im_cpm_iop.psora; volatile uint *sorp = &((ccsr_cpm_t *) CFG_MPC85xx_CPM_ADDR)->im_cpm_iop.psora;
return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
} }

View File

@ -26,7 +26,7 @@ typedef struct {
* a 0x20 byte boundary * a 0x20 byte boundary
*/ */
#ifdef CONFIG_MPC85xx #ifdef CONFIG_MPC85xx
#define ioport_addr(im, idx) (ioport_t *)((uint)&((im)->im_cpm.im_cpm_iop) + ((idx)*0x20)) #define ioport_addr(im, idx) (ioport_t *)((uint)&(im->im_cpm_iop) + ((idx)*0x20))
#else #else
#define ioport_addr(im, idx) (ioport_t *)((uint)&(im)->im_ioport + ((idx)*0x20)) #define ioport_addr(im, idx) (ioport_t *)((uint)&(im)->im_ioport + ((idx)*0x20))
#endif #endif