I traced a puzzling bug down to the combination of SS_CAP_STATIC_MAP,
finicky hardware, and a bug fixed by the following patch. The fix
is a one-liner that won't affect any socket driver that's yet merged;
basically, it stops discarding I/O attributes for static mappings.
- Dave
The PCMCIA card services layer is never setting the i/o map attributes
when SS_CAP_STATIC_MAP is specified. Net result, sockets' set_io_map()
calls always see requests with most flags clear, meaning 8 bit access.
For hardware that always autosizes, that won't matter; and all current
STATIC_MAP drivers ignore those attributes. A new driver (for at91rm9200)
suffers badly from this, since this forces everything into 8 bit mode and
that breaks both (a) cards requiring 16 bit access, and (b) ide-cs; but
of course 8-bit cards work OK (as does accessing card attributes).
So this patch arranges to pass the attributes down, matching the behavior
for non-static mappings (using the first/only I/O window).
Signed-off-by: David Brownell <[email protected]>
--- at91x.orig/drivers/pcmcia/cs.c 2005-05-28 14:20:39.000000000 -0700
+++ at91x/drivers/pcmcia/cs.c 2005-05-28 15:21:06.000000000 -0700
@@ -767,6 +767,7 @@
}
if ((s->features & SS_CAP_STATIC_MAP) && s->io_offset) {
*base = s->io_offset | (*base & 0x0fff);
+ s->io[0].Attributes = attr;
return 0;
}
/* Check for an already-allocated window that must conflict with
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]