flash_rom on SST49LF004B tips?

Steven James pyro at linuxlabs.com
Wed Nov 3 14:07:00 CET 2004


Greetings,

I'm not familiar with that part, but I know that some flash parts that
support block locking can also 'lock down' a block so that it can only be
unlocked by power cycling. Any chance that's happening?

G'day,
sjames


On Mon, 1 Nov 2004, Donald Zoch wrote:

> I'm trying to get the flash_rom program working on the SST49LF004B.
> This is the part that is coming in our newer Arima HDAMA boards that
> replaces the SST49LF040.   It has the same id as the SST49LF004A,
> but is different in that when we first started trying to flash it, the
> flash looked like it worked but would never verify.   I took a look
> at the data sheet and from the looks of it there are these block locking
> registers that the zero bit must be cleared in in order to write to
> certain parts of the flash.  At least that's why I think it's not
> flashing.
>
> I'm trying to zero out the registers, but it appears as if the first
> 4 cannot be cleared out.   The last 4 look like they're being set to
> zero.   I have tried to calculate the register locations by looking
> at the probe jedec code and seeing that the jedec ID registers are
> at bios and bios + 0x01.  I then looked in the data sheet at where those
> registers appear in the memory map and then calculated the register
> memory locations as offsets to bios, some negative offsets and some
> positive.
>
> I've also tried anding that value with 0xFE just to zero out the bit
> that I need, but that doesn't seem to work.   I can never seem
> to change the values in the first four registers.
>
> Do either of you have any pointers on how to get this to work?
> I will attach the data sheet for the flash part.  It's
> the 49lf004b that I'm interested in.
>
> void unprotect_49lf004b(volatile unsigned char *bios)
>     {
>       *(volatile unsigned char *) (bios + 0x30002) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + 0x30002));
>       *(volatile unsigned char *) (bios + 0x20002) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + 0x20002));
>       *(volatile unsigned char *) (bios + 0x10002) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + 0x10002));
>       *(volatile unsigned char *) (bios + 0x00002) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + 0x00002));
>       *(volatile unsigned char *) (bios - 0xFFFE) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - 0xFFFE));
>       *(volatile unsigned char *) (bios - 0x1FFFE) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - 0x1FFFE));
>       *(volatile unsigned char *) (bios - 0x2FFFE) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - 0x2FFFE));
>       *(volatile unsigned char *) (bios - 0x3FFFE) = 0x00;
>       printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - 0x3FFFE));
> }
>
>
> Donald
> ----
> Donald Zoch
> Phone: (512) 602-7945
> Pager: (512) 604-5401
> donald.zoch at amd.com
>

||||| |||| |||||||||||||  |||
by Linux Labs International, Inc.
   Steven James, CTO

55 Marietta Street
Suite 1830
Atlanta, Ga 30303
866 824 9737 support




More information about the coreboot mailing list