next up previous Link to 'computer' page
Next: Muramasa SD/MMC card reader Up: Internal Hardware Previous: Muramasa sound (ALi M5455)


Muramasa compact flash (CardBus bridge Ricoh Co Ltd Rl5c476)

Does not work by default with the Kingston 4GB Ultimate (100x) compact flash, but seems to work with, say, a 512MB Sandisk compact flash. See [*]. I have also tested on the stock SuSE 10.1 kernel, and 2.6.17.x (including mm) kernels and 2.6.18-rc2. You need to patch kernels up to at least 2.6.18-rc2.

Jun 29 22:06:12 muramasa kernel: pccard: PCMCIA card inserted into slot 0 

Jun 29 22:06:12 muramasa kernel: cs: memory probe 0xa0000000-0xa0ffffff: clean. 

Jun 29 22:06:12 muramasa kernel: pcmcia: registering new device pcmcia0.0 

Jun 29 22:06:13 muramasa kernel: Probing IDE interface ide2... 

Jun 29 22:06:13 muramasa kernel: hde: CF500, CFA DISK drive 

Jun 29 22:06:13 muramasa kernel: hdf: probing with STATUS(0x50) instead of ALTSTATUS(0x0a) 

Jun 29 22:06:14 muramasa kernel: hdf:

......(variable number of blank lines)........

      , ATA DISK drive Jun 29 22:06:14 muramasa kernel: ide2 at 0x3e0-0x3e7,0x3ee on irq 11 

Jun 29 22:06:14 muramasa kernel: hde: max request size: 128KiB 

Jun 29 22:06:14 muramasa kernel: hde: 8060928 sectors (4127 MB) w/1KiB Cache, CHS=15744/16/32 

Jun 29 22:06:14 muramasa kernel: hde: hde1 

Jun 29 22:06:14 muramasa kernel: hdf: max request size: 512KiB 

Jun 29 22:06:44 muramasa kernel: hdf: lost interrupt 

Sometimes `hdf' is reported to have a ridculously large number of sectors. `hdf' does not exist. This problem does not happen with my 512 MB Sandisk compact flash.

If you install the pcmciautils package, you will find a very useful documentation in /usr/share/doc/packages/pcmciautils/README.SUSE. This documentation suggests trying to exclude various ranges in the default /etc/pcmcia/config.opts file. To actually use any changed values in this file, you either need to reboot the machine or you can `rmmod pcmcia' and `rmmod yenta_socket', before `modprobe pcmcia' and `modprobe yenta_socket'. However, this did not help me consistently. Occasionally, hdf was recognised as an invalid drive.

Upgrading udev to 096-2 (available from http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/suse/i586/ at the time of writing) and which also required me to install libvolume_id and upgrade pcmciautils to 012-14, did not help. However, it is tempting to think that udev may be able to prevent the kernel from probing hdf. Then again, maybe not.

The solution can be found in a post by Chuan-Kai Lin. The post refers to a problem dating back to 2.6.0 release candidates, where some code in drivers/ide/ide_probe.c attempts to handle old Seagate drives. The problem persists at least up to 2.6.18-rc2. The solution is to change the following lines in ide_probe.c (actual_try_to_identify)...

if ((a ^ s) & ~INDEX_STAT) {

 printk(KERN_INFO %s: probing with STATUS(0x%02x) instead of 

  ALTSTATUS(0x%02x)\n, drive->name, s, a);

  /* ancient Seagate drives, broken interfaces */

 hd_status = IDE_STATUS_REG;

} else {

 /* use non-intrusive polling */

 hd_status = IDE_ALTSTATUS_REG;

}

to...

if ((a ^ s) & ~INDEX_STAT) {

 printk(KERN_INFO %s: was going to probe with STATUS(0x%02x) instead of 

  ALTSTATUS(0x%02x) - use non-intrusive polling instead\n, drive->name, s, a);

  /* was to handle ancient Seagate drives, broken interfaces. */

  /* seems to break Muramasa and Kingston 4GB CF, so next line changed */

 hd_status = IDE_ALTSTATUS_REG; /* was IDE_STATUS_REG */

} else {

 /* use non-intrusive polling */

 hd_status = IDE_ALTSTATUS_REG;

}


next up previous Link to 'computer' page
Next: Muramasa SD/MMC card reader Up: Internal Hardware Previous: Muramasa sound (ALi M5455)
David Fong 2011-01-25