Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

CF ethernet on Intel PXA

2006-10-17
2013-04-08
  • Matteo Curto
    Matteo Curto
    2006-10-17

    I'm working on a development kit based on an Intel PXA270 processor (intel Xscale/ARM) and I'm experiencing great difficulties in making a Compact Flash Ethernet card work.

    The card is a "CF 10Base Ethernet" card based on Tamarack 3299CE chip and it should be an NE2000 compatible card.

    Linux kernel version: 2.6.9-intc1

    cs version: 3.2.8 (the newest version I can use, only for cardmgr and cardctl, since I must use kernel built in services)

    The card seems to be supported by PCMCIA card services and in fact I found in the (very short) instructions in the card manual I had to insert an entry in /etc/pcmcia/config file in order to bind the socket with pcnet_cs driver. I did it but the problem is that I can't read the CIS of the card.

    this is the result of cardctl status command:

    [root@Linux /]#cardctl status
    Socket 0:
    ds_ioctl
    prima di switch
      3.3V 16-bit PC Card
      function 0:
     
     
    and this is ok, but these are infos about the socket...

    when I try "cardctl ident" the function reaches the 200 tuples limit and says there are no card info available.

    I run cardctl on a laptop where I inserted the card and I obtain the following:

    Socket 0:
      vers_1 4.1, "CF", "10Base-Ethernet", "1.0", ""
      funcid network_adapter
      config base 0x03f8 mask 0x0003 last_index 0x23
      cftable_entry 0x20 [default]
        [mwait]
        Vcc Vnom 3300mV Vmin 3V Vmax 3600mV Istatic 100mA
          Iavg 170mA Ipeak 200mA
        timing wait 15us
        io 0x0000-0x001f [lines=5] [8bit] [16bit]
        irq mask 0xffff [level]
      cftable_entry 0x20
        io 0x0300-0x031f [lines=10] [16bit] [range]
      cftable_entry 0x21
        io 0x0320-0x033f [lines=10] [16bit] [range]
      cftable_entry 0x22
        io 0x0340-0x035f [lines=10] [16bit] [range]
      cftable_entry 0x23
        io 0x0360-0x037f [lines=10] [16bit] [range]

    I analyzed the signals on the physical socket with and oscilloscope and I saw they are coherent with timings suggested in PC-CARD and CF-card standards.
    I studied both the PCMCIA how-to and PCMCIA programmer's guide but I think all solutions suggested in chapter 6 of the HOW-TO (for example hard wiring the MAC) start from the fact that I parsed the CIS, but in my case I can't read the CIS. In particular with some printk I see that the two elements of "link[]" vector are always 0 and I think this makes the get_tuple function fail.

    After some googling I found some forums and pieces of code in which infos about the card are inserted in pcnet_cs, but this happens in newer kernels:

    [...]
    PCMCIA_DEVICE_MANF_CARD(0x0149, 0xc1ab)
    [...]

    PCMCIA_DEVICE_PROD_ID12("CF", "10Base-Ethernet", 0x44ebf863, 0x93ae4d79)

    I saw that with newer kernel (2.6.17) the structure dev_link_t has been changed with pcmcia_device one and this makes it difficult for me to insert card information into the driver, in particular I can't understand where I should insert these hex strings.