All of lore.kernel.org
 help / color / mirror / Atom feed
* socketCAN mcp2515 - rx buffer overflow
@ 2012-03-08 13:09 Gianluca
  2012-03-08 14:11 ` Marc Kleine-Budde
  0 siblings, 1 reply; 3+ messages in thread
From: Gianluca @ 2012-03-08 13:09 UTC (permalink / raw)
  To: linux-can

Hi All,
I'm using an embedded Armadeus evaluation board - apf51 - with the mcp2515 CAN 
controller (via spi) and linux 2.6.38.8.
As a preliminar test I tried to dump all the traffic on our CANbus running at 
500Kb/s. 
Apparently, everything works fine, I can see messages being captured without 
problems.
But if I enable the error reporting I can see different ERRORFRAME messages to 
be reported ('rx buffer overflow'). 

This is how I configure the interface:

modprobe can
modprobe can_dev
modprobe can_raw
modprobe mcp251x
ip link set can0 up type can bitrate 500000
ip link set can0 txqueuelen 20

This is the operation detail:

$ ip -details -statistics link show can0
4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 20
    link/can 
    can state ERROR-ACTIVE restart-ms 0 
    bitrate 500000 sample-point 0.875 
    tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
    mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000
    re-started bus-errors arbit-lost error-warn error-pass bus-off
    0          0          0          0          0          0         
    RX: bytes  packets  errors  dropped overrun mcast   
    13086      2308     213     0       213     0      
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0      

dmesg output:

can: controller area network core (rev 20090105 abi 8)
NET: Registered protocol family 29
CAN device driver interface
can: raw protocol (rev 20090105)
PM: Adding info for No Bus:can0
mcp251x spi1.0: probed
mcp251x spi1.0: CNF: 0x00 0xb5 0x01
PM: Adding info for No Bus:vcs3
PM: Adding info for No Bus:vcsa3
eth0: no IPv6 routers present

This is an example of candump results:

 candump -ta -d -e any,0:0,#FFFFFFFF
 (125.351573)  can0     15004  [2] 00 00
 (126.193767)  can0    400060  [4] FF FF 00 00
 (126.194163)  can0    600060  [4] FF FF 00 00
 (126.194469)  can0  20000004  [8] 00 01 00 00 00 00 00 00   ERRORFRAME
        controller-problem{rx-overflow}
 (126.194743)  can0    E00060  [4] FF FF 00 00
 (126.195018)  can0   1200060  [4] FF FF 00 00
 (126.195323)  can0   1800060  [4] FF FF 00 00
 (126.195567)  can0  20000004  [8] 00 01 00 00 00 00 00 00   ERRORFRAME
        controller-problem{rx-overflow}
 (126.195842)  can0      5067  [6] 01 00 00 00 00 00
 (126.196086)  can0   1A00060  [4] FF FF 00 00
 (126.196361)  can0  20000004  [8] 00 01 00 00 00 00 00 00   ERRORFRAME
        controller-problem{rx-overflow}
 (126.196635)  can0    200060  [4] FF FF 00 00
 (126.196818)  can0      D067  [6] 01 00 00 00 00 00
 (126.197093)  can0      F066  [6] 01 00 00 00 00 00
 (126.197337)  can0  20000004  [8] 00 01 00 00 00 00 00 00   ERRORFRAME
        controller-problem{rx-overflow}
 (126.197673)  can0      7067  [6] 01 00 00 00 00 00
 (126.197978)  can0      B067  [6] 01 00 00 00 00 00
 (126.198253)  can0     19066  [6] 01 00 00 00 00 00
 (126.198558)  can0     1B066  [6] 01 00 00 00 00 00
 (126.198894)  can0     11066  [6] 01 00 00 00 00 00
 (126.199168)  can0      3067  [6] 01 00 00 00 00 00
 (126.199443)  can0  20000004  [8] 00 01 00 00 00 00 00 00   ERRORFRAME
        controller-problem{rx-overflow}
 (126.199718)  can0     17066  [6] 01 00 00 00 00 00
 (126.199931)  can0     1D066  [6] 01 00 00 00 00 00
 (126.200328)  can0     1F066  [6] 01 00 00 00 00 00
^C$ 

Increasing the buffer size was not possible:

$ candump -r 200000 -ta -d -e any,0:0,#FFFFFFFF
The socket receive buffer size was adjusted due to /proc/sys/net/core/rmem_max.

$ cat /proc/sys/net/core/rmem_max 
108544

Thanks in advance,
Gianluca


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: socketCAN mcp2515 - rx buffer overflow
  2012-03-08 13:09 socketCAN mcp2515 - rx buffer overflow Gianluca
@ 2012-03-08 14:11 ` Marc Kleine-Budde
  2012-03-08 14:35   ` Gianluca
  0 siblings, 1 reply; 3+ messages in thread
From: Marc Kleine-Budde @ 2012-03-08 14:11 UTC (permalink / raw)
  To: Gianluca; +Cc: linux-can

[-- Attachment #1: Type: text/plain, Size: 1211 bytes --]

On 03/08/2012 02:09 PM, Gianluca wrote:
> Hi All,
> I'm using an embedded Armadeus evaluation board - apf51 - with the mcp2515 CAN 
> controller (via spi) and linux 2.6.38.8.

Using an SPI attached CAN controller is a really bad choice. Try is
upgrading to mx53, which has as far as I know one or even two internal
flexcan cores, an option for you? Another option is to attach a local
bus capable controller like the SJA1000 to your CPU, or use an USB
dongle or a PCMCIA card.

The next thing is the SPI driver on the (mainline) mx51. If I remember
correctly the mainline kernel doesn't support DMA for the SPI driver
yet. I don't know if the freescale kernel does. Depending on your kernel
version there are some knobs to tune the PIO SPI driver, mainly to
increase the priority of the SPI task.

Last but not least, there is a not yet mainlined improved version of the
mcp2515 driver around.

regards, Marc

-- 
Pengutronix e.K.                  | Marc Kleine-Budde           |
Industrial Linux Solutions        | Phone: +49-231-2826-924     |
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |




[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: socketCAN mcp2515 - rx buffer overflow
  2012-03-08 14:11 ` Marc Kleine-Budde
@ 2012-03-08 14:35   ` Gianluca
  0 siblings, 0 replies; 3+ messages in thread
From: Gianluca @ 2012-03-08 14:35 UTC (permalink / raw)
  To: linux-can

Marc Kleine-Budde <mkl <at> pengutronix.de> writes:

> Using an SPI attached CAN controller is a really bad choice. Try is
> upgrading to mx53, which has as far as I know one or even two internal
> flexcan cores, an option for you? Another option is to attach a local
> bus capable controller like the SJA1000 to your CPU, or use an USB
> dongle or a PCMCIA card.
> 
> The next thing is the SPI driver on the (mainline) mx51. If I remember
> correctly the mainline kernel doesn't support DMA for the SPI driver
> yet. I don't know if the freescale kernel does. Depending on your kernel
> version there are some knobs to tune the PIO SPI driver, mainly to
> increase the priority of the SPI task.
> 
> Last but not least, there is a not yet mainlined improved version of the
> mcp2515 driver around.
> 
> regards, Marc

Ok, it does not sound to be stable and safe solution. Maybe using the SJA1000 
would be a better choice for our project. Thanks for the help.

Gianluca





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-03-08 14:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-08 13:09 socketCAN mcp2515 - rx buffer overflow Gianluca
2012-03-08 14:11 ` Marc Kleine-Budde
2012-03-08 14:35   ` Gianluca

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.