X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=util%2Fflashrom%2Fsst_fwhub.c;h=ab541e41f886cee7c345349979cb4a295fbd3ec5;hb=2f110a80068fc35207e8d3b4cd9544f1c456a173;hp=530f726d4b8f333211ab4e9a5ea1cdc8e5e67db8;hpb=03cafbfdfe10d6797740c4456fd3a80c499e1c0b;p=coreboot.git diff --git a/util/flashrom/sst_fwhub.c b/util/flashrom/sst_fwhub.c index 530f726d4..ab541e41f 100644 --- a/util/flashrom/sst_fwhub.c +++ b/util/flashrom/sst_fwhub.c @@ -1,35 +1,27 @@ /* - * adapted from the Intel FW hub stuff for 82802ax parts. + * This file is part of the flashrom project. * + * Copyright (C) 2000 Silicon Integrated System Corporation * - * Copyright 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 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * 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 -#include -#include -#include -#include -#include +/* Adapted from the Intel FW hub stuff for 82802ax parts. */ +#include #include "flash.h" -#include "jedec.h" -#include "sst_fwhub.h" // I need that Berkeley bit-map printer void print_sst_fwhub_status(uint8_t status) @@ -46,45 +38,45 @@ void print_sst_fwhub_status(uint8_t status) /* probe_jedec works fine for probing */ int probe_sst_fwhub(struct flashchip *flash) { - volatile uint8_t *bios; - size_t size = flash->total_size * 1024; - if (probe_jedec(flash) == 0) return 0; - bios = mmap(0, size, PROT_WRITE | PROT_READ, MAP_SHARED, - fd_mem, (off_t) (0xFFFFFFFF - 0x400000 - size + 1)); - if (bios == MAP_FAILED) { - // it's this part but we can't map it ... - perror("Error MMAP /dev/mem"); - exit(1); - } + map_flash_registers(flash); - flash->virt_addr_2 = bios; return 1; } int erase_sst_fwhub_block(struct flashchip *flash, int offset) { - volatile uint8_t *wrprotect = flash->virt_addr_2 + offset + 2; + volatile uint8_t *wrprotect = flash->virtual_registers + offset + 2; // clear write protect - *(wrprotect) = 0; + chip_writeb(0, wrprotect); - erase_block_jedec(flash->virt_addr, offset); - toggle_ready_jedec(flash->virt_addr); + erase_block_jedec(flash->virtual_memory, offset); + toggle_ready_jedec(flash->virtual_memory); - return (0); + return 0; } int erase_sst_fwhub(struct flashchip *flash) { int i; unsigned int total_size = flash->total_size * 1024; + volatile uint8_t *bios = flash->virtual_memory; for (i = 0; i < total_size; i += flash->page_size) erase_sst_fwhub_block(flash, i); - return (0); + + // dumb check if erase was successful. + for (i = 0; i < total_size; i++) { + if (bios[i] != 0xff) { + printf("ERASE FAILED!\n"); + return -1; + } + } + + return 0; } int write_sst_fwhub(struct flashchip *flash, uint8_t *buf) @@ -92,20 +84,13 @@ int write_sst_fwhub(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->virt_addr; + volatile uint8_t *bios = flash->virtual_memory; // FIXME: We want block wide erase instead of ironing the whole chip - erase_sst_fwhub(flash); + if (erase_sst_fwhub(flash)) + return -1; - // dumb check if erase was successful. - for (i = 0; i < total_size; i++) { - if (bios[i] != 0xff) { - printf("ERASE FAILED\n"); - return -1; - } - } - - printf("Programming Page: "); + printf("Programming page: "); for (i = 0; i < total_size / page_size; i++) { printf("%04d at address: 0x%08x", i, i * page_size); write_sector_jedec(bios, buf + i * page_size, @@ -113,5 +98,6 @@ int write_sst_fwhub(struct flashchip *flash, uint8_t *buf) 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"); - return (0); + + return 0; }