:p
atchew
Login
Being sucked into another higher prioritized project in the mid of July, my work on preparations for adding support of the newly available esd CAN-USB/3 to esd_usb.c came to a halt. Let's start again ... Here is a attempt to resend a slightly overhauled and split into two pieces version of my patch series from Fri, 8 Jul 2022. Link to the patch series in July 2022: https://lore.kernel.org/all/20220708181235.4104943-1-frank.jungclaus@esd.eu/ Frank Jungclaus (1): can: esd_usb: Allow REC and TEC to return to zero drivers/net/can/usb/esd_usb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) base-commit: 3755b56a9b8ff8f1a6a21a979cc215c220401278 -- 2.25.1
We don't get any further EVENT from an esd CAN USB device for changes on REC or TEC while those counters converge to 0 (with ecc == 0). So when handling the "Back to Error Active"-event force txerr = rxerr = 0, otherwise the berr-counters might stay on values like 95 forever ... Also, to make life easier during the ongoing development a netdev_dbg() has been introduced to allow dumping error events send by an esd CAN USB device. Signed-off-by: Frank Jungclaus <frank.jungclaus@esd.eu> --- drivers/net/can/usb/esd_usb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/usb/esd_usb.c b/drivers/net/can/usb/esd_usb.c index XXXXXXX..XXXXXXX 100644 --- a/drivers/net/can/usb/esd_usb.c +++ b/drivers/net/can/usb/esd_usb.c @@ -XXX,XX +XXX,XX @@ static void esd_usb_rx_event(struct esd_usb_net_priv *priv, if (id == ESD_EV_CAN_ERROR_EXT) { u8 state = msg->msg.rx.data[0]; - u8 ecc = msg->msg.rx.data[1]; + u8 ecc = msg->msg.rx.data[1]; u8 rxerr = msg->msg.rx.data[2]; u8 txerr = msg->msg.rx.data[3]; + netdev_dbg(priv->netdev, + "CAN_ERR_EV_EXT: dlc=%#02x state=%02x ecc=%02x rec=%02x tec=%02x\n", + msg->msg.rx.dlc, state, ecc, rxerr, txerr); + skb = alloc_can_err_skb(priv->netdev, &cf); if (skb == NULL) { stats->rx_dropped++; @@ -XXX,XX +XXX,XX @@ static void esd_usb_rx_event(struct esd_usb_net_priv *priv, break; default: priv->can.state = CAN_STATE_ERROR_ACTIVE; + txerr = 0; + rxerr = 0; break; } } else { -- 2.25.1
Being sucked into another higher prioritized project in the mid of July, my work on preparations for adding support of the newly available esd CAN-USB/3 to esd_usb.c came to a halt. Let's start again ... Here is a attempt to resend a slightly overhauled and split into two pieces version of my patch series from Fri, 8 Jul 2022. Link to the patch series in July 2022: https://lore.kernel.org/all/20220708181235.4104943-1-frank.jungclaus@esd.eu/ * Changelog * v1 -> v2: * Added a "Fixes:" tag * Removed an unrelated indentation * Link to v1: https://lore.kernel.org/all/20221124203806.3034897-1-frank.jungclaus@esd.eu/ Frank Jungclaus (1): can: esd_usb: Allow REC and TEC to return to zero drivers/net/can/usb/esd_usb.c | 6 ++++++ 1 file changed, 6 insertions(+) base-commit: 3755b56a9b8ff8f1a6a21a979cc215c220401278 -- 2.25.1
We don't get any further EVENT from an esd CAN USB device for changes on REC or TEC while those counters converge to 0 (with ecc == 0). So when handling the "Back to Error Active"-event force txerr = rxerr = 0, otherwise the berr-counters might stay on values like 95 forever ... Also, to make life easier during the ongoing development a netdev_dbg() has been introduced to allow dumping error events send by an esd CAN USB device. Fixes: 96d8e90382dc ("can: Add driver for esd CAN-USB/2 device") Signed-off-by: Frank Jungclaus <frank.jungclaus@esd.eu> --- drivers/net/can/usb/esd_usb.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/can/usb/esd_usb.c b/drivers/net/can/usb/esd_usb.c index XXXXXXX..XXXXXXX 100644 --- a/drivers/net/can/usb/esd_usb.c +++ b/drivers/net/can/usb/esd_usb.c @@ -XXX,XX +XXX,XX @@ static void esd_usb_rx_event(struct esd_usb_net_priv *priv, u8 rxerr = msg->msg.rx.data[2]; u8 txerr = msg->msg.rx.data[3]; + netdev_dbg(priv->netdev, + "CAN_ERR_EV_EXT: dlc=%#02x state=%02x ecc=%02x rec=%02x tec=%02x\n", + msg->msg.rx.dlc, state, ecc, rxerr, txerr); + skb = alloc_can_err_skb(priv->netdev, &cf); if (skb == NULL) { stats->rx_dropped++; @@ -XXX,XX +XXX,XX @@ static void esd_usb_rx_event(struct esd_usb_net_priv *priv, break; default: priv->can.state = CAN_STATE_ERROR_ACTIVE; + txerr = 0; + rxerr = 0; break; } } else { -- 2.25.1