Re: [PATCH V5 0/4] Microchip mcp25xxfd can controller driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Martin,

Am 10.01.19 um 17:37 schrieb kernel@xxxxxxxxxxxxxxxx:
> Hi Wolfgang,
> 
>> On 10.01.2019, at 09:30, Wolfgang Grandegger <wg@xxxxxxxxxxxxxx> wrote:
>>
>> Hello Martin,
>>
>> Do I understand you correctly, this is the basic driver and the
>> optimizations are not yet included!? Well, I expected less code than
>> last time but now it's spit up in smaller files, at least. Will try to
>> do a review this week…
>>
> This is the basic driver - split into the 3 main components:
> * core (essentially basic module management, identification and clock/ram)
> * GPIO handling of the GPIO/INT pins
> * CAN
> 
> where CAN is obviously the biggest, but it is also split out into
> * basic
> * interrupt handling
> * fifo setup
> * CAN Frame reception
> * CAN Frame transmission
> 
> The place that we could split out more is reducing the fifo-setup
> to a single TX and RX fifo, but the cost of ripping out that portion 
> (and itsstructural dependencies) is quite high just to produce code 
> that is never actually run…
> 
> So I have made the driver all minimal removing all the big performance
> optimizations while leaving the basic multi-fifo setup in the config 
> - mostly in mcp25xxfd_can_fifo and some in mcp25xxfd_can_rx and 
> mcp25xxfd_can_tx.
> 
> I have to admit that there is one optimization that is in can_tx that
> could get separated out into a separate patch.
> 
> That is the function mcp25xxfd_can_int_handle_tefif_oportunistic
> the removal of which would simplify mcp25xxfd_can_int_handle_tefif
> slightly, but that code should be fairly simple to read.
> 
> If you want, then I can move this to a separate patch in the next
> version.
> 
> Basic setup, interrupt handling, SERR error handling and others
> would still need to happen in the initial driver, so that is a 
> big chunk of the overall driver.
> 
> There is already a new patchset in the pipeline that:
> * addresses some concerns in mcp_write_then_* with regards to the
>   use of stack variables for transmit/receive buffers 
>   - rewrite of function.
>   (reported by Enrico Scholz)
> * initialization of 2 variables in priv (reported by Enrico Scholz).
> * adds 4 optimization patches:
>   * can: mcp25xxfd: optimize tef reads reading multiple TEFs in one go
>   * can: mcp25xxfd: optimize SPI reads of FIFOs in can2.0 mode
>   * can: mcp25xxfd: add prediction of CanFD frames sizes based on history
>   * can: mcp25xxfd: optimize reception of big CanFD frame reception with BRS
> 
> There is a bug with regards to transmission of CanFD with BRS that
> still needs to get fixed before I send out the next version - what
> is the root cause here is unclear (this may be a regression in the
> calculation of data bitrate that gives now different SJW values than
> before that impacts the controllers ability to send BRS frames,
> but it could also be something else like TDC (= Transmitter Delay
> Compensation).
> 
> But I guess I shall also wait for further feedback before sending
> out this next version.

Yes, please wait for my review!

And there is the DEBUG_FS stuff increasing code size as well. We should
start with *one* robust and efficient solution working for most CAN
use-cases.

Wolfgang.



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux