On Wed, Dec 03, 2003 at 10:25:18AM -0500, Verberk, Bep wrote: > > I'd like a sanity check on a change I am considering to > these macros.... > > I had some difficulty executing these macros > (found in include/asm/processor.h) in a loop, eg: > > #define DMA0_BANKS 4 > #define DCRN_DMA0_BASE 0x100 > #define DCRN_DMA0_CR(bank) (DCRN_DMA0_BASE + (8 * (bank))) > > for(i=0;i<DMA0_BANKS;i++){ > dma0_cr = mfdcr(DCRN_DMA0_CR(i)); > CLEARBITS(dma0_cr, DMA0_CR_PCE); > mtdcr(DCRN_DMA0_CR(i), dma0_cr); > };
You cannot use mtdcr/mfdcr with DCR number changed on run-time. These instructions encode DCR number in their body (look at the instruction format in any 4xx manual). And, yes this is major PITA. The only way (I know) to use dynamic DCR numbers is to have a table with mfdcr/mtdcr instructions for every possible DCR number and jump on the correct one depending on supplied DCR number. Eugene. ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/