Hi
For anyone who cares here's the solution. It turns out that for some
reason this memory card interacts badly with TI-based chipsets wherein
it sets the VS1 signal implying a low-voltage key X.XV card (which is
physically impossible). The Ricoh chipset for some reason doesn't set
it and whether that's a bug with the card or a bug with the chipset I
have no idea. Either way, the TI chipsets have a feature to prevent a
Vcc that is "sensed" (via the VS1, VS2 signals) to be invalid.
Fortunately, you can turn off this feature by flipping a bit in the
system control register. Once you do that, you have to recompile the
yenta_socket module to ignore the XV bit in the present state register
so that pcmcia_core says
is this a 3.3V card? no!
is it NOT an XV card? yes!
apply vcc 5v.
The reason this didn't work before was I hadn't flipped the VCCPROT bit
so when I tried to apply 5V I'd get a BADVCC request back. The
pcmcia_core driver doesn't report this, unfortunately, because it just
tries to do a reset and times out.
I've put a forked version on github
https://github.com/ebertech/linux/commit/96a497d997d7b27e9824417bcc3b12b47c4f1129
Just a warning: if you do this and you put in a card that can't do 5V
and it somehow reports the wrong voltage you will most likely fry your
card.
Best Regards,
Andrew Eberbach
EberTech Inc.
On Mon Dec 17 14:28:12 2012, Andrew Eberbach wrote:
Hi
I've been trying to get various versions of linux > 2.6 to read a linear flash
pcmcia card. I've
been having mixed success and I'm trying to figure out if what I'm doing is
just bridge-dependent
or if there's a setting I can use to make this work.
So far I've tried various chipsets (Ricoh, TI, Enne, O2) on various machines
and what I've found
is the following:
I've gotten a Ricoh-based chipset to read the card in question, get its CIS,
fire up pcmciamtd and
let me read and write to it.
On ALL other chipsets what I keep getting is
unsupported voltage key
I dug through the code, did some experimenting and research and as far as I can
tell this message
happens because
1. The card gets inserted
2. The code in cs.c tries to figure out what voltage the card wants
3. yenta_socket looks at the status register and sees that the card wants X.XV
which means voltage
< 3.3V which will be defined later on somewhere.
4. This isn't supported so it craps out and since we're not even accepting the
card it never gets
to loading pcmciamtd.
The only thing is, I know for a *fact* that this card wants Vcc 5 and Vpp 12 to
write. On the
Ricoh card it works without a hitch. On all the other cards the status register
keeps reporting
X.XV. I even looked at the output of the status register reads on Ricoh vs TI
and on Ricoh it
comes back as having the 5V bit set, on TI it's not.
I've tried turning off pnpbios, pci=assign-busses, turning off acpi, every
combination of
pcmcia_core, pcmcia_rsrc, pcmcia and yenta_socket parameters I could think of
(increasing the
settle time, setup time, etc. etc.). I've dropped back to 2.6.30-something. And
it's always the
same. Excluding IRQs from /etc/pcmcia/config.opts.
The only other thing I've found in digging through mailing lists is that it
could be a resource
conflict of some sort. I guess that would make some sense except that if I cat
the yenta_registers
in /sys/... for that bridge when I take the card out it changes so to me that
would say that the
resources are there and it's not just reading a default.
Here's the really maddening part. If I put in another PCMCIA card, say, a
wireless ethernet card
into the non-ricoh systems those cards get recognized without an issue. But
just with this linear
flash card (and I've tried several just to be sure it wasn't a one-off bad
card), it keeps
thinking it's a low-voltage card.
I've also tried recompiling the module to just have it force the voltage to be
5.0 and ignore the
status register as well as force the status register to be a certain value to
no avail. I've gone
through a bunch of datasheets for the chipsets as well and everything seems to
make sense... I
mean the code works on Ricoh and it's all using the yenta interface and
registers.
I realize that I haven't provided exact chipsets and linux versions and
everything for the 5
machines, but I figured I'd at least put this out there first and see if anyone
is even available
to help. If so, let me know what details you'd need (dmesg, lspci, dynamic
printks from
drivers/pcmcia/* and so on).
Thanks,
Andrew
_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia