RE: Wake up issue about Flexcan driver in v5.4 kernel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> Sent: 2019年11月11日 18:09
> To: Joakim Zhang <qiangqing.zhang@xxxxxxx>; sean@xxxxxxxxxx;
> linux-can@xxxxxxxxxxxxxxx
> Subject: Re: Wake up issue about Flexcan driver in v5.4 kernel
> 
> On 11/11/19 10:48 AM, Joakim Zhang wrote:
> > I came across a strange phenomenon about wake up in Flexcan driver
> > with
> > v5.4 kernel, I connected two i.MX7D-SDB board.
> >
> > I found that CAN frame which try to wake up the system will not be
> > received at another side in order. Like below case:
> >
> > Sender: cangen can0 -vv
> >   can0  4D9   [8]  89 72 0C 5F C8 15 2D 3A
> >   can0  0AA   [8]  B7 DC 14 61 7F A0 8E 40
> >   can0  304   [8]  42 5C D7 3B D6 1D 36 56
> >   can0  0D9   [7]  B0 C3 1B 7B 9B 3A 19
> >   can0  66B   [8]  8A B0 D9 56 00 46 76 48
> >   can0  22D   [8]  44 4B FD 53 B2 D3 A5 33
> >   can0  47E   [8]  B9 6B 72 0B 4C 15 96 72
> >   can0  54C   [3]  3F BE 8F
> >   can0  7C1   [8]  EE A7 B4 11 6C 80 8F 7D
> >   can0  5D6   [5]  EB 20 1E 3E DB
> >   can0  794   [8]  B1 56 9E 13 6D 88 CE 52
> >   can0  584   [1]  08
> >
> >
> >
> > Receiver: candump can0 &
> >   can0  0AA   [8]  B7 DC 14 61 7F A0 8E 40
> >   can0  304   [8]  42 5C D7 3B D6 1D 36 56
> >   can0  0D9   [7]  B0 C3 1B 7B 9B 3A 19
> >   can0  66B   [8]  8A B0 D9 56 00 46 76 48
> >   can0  22D   [8]  44 4B FD 53 B2 D3 A5 33
> >   can0  4D9   [8]  89 72 0C 5F C8 15 2D 3A
> >   can0  47E   [8]  B9 6B 72 0B 4C 15 96 72
> >   can0  54C   [3]  3F BE 8F
> >   can0  7C1   [8]  EE A7 B4 11 6C 80 8F 7D
> >   can0  5D6   [5]  EB 20 1E 3E DB
> >   can0  794   [8]  B1 56 9E 13 6D 88 CE 52
> >   can0  584   [1]  08
> >
> > You can see that wake up frame(can0  4D9   [8]  89 72 0C 5F C8 15 2D
> > 3A) will be received at 6^th , it’s hard to understand.
> 
> - What did you do before wakeup?
>   - Clean reboot?
>   - ifdown/ifup?

	Clean boot

	Sender side:
	ip link set can0 up type can bitrate 1000000
	echo enabled > /sys/bus/platform/drivers/flexcan/30a10000.caower/wakeup
	candump can0 &
	echo mem > /sys/power/state

	Receive side:
	ip link set can0 up type can bitrate 1000000
	cangen can0 -vv

>   - sending other packets?
	No.
> - Does this happen on every wakeup?
	Yes.
> - Is the wake up frame always "received" as 6th frame?
	No, different with different frame gap.
> - Is the situation the same, if you add some delay between the frames,
>   using the "cangen -g option"?
	The situation is different with different "cangen -g option"
> - How big can you make the -g until the frames are received in order
>   again?
	I am not sure, I can do a test later.

> The reception path works like this:
> In the interrupt handler the rx-offload reads all mailboxes based on the iflag
> register. It iterates over all set mailboxes, starting with the first. All mailboxes
> are read including the rx-timestamp, sorted and added into a queue. At the end
> of the IRQ handler the queue is added to the per device queue thats read in the
> NAPI and pushed into the networking stack.
> 
> Maybe something with the timestamp of the first packet is wrong, as the
> counter is only 16 bits wide, it will overflow quite often.
> 
> Maybe you can trace_printk the mailbox number, timestamp and can_id in
> mailbox_read() and analyse output after wakeup. Feel free to post the output
> of the tracer here.

	I also suspect this, but I check the flow of the receive path is the same with v4.14 and v4.19.
	Another thing confused me is that how does the driver handle the counter overflow. If the counter overflow in one round mailbox read, the receive order is not consistent with reality. I do not the handle of this case in driver.
	I will use the trace_printk() to post the output here.

Best Regards,
Joakim Zhang
> regards,
> Marc
> 
> --
> Pengutronix e.K.                 | Marc Kleine-Budde           |
> Embedded Linux                   | https://www.pengutronix.de  |
> Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
> Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |





[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux