Reading through the data-sheet a bit more, it seems that the Block Locking Registers (BL_REG) are only available in FWH (Intel FirmWare Hub) mode. Perhaps the Savior RD-1's are using an LPC type interface? I suspect my CS5536 hook-up is LPC also.
Cheers, Alan Alan Alexander mailto:[EMAIL PROTECTED] Software Toolchain Engineering Icera Inc, 2520 The Quadrant, Aztec west, Bristol BS32 4AQ, UK Tel. +44 (0)1454 284805 -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Corey Osgood Sent: 23 November 2007 07:57 To: Nikolay Petukhov Cc: linuxbios@linuxbios.org Subject: Re: [LinuxBIOS] flashrom support for AMD CS5536 Nikolay Petukhov wrote: > Info from pm49fl002/4's manual: Pm49fl002/4 write protected at power up. > This patch fix it. > I'm a bit confused, because I use the Pm49fl002/4 regularly, mostly in BIOS Savior RD-1's. I've never had any problems writing to those chips. This patch also needs a "Signed-off-by:" line, and a couple other things below. > diff -Nru LinuxBIOSv2-2978/util/flashrom/flashchips.c LinuxBIOSv2-2978-pm49fl00x/util/flashrom/flashchips.c > 'svn diff' does pretty much the same thing, but easier to apply. > diff -Nru LinuxBIOSv2-2978/util/flashrom/pm49fl004.c LinuxBIOSv2-2978-pm49fl00x/util/flashrom/pm49fl004.c > --- LinuxBIOSv2-2978/util/flashrom/pm49fl004.c 2007-10-18 05:55:15.000000000 +0600 > +++ LinuxBIOSv2-2978-pm49fl00x/util/flashrom/pm49fl004.c 1970-01-01 05:00:00.000000000 +0500 > @@ -1,51 +0,0 @@ > -/* > - * This file is part of the flashrom project. > - * > - * Copyright (C) 2004 Tyan Corporation > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU General Public License as published by > - * the Free Software Foundation; either version 2 of the License, or > - * (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > - */ > - > -#include <stdio.h> > -#include "flash.h" > - > -extern int exclude_start_page, exclude_end_page; > - > -int write_49fl004(struct flashchip *flash, uint8_t *buf) > -{ > - int i; > - int total_size = flash->total_size * 1024; > - int page_size = flash->page_size; > - volatile uint8_t *bios = flash->virtual_memory; > - > - printf("Programming page: "); > - for (i = 0; i < total_size / page_size; i++) { > - if ((i >= exclude_start_page) && (i < exclude_end_page)) > - continue; > - > - /* erase the page before programming */ > - erase_block_jedec(bios, i * page_size); > - > - /* write to the sector */ > - printf("%04d at address: 0x%08x", i, i * page_size); > - write_sector_jedec(bios, buf + i * page_size, > - bios + i * page_size, page_size); > - printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); > - fflush(stdout); > - } > - printf("\n"); > - > - return 0; > -} > We should probably do 'svn mv' to this file, instead of removing it, then patch against it. > diff -Nru LinuxBIOSv2-2978/util/flashrom/pm49fl00x.c LinuxBIOSv2-2978-pm49fl00x/util/flashrom/pm49fl00x.c > --- LinuxBIOSv2-2978/util/flashrom/pm49fl00x.c 1970-01-01 05:00:00.000000000 +0500 > +++ LinuxBIOSv2-2978-pm49fl00x/util/flashrom/pm49fl00x.c 2007-11-23 11:43:47.000000000 +0500 > @@ -0,0 +1,95 @@ > +/* > + * This file is part of the flashrom project. > + * > + * Copyright (C) 2004 Tyan Corporation > Please add yourself here. I can't tell who the original author was, so just leave the Tyan email blank. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#include <stdio.h> > +#include "flash.h" > + > +extern int exclude_start_page, exclude_end_page; > + > +static __inline__ int write_lockbits_49fl00x(volatile uint8_t *bios, int size, > + unsigned char bits, int block_size) > Why inlined? > +{ > + int i, left = size; > + > + //printf("bios=0x%08lx\n", (unsigned long)bios); > just drop this. we don't like committing commented code ;) > + for (i = 0; left >= block_size; i++, left -= block_size) { > + > + /* pm49fl002 */ > + if (block_size == 16384 && i%2) > + continue; > + > + //printf("lockbits at address=0x%08lx is 0x%01x\n", (unsigned long)0xFFC00000 - size + (i * block_size) + 2, *(bios + (i * block_size) + 2) ); > same here > + *(bios + (i * block_size) + 2) = bits; > + //printf("lockbits at address=0x%08lx is 0x%01x\n", (unsigned long)0xFFC00000 - size + (i * block_size) + 2, *(bios + (i * block_size) + 2) ); > and here > + } > + > + return 0; > I don't see any other return paths, any reason not to make this function void? > +} > + > +int probe_49fl00x(struct flashchip *flash) > +{ > + int ret = probe_jedec(flash); > + > + if (ret == 1) > + map_flash_registers(flash); > + > + return ret; > +} > + > +int erase_49fl00x(struct flashchip *flash) > +{ > + int total_size = flash->total_size * 1024; > + int page_size = flash->page_size; > + write_lockbits_49fl00x(flash->virtual_registers, total_size, 0, page_size); > + return erase_chip_jedec(flash); > +} > + > +int write_49fl00x(struct flashchip *flash, uint8_t *buf) > +{ > + int i; > + int total_size = flash->total_size * 1024; > + int page_size = flash->page_size; > + volatile uint8_t *bios = flash->virtual_memory; > + > + /* unprotected */ > + write_lockbits_49fl00x(flash->virtual_registers, total_size, 0, page_size); > IIRC, flashrom erases before writing. If that is the case, wouldn't this be unnecessary? > + > + printf("Programming page: "); > + for (i = 0; i < total_size / page_size; i++) { > + if ((i >= exclude_start_page) && (i < exclude_end_page)) > + continue; > + > + /* erase the page before programming */ > + erase_block_jedec(bios, i * page_size); > + > + /* write to the sector */ > + printf("%04d at address: 0x%08x", i, i * page_size); > + write_sector_jedec(bios, buf + i * page_size, > + bios + i * page_size, page_size); > + printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); > + fflush(stdout); > + } > + printf("\n"); > + > + /* protected */ > + write_lockbits_49fl00x(flash->virtual_registers, total_size, 1, page_size); > + > + return 0; > +} -- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios -- ****************************************************************************************** This e-mail (including any attachments) is intended only for the recipient(s) named above. It may contain confidential or privileged information and should not be read, copied or otherwise used by any other person. If you are not a named recipient, please contact the sender by telephone (+44-1454-284800) and destroy the original message. Any statement and/or opinion not related to this company's business and expressed in this message is that of the author and does not necessarily reflect those of Icera. This company does not take any responsibility for the views of the author in any matter not related to the company's objective. ****************************************************************************************** -- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios