[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fb31bfeb-e7bc-c7f8-db2c-f8d0c531af99@hartkopp.net>
Date: Wed, 27 Jul 2022 22:12:13 +0200
From: Oliver Hartkopp <socketcan@...tkopp.net>
To: Marc Kleine-Budde <mkl@...gutronix.de>, Max Staudt <max@...as.org>
Cc: Dario Binacchi <dario.binacchi@...rulasolutions.com>,
linux-kernel@...r.kernel.org, linux-can@...r.kernel.org,
michael@...rulasolutions.com,
Amarula patchwork <linux-amarula@...rulasolutions.com>,
Jeroen Hofstee <jhofstee@...tronenergy.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Wolfgang Grandegger <wg@...ndegger.com>, netdev@...r.kernel.org
Subject: Re: [RFC PATCH v3 8/9] can: slcan: add support to set bit time
register (btr)
On 27.07.22 20:24, Marc Kleine-Budde wrote:
> On 27.07.2022 19:28:39, Max Staudt wrote:
>> On Wed, 27 Jul 2022 13:30:54 +0200
>> Marc Kleine-Budde <mkl@...gutronix.de> wrote:
>>
>>> As far as I understand, setting the btr is an alternative way to set the
>>> bitrate, right? I don't like the idea of poking arbitrary values into a
>>> hardware from user space.
>>
>> I agree with Marc here.
>>
>> This is a modification across the whole stack, specific to a single
>> device, when there are ways around.
>>
>> If I understand correctly, the CAN232 "S" command sets one of the fixed
>> bitrates, whereas "s" sets the two BTR registers. Now the question is,
>> what do BTR0/BTR1 mean, and what are they? If they are merely a divider
>> in a CAN controller's master clock, like in ELM327, then you could
>>
>> a) Calculate the BTR values from the bitrate userspace requests, or
>
> Most of the other CAN drivers write the BTR values into the register of
> the hardware. How are these BTR values transported into the driver?
>
> There are 2 ways:
>
> 1) - user space configures a bitrate
> - the kernel calculates with the "struct can_bittiming_const" [1] given
> by driver and the CAN clock rate the low level timing parameters.
>
> [1] https://elixir.bootlin.com/linux/v5.18/source/include/uapi/linux/can/netlink.h#L47
>
> 2) - user space configures low level bit timing parameter
> (Sample point in one-tenth of a percent, Time quanta (TQ) in
> nanoseconds, Propagation segment in TQs, Phase buffer segment 1 in
> TQs, Phase buffer segment 2 in TQs, Synchronisation jump width in
> TQs)
> - the kernel calculates the Bit-rate prescaler from the given TQ and
> CAN clock rate
>
> Both ways result in a fully calculated "struct can_bittiming" [2]. The
> driver translates this into the hardware specific BTR values and writes
> the into the registers.
>
> If you know the CAN clock and the bit timing const parameters of the
> slcan's BTR register you can make use of the automatic BTR calculation,
> too. Maybe the framework needs some tweaking if the driver supports both
> fixed CAN bit rate _and_ "struct can_bittiming_const".
>
> [2] https://elixir.bootlin.com/linux/v5.18/source/include/uapi/linux/can/netlink.h#L31
>
>> b) pre-calculate a huge table of possible bitrates and present them
>> all to userspace. Sounds horrible, but that's what I did in can327,
>> haha. Maybe I should have reigned them in a little, to the most
>> useful values.
>
> If your adapter only supports fixed values, then that's the only way to
> go.
>
>> c) just limit the bitrates to whatever seems most useful (like the
>> "S" command's table), and let users complain if they really need
>> something else. In the meantime, they are still free to slcand or
>> minicom to their heart's content before attaching slcan, thanks to
>> your backwards compatibility efforts.
>
> In the early stages of the non-mainline CAN framework we had tables for
> BTR values for some fixed bit rates, but that turned out to be not
> scaleable.
The Microchip CAN BUS Analyzer Tool is another example for fixed bitrates:
https://elixir.bootlin.com/linux/v5.18.14/source/drivers/net/can/usb/mcba_usb.c#L156
So this might be the way to go here too ...
Best regards,
Oliver
>
>> In short, to me, this isn't a deal breaker for your patch series.
>
> Marc
>
Powered by blists - more mailing lists