[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 12 Dec 2011 10:23:48 +0100
From: Wolfgang Grandegger <wg@...ndegger.com>
To: info@...ax.com
CC: Oliver Hartkopp <socketcan@...tkopp.net>, netdev@...r.kernel.org,
linux-can@...r.kernel.org, socketcan-users@...ts.berlios.de,
IreneV <boir1@...dex.ru>,
Stanislav Yelenskiy <stanislavelensky@...oo.com>
Subject: Re: [PATCH net-next v2 2/4] can: cc770: add legacy ISA bus driver
for the CC770 and AN82527
Hi Wolfgang,
On 12/11/2011 07:33 PM, Wolfgang Zarre wrote:
> Hello Wolfgang,
>> On 12/07/2011 02:42 PM, Wolfgang Grandegger wrote:
>>> Hi Wolfgang,
>>>
>>> On 12/06/2011 10:08 PM, Wolfgang Zarre wrote:
...
>>>> Let me know if You need more or some other tests.
>>>
>>> You could provoke some state changes or bus-off conditions to see if the
>>> berr-counter shows reasonable results. I'm currently consolidating and
>>> unifying error state and bus-off handling. Would be nice if you could do
>>> some further tests when I have the patches ready...
>>
>> I just pushed the mentioned modifications to the "devel" branch of my
>> "wg-linux-can-next" [1] repository. You can get it as shown below:
>>
>> $ git clone --reference=<some-recent-net-next-tree> \
>> git://gitorious.org/~wgrandegger/linux-can/wg-linux-can-next.git
>> $ git checkout -b devel devel
>>
>> [1] https://gitorious.org/~wgrandegger/linux-can/wg-linux-can-next
>>
>> Wolfgang.
>
> OK, I was trying so far and You will find below the results.
> Just FYI the states on the PLC side couldn't be verified because the
> function
> provided by the manufacturer is not working at all and CAN analyser was not
> available.
>
> We are running CANopen and therefore the PLC will send automatically a
> heartbeat.
>
> I produced the bus-off state through a short circuit between L/H which was
> working as expected.
>
> A bit odd was that on the second try I had to reload the module
> because a ip down/up was not enough.
Oops, not good.
> Let me know if You would need further tests or different procedure.
The state changes are reported via error messages, which you can list
with "candump -td -e any,0:0,#FFFFFFFF" with the attached patch.
> Producing L/H short circuit for 2 seconds
> dmesg:
> [ 885.409058] cc770_isa cc770_isa.0: can0: status interrupt (0x5b)
> [ 885.420475] cc770_isa cc770_isa.0: can0: status interrupt (0xc5)
> [ 885.420496] cc770_isa cc770_isa.0: can0: bus-off
>
> ip -d -s link show can0
> 4: can0: <NO-CARRIER,NOARP,UP,ECHO> mtu 16 qdisc pfifo_fast state DOWN
> qlen 10
> link/can
> can state BUS-OFF (berr-counter tx 92 rx 103) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 1
> RX: bytes packets errors dropped overrun mcast
> 544 382 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 30 29 0 0 0 0
>
> Sending and receiving stops.
>
> Trying to recover on PC:
> ip link set can0 down;
> ip -d -s link show can0
> 4: can0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN qlen 10
> link/can
> can state STOPPED (berr-counter tx 92 rx 103) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 1
> RX: bytes packets errors dropped overrun mcast
> 544 382 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 30 29 0 1 0 0
>
> ip link set can0 up type can bitrate 500000;
> dmesg:
> [ 1090.937778] cc770_isa cc770_isa.0: can0: setting BTR0=0x00 BTR1=0x1c
> [ 1090.937869] cc770_isa cc770_isa.0: can0: Message object 15 for RX
> data, RTR, SFF and EFF
> [ 1090.937885] cc770_isa cc770_isa.0: can0: Message object 11 for TX
> data, RTR, SFF and EFF
> [ 1090.938050] ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
> [ 1090.940769] cc770_isa cc770_isa.0: can0: status interrupt (0x5)
>
> ip -d -s link show can0
> 4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP qlen 10
> link/can
> can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 1
> RX: bytes packets errors dropped overrun mcast
> 552 383 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 30 29 0 1 0 0
>
> PLC in unknown state but not sending heartbeat,
> Rebooting PLC
Hm, does it work if you do the bus-off recovery manually with?
# ip link set can0 up type can restart
... or automatically with?
# ip link set can0 up type can restart-ms 5000
Anyway, rebooting/reloading should never be necessary. I will check on
my i82572.
> -----------------------------------------
> Disconnecting cable for around 4 seconds:
>
> dmesg:
> [ 2339.660283] cc770_isa cc770_isa.0: can0: status interrupt (0x5b)
>
> ip -d -s link show can0
> 6: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN
> qlen 10
> link/can
> can state ERROR-WARNING (berr-counter tx 128 rx 128) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 0
> RX: bytes packets errors dropped overrun mcast
> 459 298 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 193 192 0 0 0 0
TX and RX berr-counter are >= 128. I wonder why error passive was not
reached.
> Connecting again:
> ip -d -s link show can0
> 6: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN
> qlen 10
> link/can
> can state ERROR-WARNING (berr-counter tx 120 rx 0) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 0
> RX: bytes packets errors dropped overrun mcast
> 473 311 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 200 200 0 0 0 0
>
> After some time (around 125 seconds):
> dmesg:
> [ 2387.172008] cc770_isa cc770_isa.0: can0: status interrupt (0x18)
> ip -d -s link show can0
> 6: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN
> qlen 10
> link/can
> can state ERROR-ACTIVE (berr-counter tx 29 rx 0) restart-ms 0
> bitrate 500000 sample-point 0.875
> tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
> cc770: tseg1 1..16 tseg2 1..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 1 0 0
> RX: bytes packets errors dropped overrun mcast
> 616 447 0 0 0 0
> TX: bytes packets errors dropped carrier collsns
> 291 291 0 0 0 0
OK, the state is back to error active (counter < 96).
Thanks for testing...
Wolfgang.
View attachment "0001-candump-add-support-for-error-states-going-backward.patch" of type "text/x-diff" (1250 bytes)
Powered by blists - more mailing lists