On Tue, Apr 27, 2010 at 09:48:23AM +0200, Wolfgang Grandegger wrote:
> Oliver Hartkopp wrote:
> > Subhasish Ghosh wrote:
> > 
> >> The CAN controller that I am using allows configuring per-mailbox IDs.
> >> CAN being a broadcast network, this feature reduces the interrupts to
> >> the processor.
> >>
> >> From Documentation/can.txt, what I understand is that the socketcan
> >> interface does not provide any mechanism to configure the h/w for this
> >> purpose (chapter 6.3).
> >>
> >> Instead, the h/w is configured to receive all identifiers and the
> >> filtering is done on the stack (like ti_hecc.c) and to avoid hogging the
> >> processor some interrupt mitigation techniques like NAPI is implemented.
> >>
> >> Isn't this a work around?
I think the mailbox infrastructure is a workaround to sell CAN chips
without the requirement for a decent software infrastructure :-)

Can your CAN chip receive RTR frames and put them to software without the
hardware transmitting something?
> > 
> > 
> > No it's not.
> > 
> > Remember that you're working in a multi-user system now, and therefore it's
> > not defined what all of your user-apps need from the specific CAN bus.
> > 
> > For that reason the implementation of efficient filters is done in the
> > soft-IRQ that's called right after the (hard-) interrupt routine of the CAN
> > driver.
> > 
> > Having a generic CAN driver interface is one of the major motivations for
> > SocketCAN. You really don't want to have hardware-specific ("N mailboxes")
> > configuration interfaces which leads into a maintenance hell.
> 
> Yes, I also do not see a generic way yet to support per mailbox (or
> message object) filtering.
Ack.

I've had some experience with the CAN chip within the c167 infineon cpu, which I
believe is similar to the bosch cc770 can chip.
Such setup with different 'mailboxes' only worked when there is a system-wide
policy defined which CAN id go via which mailbox.

a small piece of history:
Before I found that such policy is _really_ required (although I found this 
nowhere
in the datasheets), I ran into a race condition of the hardware (!).
If you put (in that specific CAN chip) 2 different CANids in TX mailboxes, but 
whose
CANids do match within the global receive mask, and the lowest CAN id is put in 
a 
mailbox after the higher(=lower priority on CAN) CANid, then the CAN chip would 
send
the higher priority CAN id first (=good), but fails to find the correct TX 
mailbox
in the CAN chip. Instead, it marks the first matched mailbox(= higher CAN id, 
which
was not sent!) as transmitted. Subsequently, it finds the second mailbox (with 
the 
CANid that was just sent) as wanting transmission ......

I'm not sure on the precise relationship between CAN id's, or how to configure
the mailboxes (its about 8years ago).
Anyway, I ended up in a CAN frame sent back to back because I used >1 TX 
mailbox.

=> rule 1: only use 1 tx mailbox.

As oliver mentioned, different applications may need different filters on the 
mailbox.
If 2 applications use different filters, you cannot tell if a frame that 
matched the
first filter would not match the second. So, software filtering is still 
required.

The existing software filters are, IMO, way more powerfull that what I have 
seen from
hardware filters.

=> rule 2: use software filtering.
> 
> >> My question is, did I miss something, is there any way to configure the
> >> h/w for this purpose. Is it a good idea if I cook up a sysfs interface
> >> for my driver for this.
> > 
> > 
> > The problem is, that a filtering on driver level affects *every* user in the
> > system.
> 
> Yes, messages rejected by hardware filters are lost.
> 
> > So far no one discovered a problem with the irq-load of CAN drivers in his
> > system. We've been running a 133MHz PowerPC with four SJA1000 controllers 
> > for
> > years ...
> 
> Interrupt load might be an issue, especially on load end systems.
> 
> > If you really(!) get into problems, we should discuss a netlink 
> > configuration
> > option for driver-level CAN-ID filtering (also abstracted from "mailboxes").
> 
> Yes.
> 
> > But please check if it's really needed and if you probably have a different
> > view on the general approach of SocketCAN now.
> 
> Some kind of generic hardware filter support might be useful for some
> corner cases, I think. Does anyone else find it useful?
I have long stopped using hardware filters.
Please note this is only my experience.
If a decent netlink based mechanism would emerge, not affecting
the software filters, and not trying to be intelligent, but just relaying
a system wide policy into a CAN chip, then it would not hurt?
And chips implementing it, could then at least measure their performance gain 
(and
see if it was worth the effort). (This last issue could be measured with some
quick sysfs properties too)
> 
> Wolfgang.
Kurt
> _______________________________________________
> Socketcan-users mailing list
> Socketcan-users@lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/socketcan-users
_______________________________________________
Socketcan-users mailing list
Socketcan-users@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/socketcan-users

Reply via email to