Thread (36 messages) 36 messages, 3 authors, 2021-08-20

Re: [PATCH v5 2/7] can: bittiming: allow TDC{V,O} to be zero and add can_tdc_const::tdc{v,o,f}_min

flat view

From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: 2021-08-18 12:29:38
Also in: linux-can, lkml

On 18.08.2021 18:22:33, Vincent MAILHOL wrote:
quoted
Backwards compatibility using an old ip tool on a new kernel/driver must
work.
I am not trying to argue against backward compatibility :)
My comment was just to point out that I had other intents as well.
quoted
In case of the mcp251xfd the tdc mode must be activated and tdcv
set to the automatic calculated value and tdco automatically measured.
Sorry but I am not sure if I will follow you. Here, do you mean
that "nothing" should do the "fully automated" calculation?
Sort of.
The use case is the old ip tool with a driver that supports tdc, for
CAN-FD to work it must be configured in fully automated mode.
In your previous message, you said:
quoted
Does it make sense to let "mode auto" without a tdco value switch the
controller into full automatic mode and /* nothing */ not tough the tdc
config at all?
So, you would like this behavior:

| mode auto, no tdco provided -> kernel decides between TDC_AUTO and TDC off.
NACK - mode auto, no tdco -> TDC_AUTO with tdco calculated by the kernel
| mode auto, tdco provided -> TDC_AUTO
ACK - TDC_AUTO with user supplied tdco
| mode manual, tdcv and tdco provided -> TDC_MANUAL
ACK - TDC_MANUAL with tdco and tdcv user provided
| mode off is not needed anymore (redundant with "nothing")
(TDCF left out of the picture intentionally)
NACK - TDC is switched off
| "nothing" -> TDC is off (not touch the tdc config at all)
NACK - do not touch TDC setting, use previous setting
Correct?
See above. Plus a change that addresses your issue 1/ from below.

If driver supports TDC it should be initially brought into TDC auto
mode, if no TDC mode is given. Maybe we need an explizit TDC off to make
that work.
If you do so, I see three issues:

1/ Some of the drivers already implement TDC. Those will
automatically do a calculation as long as FD is on. If "nothing"
now brings TDC off, some users will find themselves with some
error on the bus after the iproute2 update if they continue using
the same command.
Nothing would mean "do not touch" and as TDC auto is default a new ip
would work out of the box. Old ip will work, too. Just failing to decode
TDC_AUTO...
2/ Users will need to read and understand how to use the TDC
parameters of iproute2. And by experience, too many people just
don't read the doc. If I can make the interface transparent and
do the correct thing by default ("nothing"), I prefer to do so.
ACK, see above
3/ Final one is more of a nitpick. The mode auto might result in
TDC being off. If we have a TDC_AUTO flag, I would expect the
auto mode to always set that flag (unless error occurs). I see
this to be slightly counter intuitive (I recognize that my
solution also has some aspects which are not intuitive, I just
want to point here that none are perfect).
What are the corner cases where TDC_AUTO results in TDC off?
To be honest, I really preferred the v1 of this series where
there were no tdc-mode {auto,manual,off} and where the "off"
behavior was controlled by setting TDCO to zero. However, as we
realized, zero is a valid value and thus, I had to add all this
complexity just to allow that damn zero value.
Maybe we should not put the TDC mode _not_ into ctrl-mode, but info a
dedicated tdc-mode (which is not bit-field) inside the struct tdc?

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 |

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help