On Tue, Jun 17, 2008 at 10:08:58PM -0400, Ward Vandewege wrote:
> On Sat, Jun 07, 2008 at 04:29:13PM +0200, Peter Stuge wrote:
> > On Sat, Jun 07, 2008 at 04:07:29PM +0200, Stefan Reinauer wrote:
> > > Ah, this is broken... flashrom should not continue when it found a
> > > chip in a given memory area already.
> >
> > flashrom supports boards with more than one flash chip.
> >
> > But perhaps we need to teach flashrom more about how chips can be
> > connected. On boards with two chips, they can obviously not be on
> > the same LPC bus for example. There would be a collision on the bus.
> >
> > Ward and me investigated. The W29EE011 probe command is quite similar
> > to the A49LF040A block erase command, but the last byte differs.
> > A49LF040A seems to enter an undefined state when it receives such an
> > unknown command. Sleeping the maximum A49LF040A timeout before
> > sending the jedec ID exit command did not help.
> >
> > It seems to me that the Amic chip is behaving badly.
> >
> > Action plan?
> >
> > 1. Penalize W29EE011 by never probing it without -c W29EE011
> >
> > This sucks because the W29EE011 chip isn't the one misbehaving here.
> > On the other hand, it does have a nasty product ID sequence.
>
> Please find a patch attached that does just that.
And now for a revised copy that does not disable -c W29EE011 as well (thanks
Peter!).
Thanks,
Ward.
--
Ward Vandewege <[EMAIL PROTECTED]>
Free Software Foundation - Senior System Administrator
This patch disables default probing for the Winbond W29EE011, because its
(unusual) probe sequence puts the AMIC A49LF040A in a funky state.
Signed-off-by: Ward Vandewege <[EMAIL PROTECTED]>
Index: w29ee011.c
===================================================================
--- w29ee011.c (revision 3360)
+++ w29ee011.c (working copy)
@@ -19,12 +19,23 @@
*/
#include "flash.h"
+#include <string.h>
int probe_w29ee011(struct flashchip *flash)
{
volatile uint8_t *bios = flash->virtual_memory;
uint8_t id1, id2;
+ extern char *chip_to_probe;
+ if (!chip_to_probe || strcmp(chip_to_probe,"W29EE011")) {
+ printf_debug("\n===\n");
+ printf_debug(" Probing disabled for Winbond W29EE011 because the probing sequence puts the\n");
+ printf_debug(" AMIC A49LF040A in a funky state.\n");
+ printf_debug(" Use 'flashrom -c W29EE011' if you have a board with this chip.");
+ printf_debug("\n===\n");
+ return 0;
+ }
+
/* Issue JEDEC Product ID Entry command */
*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
myusec_delay(10);
--
coreboot mailing list
[email protected]
http://www.coreboot.org/mailman/listinfo/coreboot