Using the loop feature of the DMA controller on MPC8544 DS

Sebastian Siewior linuxppc-embedded at ml.breakpoint.cc
Thu Mar 13 04:20:24 EST 2008


* Timur Tabi | 2008-03-12 10:58:21 [-0500]:

>Sebastian Siewior wrote:
>> Hello,
>> 
>> I have here a MPC8544 DS board and I tried to utilise the dma
>> controller. For the transfers I need set the [S|D]AHE bit in the Mode
>> Register. This seems to be implemented but is currently unused in the
>> driver. 
>
>Which driver?  Zhang's DMA driver?
Yes, fsldma.c, that's the only one in tree for the CPU unless there are
some hidden trees :)

>I haven't looked at Zhang's driver, but I just spotted this code:
>
>case FSL_DMA_IP_85XX:
>	new_fsl_chan->toggle_ext_start = fsl_chan_toggle_ext_start;
>	new_fsl_chan->toggle_ext_pause = fsl_chan_toggle_ext_pause;
>case FSL_DMA_IP_83XX:
>	new_fsl_chan->set_src_loop_size = fsl_chan_set_src_loop_size;
>	new_fsl_chan->set_dest_loop_size = fsl_chan_set_dest_loop_size;
>
>(Don't let the missing "break" from FSL_DMA_IP_85XX fool you)
>
>So it looks like there already is a way to set the SAHE and DAHE bits.  I guess
>this is what you mean by "seems to be implemented but is currently unused"?
Yes it is :)

>> I haven't found a way how to set this bit except globally for
>> the whole channel.
>
>Well, the SAHE bit is part of the MR register, so it can only apply to a whole
>channel.  This is a hardware limitation.
Argh, I hoped that could be hidden at the offset 0x1c in the link
descriptor which is marked as reserved.

>> Is it possible to solve this nicely except dedicating one channel for
>> such an operation?
>
>No.
I need to hold src & dst each with one and two bytes makes four
channels. And then I need one for normal transfers. So I guess I have to
talk to my HW ppl that we have to change something :)

Sebastian


More information about the Linuxppc-embedded mailing list