devb-eide and CompactFlash pb


my QNX6 embedded application uses a Compact Flash on IDE. This Compact Flash (which cannot use DMA) is mounted quite early in boot image script, like this:

devb-eide nobmstr verbose &
waitfor /dev/hd0t80 30
mount -w -t qnx4 /dev/hd0t80 /CFG

→ sometimes, /dev/hd0 doesn’t even exist after devb-eide:
devb-eide says:
DISK: Error io_init status 16 (seems to correspond to EBUSY=16 in errno.h)

sloginfo seems to correctly detect Flash, but it says:
eide_mmap_device_io: status != altstatus
eide_command: Busy timeout

What happen to my Flash ? Why is it ‘busy’ ?
Can I change this timeout value ? (I need to have this partition mounted)


This looks like it is possibly bad hardware. Does this happen with all CF devices you have tried or just the one that is currently in the slot?

Yes it happens with all devices.

I found the option ‘timeout’ = I/O request timeout (in devb-eide interface-specific options) which SEEMS to correct the pb:

devb-eide nobmstr timeout=100 & (by default, timeout=10, unit=second)

This seems to work every time with 64Mo / 128Mo DMA/no DMA devices.

Does it make sens ?
I really wonder why devb-eide needs a 100s timeout on an I/O request (a 10s timeout should be long enough, of course !!).

It depends. If the CF device is doing a reclaim when it is first configured then it might need more then 10 seconds before coming back.

How is the performance once the system is up and running (read/write)?

Once the system is running, open+write+close works well (typically several ms for 1ko data).

devb-eide being ran quite early in QNX boot, is it possible that an IDE detection routine executed by the BIOS could block CF internal controller ?

In my BIOS: all diagnostics and test routines are disabled. Options ‘drive assignment order’, ‘boot order’ and ‘ide drive geometry’ are marked ‘Not installed’.
Only the options ‘Primary/secondary Master/Slave PIO mode’ are configured as ‘Auto’.

I try to play with it…