diff options
| -rw-r--r-- | 82802ab.c | 186 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | flashchips.c | 8 | ||||
| -rw-r--r-- | sharplhf00l04.c | 8 | 
4 files changed, 13 insertions, 191 deletions
| diff --git a/82802ab.c b/82802ab.c deleted file mode 100644 index 38a5ce29..00000000 --- a/82802ab.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * This file is part of the flashrom project. - * - * Copyright (C) 2000 Silicon Integrated System 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 - */ - -/* - * Datasheet: - *  - Name: Intel 82802AB/82802AC Firmware Hub (FWH) - *  - URL: http://www.intel.com/design/chipsets/datashts/290658.htm - *  - PDF: http://download.intel.com/design/chipsets/datashts/29065804.pdf - *  - Order number: 290658-004 - */ - -#include <stdio.h> -#include <stdint.h> -#include "flash.h" - -// I need that Berkeley bit-map printer -void print_82802ab_status(uint8_t status) -{ -	printf("%s", status & 0x80 ? "Ready:" : "Busy:"); -	printf("%s", status & 0x40 ? "BE SUSPEND:" : "BE RUN/FINISH:"); -	printf("%s", status & 0x20 ? "BE ERROR:" : "BE OK:"); -	printf("%s", status & 0x10 ? "PROG ERR:" : "PROG OK:"); -	printf("%s", status & 0x8 ? "VP ERR:" : "VPP OK:"); -	printf("%s", status & 0x4 ? "PROG SUSPEND:" : "PROG RUN/FINISH:"); -	printf("%s", status & 0x2 ? "WP|TBL#|WP#,ABORT:" : "UNLOCK:"); -} - -int probe_82802ab(struct flashchip *flash) -{ -	volatile uint8_t *bios = flash->virtual_memory; -	uint8_t id1, id2; - -#if 0 -	*(volatile uint8_t *)(bios + 0x5555) = 0xAA; -	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55; -	*(volatile uint8_t *)(bios + 0x5555) = 0x90; -#endif - -	*bios = 0xff; -	myusec_delay(10); -	*bios = 0x90; -	myusec_delay(10); - -	id1 = *(volatile uint8_t *)bios; -	id2 = *(volatile uint8_t *)(bios + 0x01); - -	/* Leave ID mode */ -	*(volatile uint8_t *)(bios + 0x5555) = 0xAA; -	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55; -	*(volatile uint8_t *)(bios + 0x5555) = 0xF0; - -	myusec_delay(10); - -	printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); - -	if (id1 != flash->manufacture_id || id2 != flash->model_id) -		return 0; - -	map_flash_registers(flash); - -	return 1; -} - -uint8_t wait_82802ab(volatile uint8_t *bios) -{ -	uint8_t status; -	uint8_t id1, id2; - -	*bios = 0x70; -	if ((*bios & 0x80) == 0) {	// it's busy -		while ((*bios & 0x80) == 0) ; -	} - -	status = *bios; - -	// put another command to get out of status register mode - -	*bios = 0x90; -	myusec_delay(10); - -	id1 = *(volatile uint8_t *)bios; -	id2 = *(volatile uint8_t *)(bios + 0x01); - -	// this is needed to jam it out of "read id" mode -	*(volatile uint8_t *)(bios + 0x5555) = 0xAA; -	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55; -	*(volatile uint8_t *)(bios + 0x5555) = 0xF0; - -	return status; -} - -int erase_82802ab_block(struct flashchip *flash, int offset) -{ -	volatile uint8_t *bios = flash->virtual_memory + offset; -	volatile uint8_t *wrprotect = flash->virtual_registers + offset + 2; -	uint8_t status; - -	// clear status register -	*bios = 0x50; -	//printf("Erase at %p\n", bios); -	// clear write protect -	//printf("write protect is at %p\n", (wrprotect)); -	//printf("write protect is 0x%x\n", *(wrprotect)); -	*(wrprotect) = 0; -	//printf("write protect is 0x%x\n", *(wrprotect)); - -	// now start it -	*(volatile uint8_t *)(bios) = 0x20; -	*(volatile uint8_t *)(bios) = 0xd0; -	myusec_delay(10); -	// now let's see what the register is -	status = wait_82802ab(flash->virtual_memory); -	//print_82802ab_status(status); -	printf("DONE BLOCK 0x%x\n", offset); - -	return 0; -} - -int erase_82802ab(struct flashchip *flash) -{ -	int i; -	unsigned int total_size = flash->total_size * 1024; - -	printf("total_size is %d; flash->page_size is %d\n", -	       total_size, flash->page_size); -	for (i = 0; i < total_size; i += flash->page_size) -		erase_82802ab_block(flash, i); -	printf("DONE ERASE\n"); - -	return 0; -} - -void write_page_82802ab(volatile uint8_t *bios, uint8_t *src, -			volatile uint8_t *dst, int page_size) -{ -	int i; - -	for (i = 0; i < page_size; i++) { -		/* transfer data from source to destination */ -		*dst = 0x40; -		*dst++ = *src++; -		wait_82802ab(bios); -	} -} - -int write_82802ab(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; - -	erase_82802ab(flash); -	if (*bios != 0xff) { -		printf("ERASE FAILED\n"); -		return -1; -	} -	printf("Programming page: "); -	for (i = 0; i < total_size / page_size; i++) { -		printf("%04d at address: 0x%08x", i, i * page_size); -		write_page_82802ab(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"); -	} -	printf("\n"); -	protect_jedec(bios); - -	return 0; -} @@ -22,7 +22,7 @@ endif  OBJS = chipset_enable.o board_enable.o udelay.o jedec.o sst28sf040.o \  	am29f040b.o mx29f002.o sst39sf020.o m29f400bt.o w49f002u.o \ -	82802ab.o msys_doc.o pm49fl004.o sst49lf040.o sst49lfxxxc.o \ +	msys_doc.o pm49fl004.o sst49lf040.o sst49lfxxxc.o \  	sst_fwhub.o layout.o cbtable.o flashchips.o flashrom.o \  	sharplhf00l04.o w29ee011.o spi.o diff --git a/flashchips.c b/flashchips.c index 89a37530..a46e009a 100644 --- a/flashchips.c +++ b/flashchips.c @@ -192,10 +192,10 @@ struct flashchip flashchips[] = {  	 probe_spi,	generic_spi_chip_erase_c7,	generic_spi_chip_write, generic_spi_chip_read},  	{"M25P128",	ST_ID,		ST_M25P128,	16384,	256,  	 probe_spi,	generic_spi_chip_erase_c7,	generic_spi_chip_write, generic_spi_chip_read}, -	{"82802ab",	137,		173,		512, 64 * 1024, -	 probe_82802ab, erase_82802ab,	write_82802ab}, -	{"82802ac",	137,		172,		1024, 64 * 1024, -	 probe_82802ab, erase_82802ab,	write_82802ab}, +	{"82802ab",	INTEL_ID,	173,		512, 64 * 1024, +	 probe_lhf00l04, erase_lhf00l04,	write_lhf00l04}, +	{"82802ac",	INTEL_ID,	172,		1024, 64 * 1024, +	 probe_lhf00l04, erase_lhf00l04,	write_lhf00l04},  	{"F49B002UA",   EMST_ID,        EMST_F49B002UA, 256, 4096,           probe_jedec,   erase_chip_jedec, write_49f002},  #ifndef DISABLE_DOC diff --git a/sharplhf00l04.c b/sharplhf00l04.c index da7dc3f2..e2257d4a 100644 --- a/sharplhf00l04.c +++ b/sharplhf00l04.c @@ -18,6 +18,14 @@   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA   */ +/* + * Datasheet: + *  - Name: Intel 82802AB/82802AC Firmware Hub (FWH) + *  - URL: http://www.intel.com/design/chipsets/datashts/290658.htm + *  - PDF: http://download.intel.com/design/chipsets/datashts/29065804.pdf + *  - Order number: 290658-004 + */ +  #include <stdio.h>  #include <stdlib.h>  #include "flash.h" | 
