[Xenomai-core] Re: CAN updates questions
Jan Kiszka wrote: Hi Wolfgang, as one result of a hacking session on a PPC405 with SJA1000 on board I applied two minor fixes to rtcan_isa.c to SVN, see end of mail for reference. The first one gave an interesting effect on big-endian because irq is an integer, the second one reveals that we should do some multiport test with the ISA driver soon. OK, I see. Unfortunately I do not have a ISA CAN device for testing. Questions arose regarding the meaning of rtcan_device.can_sys_clock (BTW, comment in rtcan_dev.h is wrong). What clock rate does it describe? For the SJA1000 drivers its obviously clock/2. I'm asking because of a) the output in rtcan_calc_bit_time() and b) the module parameter of rtcan_isa and its description. We first hacked 16 MHz into the latter yesterday as I didn't recall quickly enough that our Phytec board also runs at 16 MHZ, thus the default value of 8 MHZ was already correct. Confused? At least we were... You have to define the real CAN system clock, which is 16/2 = 8 Mhz for most SJA 1000 hardware even if the oscillator is running at 16 MHz. I will add some reasonable note to rtcan_dev.h And another suggestion: In order make module names shorter, what about the renaming xeno_rtcan* - xeno_can*? Fine for me. Then we will soon have to discuss how to deal with a rtcan_isa derivative that uses ioremapped memory instead of ports (naming, separation or integration). We could add a generic device similar to ISA (or extend ISA accordingly). Jan Wolfgang. -- Index: ksrc/drivers/can/sja1000/rtcan_isa.c === --- ksrc/drivers/can/sja1000/rtcan_isa.c(Revision 1564) +++ ksrc/drivers/can/sja1000/rtcan_isa.c(Arbeitskopie) @@ -56,7 +56,7 @@ static u8 ocr[RTCAN_ISA_MAX_DEV]; static u8 cdr[RTCAN_ISA_MAX_DEV]; compat_module_short_param_array(isa, RTCAN_ISA_MAX_DEV); -compat_module_byte_param_array(irq, RTCAN_ISA_MAX_DEV); +compat_module_int_param_array(irq, RTCAN_ISA_MAX_DEV); compat_module_int_param_array(clock, RTCAN_ISA_MAX_DEV); compat_module_byte_param_array(ocr, RTCAN_ISA_MAX_DEV); compat_module_byte_param_array(cdr, RTCAN_ISA_MAX_DEV); @@ -187,9 +187,10 @@ static void __exit rtcan_isa_exit(void) int i; struct rtcan_device *dev; -for (i = 0, dev = rtcan_isa_devs[i]; -i RTCAN_ISA_MAX_DEV dev != NULL; -i++) { +for (i = 0; i RTCAN_ISA_MAX_DEV; i++) { + dev = rtcan_isa_devs[i]; + if (!dev) + continue; rtcan_sja1000_unregister(dev); } } ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] Re: CAN updates questions
Hi Wolfgang, Wolfgang Grandegger wrote: You have to define the real CAN system clock, which is 16/2 = 8 Mhz for most SJA 1000 hardware even if the oscillator is running at 16 MHz. I will add some reasonable note to rtcan_dev.h Is there any special reason for this? Wouldn't it be more meaningful to pass the SJA1000 externally applied clock frequency? I can imagine that others will also run into this issue as Jan and I did yesterday ;-) Then we will soon have to discuss how to deal with a rtcan_isa derivative that uses ioremapped memory instead of ports (naming, separation or integration). We could add a generic device similar to ISA (or extend ISA accordingly). The SJA1000 isa driver is very simple - and so is the modified version for the memory mapped SJA1000. I think that merging both ways of access to the SJA1000 into a single driver will make the code much more dirty. I would prefer different source files (= different drivers). It would be a compromise to add support for boards that use some kind of indirect addressing to access the SJA1000 (address + data register) into the isa and mem versions of the driver. One more proposal: I think many (old) ISA drivers name the module parameter for the ISA io port io instead of isa. For the memory mapped SJA1000 driver, I'd like to call the parameter mem. Matthias ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] Re: CAN updates questions
Wolfgang Grandegger wrote: Hi Matthias, Matthias Fuchs wrote: Hi Wolfgang, Wolfgang Grandegger wrote: You have to define the real CAN system clock, which is 16/2 = 8 Mhz for most SJA 1000 hardware even if the oscillator is running at 16 MHz. I will add some reasonable note to rtcan_dev.h Is there any special reason for this? Wouldn't it be more meaningful to pass the SJA1000 externally applied clock frequency? I can imagine that others will also run into this issue as Jan and I did yesterday ;-) The frequency is used to calculate reasonable bit-timing parameters, not only for SJA 1000. It's used in a similar way in the Linux socket CAN driver. But the value passed via module parameter clock could be the more meaning full clock frequency for SJA 1000 drivers, of course. Then we will soon have to discuss how to deal with a rtcan_isa derivative that uses ioremapped memory instead of ports (naming, separation or integration). We could add a generic device similar to ISA (or extend ISA accordingly). The SJA1000 isa driver is very simple - and so is the modified version for the memory mapped SJA1000. I think that merging both ways of access to the SJA1000 into a single driver will make the code much more dirty. I would prefer different source files (= different drivers). I agree. It would be a compromise to add support for boards that use some kind of indirect addressing to access the SJA1000 (address + data register) into the isa and mem versions of the driver. Fine if this could be done in a generic way. We also should add a generic PCI driver sooner than later. One more proposal: I think many (old) ISA drivers name the module parameter for the ISA io port io instead of isa. For the memory mapped SJA1000 driver, I'd like to call the parameter mem. Well, I cannot remember why I used the name isa. Common is io or port or ioport, indeed. io and mem or ioport and iomem would be fine for me. Wolfgang. ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core