From: Marc Kleine-Budde <mkl@pengutronix.de>
To: Dong Aisheng <b29396@freescale.com>, linux-can@vger.kernel.org
Cc: wg@grandegger.com, varkabhadram@gmail.com,
netdev@vger.kernel.org, socketcan@hartkopp.net,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 7/7] can: m_can: workaround for transmit data less than 4 bytes
Date: Mon, 03 Nov 2014 17:48:17 +0100 [thread overview]
Message-ID: <5457B1D1.6080301@pengutronix.de> (raw)
In-Reply-To: <1414579527-31100-7-git-send-email-b29396@freescale.com>
[-- Attachment #1: Type: text/plain, Size: 2685 bytes --]
On 10/29/2014 11:45 AM, Dong Aisheng wrote:
> We meet an IC issue that we have to write the full 8 bytes (whatever
> value for the second word) in Message RAM to avoid bit error for transmit
> data less than 4 bytes.
Is this a SoC or a m_can problem? Are all versions of the SoC/m_can
affected? Is there a m_can version register somewhere?
> Without the workaround, we can easily see the following errors:
> root@imx6qdlsolo:~# ip link set can0 up type can bitrate 1000000
> [ 66.882520] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
> root@imx6qdlsolo:~# cansend can0 123#112233
> [ 66.935640] m_can 20e8000.can can0: Bit Error Uncorrected
>
> Signed-off-by: Dong Aisheng <b29396@freescale.com>
> ---
> drivers/net/can/m_can/m_can.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
> index 219e0e3..f2d9ebe 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -1058,10 +1058,19 @@ static netdev_tx_t m_can_start_xmit(struct sk_buff *skb,
> m_can_fifo_write(priv, 0, M_CAN_FIFO_ID, id);
> m_can_fifo_write(priv, 0, M_CAN_FIFO_DLC, can_len2dlc(cf->len) << 16);
>
> - for (i = 0; i < cf->len; i += 4)
> + for (i = 0; i < cf->len; i += 4) {
> m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(i / 4),
> *(u32 *)(cf->data + i));
>
> + /* FIXME: we meet an IC issue that we have to write the full 8
FIXME usually indicates that the driver needs some work here. Just
describe your hardware bug, you might add a reference to an errata if
available, though.
> + * bytes (whatever value for the second word) in Message RAM to
> + * avoid bit error for transmit data less than 4 bytes
> + */
> + if (cf->len <= 4)
> + m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(i / 4 + 1),
> + 0x0);
This workaround doesn't handle the dlc == 0 case, your error description
isn't completely if this is a problem, too.
It should be possible to change the for loop to go always to 8, or
simply unroll the loop:
/* errata description goes here */
m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(0), *(u32 *)(cf->data + 0));
m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(1), *(u32 *)(cf->data + 4));
> + }
> +
> can_put_echo_skb(skb, dev, 0);
>
> if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
>
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: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: mkl@pengutronix.de (Marc Kleine-Budde)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 7/7] can: m_can: workaround for transmit data less than 4 bytes
Date: Mon, 03 Nov 2014 17:48:17 +0100 [thread overview]
Message-ID: <5457B1D1.6080301@pengutronix.de> (raw)
In-Reply-To: <1414579527-31100-7-git-send-email-b29396@freescale.com>
On 10/29/2014 11:45 AM, Dong Aisheng wrote:
> We meet an IC issue that we have to write the full 8 bytes (whatever
> value for the second word) in Message RAM to avoid bit error for transmit
> data less than 4 bytes.
Is this a SoC or a m_can problem? Are all versions of the SoC/m_can
affected? Is there a m_can version register somewhere?
> Without the workaround, we can easily see the following errors:
> root at imx6qdlsolo:~# ip link set can0 up type can bitrate 1000000
> [ 66.882520] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
> root at imx6qdlsolo:~# cansend can0 123#112233
> [ 66.935640] m_can 20e8000.can can0: Bit Error Uncorrected
>
> Signed-off-by: Dong Aisheng <b29396@freescale.com>
> ---
> drivers/net/can/m_can/m_can.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
> index 219e0e3..f2d9ebe 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -1058,10 +1058,19 @@ static netdev_tx_t m_can_start_xmit(struct sk_buff *skb,
> m_can_fifo_write(priv, 0, M_CAN_FIFO_ID, id);
> m_can_fifo_write(priv, 0, M_CAN_FIFO_DLC, can_len2dlc(cf->len) << 16);
>
> - for (i = 0; i < cf->len; i += 4)
> + for (i = 0; i < cf->len; i += 4) {
> m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(i / 4),
> *(u32 *)(cf->data + i));
>
> + /* FIXME: we meet an IC issue that we have to write the full 8
FIXME usually indicates that the driver needs some work here. Just
describe your hardware bug, you might add a reference to an errata if
available, though.
> + * bytes (whatever value for the second word) in Message RAM to
> + * avoid bit error for transmit data less than 4 bytes
> + */
> + if (cf->len <= 4)
> + m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(i / 4 + 1),
> + 0x0);
This workaround doesn't handle the dlc == 0 case, your error description
isn't completely if this is a problem, too.
It should be possible to change the for loop to go always to 8, or
simply unroll the loop:
/* errata description goes here */
m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(0), *(u32 *)(cf->data + 0));
m_can_fifo_write(priv, 0, M_CAN_FIFO_DATA(1), *(u32 *)(cf->data + 4));
> + }
> +
> can_put_echo_skb(skb, dev, 0);
>
> if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
>
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 |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141103/818246cc/attachment.sig>
next prev parent reply other threads:[~2014-11-03 16:48 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-29 10:45 [PATCH 1/7] can: m_can: fix possible sleep in napi poll Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` [PATCH 2/7] can: m_can: fix the incorrect error messages Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-11-03 16:25 ` Marc Kleine-Budde
2014-11-03 16:25 ` Marc Kleine-Budde
2014-10-29 10:45 ` [PATCH 3/7] can: m_can: add .ndo_change_mtu function Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-11-03 16:49 ` Marc Kleine-Budde
2014-11-03 16:49 ` Marc Kleine-Budde
2014-10-29 10:45 ` [PATCH 4/7] can: m_can: add a bit delay after setting CCCR_INIT bit Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-11-03 16:52 ` Marc Kleine-Budde
2014-11-03 16:52 ` Marc Kleine-Budde
2014-10-29 10:45 ` [PATCH 5/7] can: clear ctrlmode when close candev Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-11-03 16:28 ` Marc Kleine-Budde
2014-11-03 16:28 ` Marc Kleine-Budde
2014-11-03 16:28 ` Marc Kleine-Budde
2014-11-03 18:25 ` Oliver Hartkopp
2014-11-03 18:25 ` Oliver Hartkopp
2014-11-03 18:25 ` Oliver Hartkopp
2014-11-03 20:47 ` Marc Kleine-Budde
2014-11-03 20:47 ` Marc Kleine-Budde
2014-11-04 8:27 ` Dong Aisheng
2014-11-04 8:27 ` Dong Aisheng
2014-11-04 8:27 ` Dong Aisheng
2014-10-29 10:45 ` [PATCH 6/7] can: m_can: update to support CAN FD features Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 19:21 ` Oliver Hartkopp
2014-10-29 19:21 ` Oliver Hartkopp
2014-10-30 2:42 ` Dong Aisheng
2014-10-30 2:42 ` Dong Aisheng
2014-10-30 2:42 ` Dong Aisheng
2014-10-30 20:32 ` Oliver Hartkopp
2014-10-30 20:32 ` Oliver Hartkopp
2014-11-04 7:12 ` Dong Aisheng
2014-11-04 7:12 ` Dong Aisheng
2014-10-29 10:45 ` [PATCH 7/7] can: m_can: workaround for transmit data less than 4 bytes Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-10-29 10:45 ` Dong Aisheng
2014-11-03 16:48 ` Marc Kleine-Budde [this message]
2014-11-03 16:48 ` Marc Kleine-Budde
2014-11-04 8:25 ` Dong Aisheng
2014-11-04 8:25 ` Dong Aisheng
2014-11-04 8:25 ` Dong Aisheng
2014-11-04 9:22 ` Marc Kleine-Budde
2014-11-04 9:22 ` Marc Kleine-Budde
2014-11-04 9:27 ` Dong Aisheng
2014-11-04 9:27 ` Dong Aisheng
2014-11-04 9:27 ` Dong Aisheng
2014-11-04 10:33 ` Marc Kleine-Budde
2014-11-04 10:33 ` Marc Kleine-Budde
2014-11-04 13:13 ` Oliver Hartkopp
2014-11-04 13:13 ` Oliver Hartkopp
2014-11-04 13:28 ` Marc Kleine-Budde
2014-11-04 13:28 ` Marc Kleine-Budde
2014-11-05 2:07 ` Dong Aisheng
2014-11-05 2:07 ` Dong Aisheng
2014-11-05 2:07 ` Dong Aisheng
2014-11-05 2:03 ` Dong Aisheng
2014-11-05 2:03 ` Dong Aisheng
2014-11-05 2:03 ` Dong Aisheng
2014-11-03 16:24 ` [PATCH 1/7] can: m_can: fix possible sleep in napi poll Marc Kleine-Budde
2014-11-03 16:24 ` Marc Kleine-Budde
2014-11-03 17:02 ` Marc Kleine-Budde
2014-11-03 17:02 ` Marc Kleine-Budde
2014-11-03 18:37 ` Oliver Hartkopp
2014-11-03 18:37 ` Oliver Hartkopp
2014-11-03 20:49 ` Marc Kleine-Budde
2014-11-03 20:49 ` Marc Kleine-Budde
2014-11-03 21:12 ` Oliver Hartkopp
2014-11-03 21:12 ` Oliver Hartkopp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5457B1D1.6080301@pengutronix.de \
--to=mkl@pengutronix.de \
--cc=b29396@freescale.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-can@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=socketcan@hartkopp.net \
--cc=varkabhadram@gmail.com \
--cc=wg@grandegger.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.