AnsweredAssumed Answered

MPC885 SPI : Linux2.6.35

Question asked by Sebastien BLAVIER on May 11, 2015
Latest reply on May 28, 2015 by Pavel Chubakov

Hello,

 

I've got a problem with SPI bus and MPC885. I'm stuck in driver (mpc8xxx.c) when i send data over the bus with spidev.

 

 

In first i configure th SPI in the DTS and the spi_mpc_8xxx fails due to cpm_muram_alloc_fixed function.

  • cpm_muram_alloc_fixed ko due to  rh_alloc_fixed =>no empty block (blk == null return line 563 rheap.c)

So i try to path the driver and replace spi_base_ofs = cpm_muram_alloc_fixed(iprop[2], 2); by spi_base_ofs = iprop[2]; in the function mpc8xxx_spi_cpm_get_pram

Now the driver is launched :

alloc irq_desc for 24 on node 0

alloc kstat_irqs on node 0

irq: irq 5 on host /soc@fa200000/cpm@9c0/interrupt-controller@930 mapped to virtual irq 24

mpc8xxx_spi fa200aa0.spi: Error fixed 1ssss: 6 4

mpc8xxx_spi fa200aa0.spi: at 0xc52a6aa0 (irq = 24), CPM1 mode

 

and i can see my spi device :

[/]# ls /dev/s*

  /dev/spidev32766.0

 

 

But when i try to send data with spidev my driver is sutck. no clock and data on ctrl pins no irq.

The driver wait on wait_for_completion(&mpc8xxx_spi->done);

 

  • ARCH setup:

{CPM_PORTB, 28, CPM_PIN_OUTPUT}, /* SPI MI */

{CPM_PORTB, 29, CPM_PIN_OUTPUT},  /* SPI MO */

{CPM_PORTB, 30, CPM_PIN_OUTPUT},  /* SPI CLK */ 

{CPM_PORTB, 31, CPM_PIN_OUTPUT | CPM_PIN_GPIO},  /* SPISEL : PBPAR == 0 */     

 

  • DTS :

spi@aa0 {

#address-cells = <1>;

#size-cells = <0>;

device_type = "spi";

compatible = "fsl,spi","fsl,cpm1-spi";

reg = <0xaa0 0x12 0x3d80 0x30>;

gpios = <&CPM1_PIO_B 18 0>;

interrupts = <5>;

interrupt-parent = <&CPM_PIC>;

max3421@0 {

compatible = "spi,spidev";

reg = <0>;

spi-max-frequency = <3000000>; /* 3 MHz */

}

Outcomes