All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] IXXAT SJA_MOD register refuses to set up dual channel cards
@ 2010-07-09 10:26 Peter Soetens
  2010-07-09 10:44 ` Wolfgang Grandegger
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Soetens @ 2010-07-09 10:26 UTC (permalink / raw)
  To: xenomai-help

Hi,

(Xenomai 2.5.2&2.5.3)

I'm testing the rtcan ixxat driver for a dual channel card (PLX
Technology, Inc. Device 2540)

It recognizes the first channel, but refuses to setup the second one
because the SJA_MOD flag is 0x7f instead of 0x21
The SJA_IR and SJA_SR flags read as are what the driver expects.

Any suggestions on what it means and how to fix this ?

Thanks,
Peter


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Xenomai-help] IXXAT SJA_MOD register refuses to set up dual channel cards
  2010-07-09 10:26 [Xenomai-help] IXXAT SJA_MOD register refuses to set up dual channel cards Peter Soetens
@ 2010-07-09 10:44 ` Wolfgang Grandegger
  2010-07-09 13:29   ` Peter Soetens
  0 siblings, 1 reply; 3+ messages in thread
From: Wolfgang Grandegger @ 2010-07-09 10:44 UTC (permalink / raw)
  To: Peter Soetens; +Cc: xenomai-help

Hi Peter,

On 07/09/2010 12:26 PM, Peter Soetens wrote:
> Hi,
> 
> (Xenomai 2.5.2&2.5.3)
> 
> I'm testing the rtcan ixxat driver for a dual channel card (PLX
> Technology, Inc. Device 2540)
> 
> It recognizes the first channel, but refuses to setup the second one
> because the SJA_MOD flag is 0x7f instead of 0x21
> The SJA_IR and SJA_SR flags read as are what the driver expects.

In the Socket-CAN "plx_pci" driver we mask the value with 0xa1:

  0x7f & 0xa1 = 0x21 ==> OK.

See
http://lxr.linux.no/#linux+v2.6.34.1/drivers/net/can/sja1000/plx_pci.c#L223

> Any suggestions on what it means and how to fix this ?

See above. A patch would be nice.

Wolfgang.




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Xenomai-help] IXXAT SJA_MOD register refuses to set up dual channel cards
  2010-07-09 10:44 ` Wolfgang Grandegger
@ 2010-07-09 13:29   ` Peter Soetens
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Soetens @ 2010-07-09 13:29 UTC (permalink / raw)
  To: Wolfgang Grandegger; +Cc: xenomai-help

[-- Attachment #1: Type: text/plain, Size: 859 bytes --]

On Fri, Jul 9, 2010 at 12:44 PM, Wolfgang Grandegger <wg@domain.hid> wrote:
> Hi Peter,
>
> On 07/09/2010 12:26 PM, Peter Soetens wrote:
>> Hi,
>>
>> (Xenomai 2.5.2&2.5.3)
>>
>> I'm testing the rtcan ixxat driver for a dual channel card (PLX
>> Technology, Inc. Device 2540)
>>
>> It recognizes the first channel, but refuses to setup the second one
>> because the SJA_MOD flag is 0x7f instead of 0x21
>> The SJA_IR and SJA_SR flags read as are what the driver expects.
>
> In the Socket-CAN "plx_pci" driver we mask the value with 0xa1:
>
>  0x7f & 0xa1 = 0x21 ==> OK.
>
> See
> http://lxr.linux.no/#linux+v2.6.34.1/drivers/net/can/sja1000/plx_pci.c#L223
>
>> Any suggestions on what it means and how to fix this ?
>
> See above. A patch would be nice.

Your analysis is correct. It works flawlessly now. See attachment.

Peter

[-- Attachment #2: 0001-rtcan-Mask-the-SJA_MOD-register-when-probing-for-cha.patch --]
[-- Type: text/x-patch, Size: 1620 bytes --]

From 5c7bec10b099fd1973394b2a6ca388a5e3742b64 Mon Sep 17 00:00:00 2001
From: Peter Soetens <peter@thesourceworks.com>
Date: Fri, 9 Jul 2010 15:21:53 +0200
Subject: [PATCH] rtcan: Mask the SJA_MOD register when probing for channels

Inspired by the plx_pci.c driver which does the same.
Tested on IXXAT PC-I 04

Signed-off-by: Peter Soetens <peter@thesourceworks.com>
---
 ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c b/ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c
index 5faa763..8c91efd 100644
--- a/ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c
+++ b/ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c
@@ -63,6 +63,7 @@ struct rtcan_ixxat_pci
 #define IXXAT_INTCSR_OFFSET  0x4c /* Offset in PLX9050 conf registers */
 #define IXXAT_INTCSR_SLAVE   0x41 /* LINT1 and PCI interrupt enabled */
 #define IXXAT_INTCSR_MASTER  0x08 /* LINT2 enabled */
+#define IXXAT_SJA_MOD_MASK   0xa1 /* Mask for reading dual/single channel */
 
 /* PCI vender, device and sub-device ID */
 #define IXXAT_PCI_VENDOR_ID  0x10b5
@@ -238,7 +239,7 @@ static int __devinit ixxat_pci_init_one (struct pci_dev *pdev,
     writeb(0x1, base_addr + CHANNEL_MASTER_RESET);
     writeb(0x1, base_addr + CHANNEL_SLAVE_RESET);
     udelay(100);
-    if (readb(base_addr + CHANNEL_OFFSET + SJA_MOD) != 0x21 ||
+    if ( (readb(base_addr + CHANNEL_OFFSET + SJA_MOD) & IXXAT_SJA_MOD_MASK ) != 0x21 ||
 	readb(base_addr + CHANNEL_OFFSET + SJA_SR ) != 0x0c ||
 	readb(base_addr + CHANNEL_OFFSET + SJA_IR ) != 0xe0)
 	channel = CHANNEL_SINGLE;
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-07-09 13:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-09 10:26 [Xenomai-help] IXXAT SJA_MOD register refuses to set up dual channel cards Peter Soetens
2010-07-09 10:44 ` Wolfgang Grandegger
2010-07-09 13:29   ` Peter Soetens

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.