Issue created by Avi Weiss:
https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5654
## Summary
It looks like in `bsps/shared/dev/can/ctucanfd/ctucanfd.c` there are a couple
of bugs in `ctucanfd_err_interrupt` when it’s building the CAN error frame
(`err_frame`).
In this block:
```c
/* Check for RX overflow interrupt */
if ( FIELD_GET( REG_INT_STAT_DOI, isr ) ) {
rtems_can_stats_add_rx_overflows( &chip->chip_stats );
ctucanfd_write32( internal, CTUCANFD_TX_COMMAND, REG_COMMAND_CDO );
err_frame.header.can_id |= CAN_ERR_ID_CRTL;
err_frame.header.flags |= CAN_FRAME_ERR;
err_frame.data[ CAN_ERR_ID_LOSTARB ] |= CAN_ERR_CRTL_RX_OVERFLOW;
}
```
It mixes up an `err_frame.header.can_id` macro with a `err_frame.data` macro.
(`CAN_ERR_ID_LOSTARB` instead of `CAN_ERR_DATA_BYTE_TRX_CTRL`)
This ends up resulting in the wrong index being accessed (`data[2] `instead of
`data[1]`) - so it assigns an error to the wrong byte.
There is also another issue in the same block I think.
When clearing the data overrun, it writes to the wrong register
(`CTUCANFD_TX_COMMAND` instead of `CTUCANFD_COMMAND`)
You can see the correct combination in the upstream linux version at [this
link](https://github.com/torvalds/linux/blob/1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3/drivers/net/can/ctucanfd/ctucanfd_base.c#L960).
`ctucan_rx_poll` is where it handles the RX-overflow part of
`ctucanfd_err_interrupt`.
```c
cf->can_id |= CAN_ERR_CRTL;
cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
...
/* Clear Data Overrun */ ctucan_write32( priv, CTUCANFD_COMMAND,
REG_COMMAND_CDO );
```
(First issue/code also exists in `bsps/shared/dev/can/sja1000/sja1000.c` but it
looks like the 2nd issue is already corrected there or maybe was always
correct).
--
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5654
You're receiving this email because of your account on gitlab.rtems.org.
Unsubscribe from this thread:
https://gitlab.rtems.org/-/sent_notifications/4-9cw4k6j5ibfl7er852c57p82d-1d/unsubscribe
| Manage all notifications: https://gitlab.rtems.org/-/profile/notifications |
Help: https://gitlab.rtems.org/help
_______________________________________________
bugs mailing list
[email protected]
http://lists.rtems.org/mailman/listinfo/bugs