1 README on the Compact Flash for Card Engines
2 ============================================
4 There are three challenges in supporting the CF interface of the Card
5 Engines. First, every IO operation must be followed with IO to
6 another memory region. Second, the slot is wired for one-to-one
7 address mapping *and* it is wired for 16 bit access only. Second, the
8 interrupt request line from the CF device isn't wired.
10 The IOBARRIER issue is covered in README.IOBARRIER. This isn't an
11 onerous problem. Enough said here.
13 The addressing issue is solved in the
14 arch/arm/mach-lh7a40x/ide-lpd7a40x.c file with some awkward
15 work-arounds. We implement a special SELECT_DRIVE routine that is
16 called before the IDE driver performs its own SELECT_DRIVE. Our code
17 recognizes that the SELECT register cannot be modified without also
18 writing a command. It send an IDLE_IMMEDIATE command on selecting a
19 drive. The function also prevents drive select to the slave drive
20 since there can be only one. The awkward part is that the IDE driver,
21 even though we have a select procedure, also attempts to change the
22 drive by writing directly the SELECT register. This attempt is
23 explicitly blocked by the OUTB function--not pretty, but effective.
25 The lack of interrupts is a more serious problem. Even though the CF
26 card is fast when compared to a normal IDE device, we don't know that
27 the CF is really flash. A user could use one of the very small hard
28 drives being shipped with a CF interface. The IDE code includes a
29 check for interfaces that lack an IRQ. In these cases, submitting a
30 command to the IDE controller is followed by a call to poll for
31 completion. If the device isn't immediately ready, it schedules a
32 timer to poll again later.