SPI controller hangs in 2.6 and not in 2.4 (on MPC875)

Vitaly Bordug vbordug at ru.mvista.com
Mon Feb 26 18:41:23 EST 2007


On Sun, 25 Feb 2007 20:51:12 +0100
DI BACCO ANTONIO - technolabs wrote:

> Hi Melinda,
> 
> the problem in my case was caused by the following instructions to
> allocate the buffers for SPI controller tx and rx:
> 
>         rxbuffer = (u8*)m8xx_cpm_hostalloc(SPI_MAX_BUFFER_SIZE);  
>         txbuffer = (u8*)m8xx_cpm_hostalloc(SPI_MAX_BUFFER_SIZE); 
>         // Set the bd's rx and tx buffer address pointers
>         rbdf->cbd_bufaddr = virt_to_bus((void
> *)rxbuffer); tbdf->cbd_bufaddr = virt_to_bus((void *)txbuffer);   
> 
> I don't know why (I'm asking an opinion to Vitaly Bordug), I replaced
> the allocation of rx and tx buffers with:
> 
> ...->cbd_bufaddr = __pa(__get_free_page(GFP_KERNEL | GFP_DMA))
> 
Well this is just evil... even if it works :)


> but it will better to use dma_alloc_coherent.
> In my case the use of m8xx_cpm_hostalloc led to an immediate kernel
> hang after giving the start command to the spi controller.
> 
Heh, this case you'lll have to use dpram for the buffers I guess iiuc.

dma_* stuff might work too but I'm not sure. Moreover, it didn't work  for 
me in case of powerpc, where m8xx_cpm_hostalloc made as a placeholder for 
dma_alloc_coherent...




More information about the Linuxppc-embedded mailing list