On 11.04.2010 13:17, Michael Karcher wrote:
> Signed-off-by: Michael Karcher <flashrom(a)mkarcher.dialup.fu-berlin.de>
>
No response from the owner of that board, so I'd say commit it as untested.
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
1. Read seems to work:
$ flashrom -r ttt.bin
flashrom v0.9.2-r1001 on FreeBSD 9.0-CURRENT (i386), built with libpci
3.1.7, GCC 4.2.1 20070719 [FreeBSD]
flashrom is free software, get the source code at
http://www.flashrom.org
No coreboot table found.
Found chipset "Intel ICH4/ICH4-L", enabling flash write... OK.
This chipset supports the following protocols: Non-SPI.
Calibrating delay loop... OK.
Found chip "SST SST49LF003A/B" (384 KB, FWH) at physical address
0xfffa0000.
===
This flash part has status UNTESTED for operations: ERASE WRITE
The test status of this chip may have been updated in the latest
development
version of flashrom. If you are running the latest development version,
please email a report to flashrom(a)flashrom.org if any of the above
operations
work correctly for you with this flash part. Please include the flashrom
output with the additional -V option for all operations you tested (-V,
-Vr,
-Vw, -VE), and mention which mainboard or programmer you tested.
Thanks for your help!
===
Reading flash... done.
$ ls -l ttt.bin
-rw-r--r-- 1 root citrin 393216 Jun 9 20:48 ttt.bin
full read log with -V:
http://citrin.ru/tmp/flashrom_ASUS_P4BP-MX_read.log
2. Write don't work:
===
Flash image seems to be a legacy BIOS. Disabling checks.
Writing flash chip... Erasing flash chip... ERASE FAILED at 0x00000000!
Expected=0xff, Read=0x24, failed byte count from 0x00000000-0x00000fff:
0xfef
ERASE FAILED!
ERASE FAILED at 0x00000000! Expected=0xff, Read=0x24, failed byte count
from 0x00000000-0x0000ffff: 0xfeec
ERASE FAILED!
FAILED!
ERASE FAILED!
FAILED!
Your flash chip is in an unknown state.
Get help on IRC at irc.freenode.net (channel #flashrom) or
mail flashrom(a)flashrom.org!
full write log:
http://citrin.ru/tmp/flashrom_ASUS_P4BP-MX_write.log
3. after failed write flash seems to be not corrupted: md5 for file from
flashrom -r is same as before.
--
WBR,
Anton Yuzhaninov
Author: hailfinger
Date: Tue Jun 8 00:37:54 2010
New Revision: 1039
URL: http://flashrom.org/trac/coreboot/changeset/1039
Log:
National Semiconductor DP83815/DP83816 and DP83820 NIC programmer
support.
Some instability remains, but that may be due to hardware problems in
the specific card (Netgear FA311) used for testing.
Signed-off-by: Andrew Morgan <ziltro(a)ziltro.com>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Added:
trunk/nicnatsemi.c
Modified:
trunk/Makefile
trunk/flash.h
trunk/flashrom.c
Modified: trunk/Makefile
==============================================================================
--- trunk/Makefile Mon Jun 7 21:41:25 2010 (r1038)
+++ trunk/Makefile Tue Jun 8 00:37:54 2010 (r1039)
@@ -113,6 +113,9 @@
# Always enable Realtek NICs for now.
CONFIG_NICREALTEK ?= yes
+# Disable National Semiconductor NICs until support is complete and tested.
+CONFIG_NICNATSEMI ?= no
+
# Always enable Bus Pirate SPI for now.
CONFIG_BUSPIRATE_SPI ?= yes
@@ -192,6 +195,12 @@
NEED_PCI := yes
endif
+ifeq ($(CONFIG_NICNATSEMI), yes)
+FEATURE_CFLAGS += -D'CONFIG_NICNATSEMI=1'
+PROGRAMMER_OBJS += nicnatsemi.o
+NEED_PCI := yes
+endif
+
ifeq ($(CONFIG_BUSPIRATE_SPI), yes)
FEATURE_CFLAGS += -D'CONFIG_BUSPIRATE_SPI=1'
PROGRAMMER_OBJS += buspirate_spi.o
Modified: trunk/flash.h
==============================================================================
--- trunk/flash.h Mon Jun 7 21:41:25 2010 (r1038)
+++ trunk/flash.h Tue Jun 8 00:37:54 2010 (r1039)
@@ -49,6 +49,9 @@
PROGRAMMER_NICREALTEK,
PROGRAMMER_NICREALTEK2,
#endif
+#if CONFIG_NICNATSEMI == 1
+ PROGRAMMER_NICNATSEMI,
+#endif
#if CONFIG_GFXNVIDIA == 1
PROGRAMMER_GFXNVIDIA,
#endif
@@ -339,7 +342,7 @@
/* print.c */
char *flashbuses_to_text(enum chipbustype bustype);
void print_supported(void);
-#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT >= 1
+#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT >= 1
void print_supported_pcidevs(struct pcidev_status *devs);
#endif
void print_supported_wiki(void);
@@ -491,6 +494,14 @@
extern struct pcidev_status nics_realteksmc1211[];
#endif
+/* nicnatsemi.c */
+#if CONFIG_NICNATSEMI == 1
+int nicnatsemi_init(void);
+int nicnatsemi_shutdown(void);
+void nicnatsemi_chip_writeb(uint8_t val, chipaddr addr);
+uint8_t nicnatsemi_chip_readb(const chipaddr addr);
+extern struct pcidev_status nics_natsemi[];
+#endif
/* satasii.c */
#if CONFIG_SATASII == 1
Modified: trunk/flashrom.c
==============================================================================
--- trunk/flashrom.c Mon Jun 7 21:41:25 2010 (r1038)
+++ trunk/flashrom.c Tue Jun 8 00:37:54 2010 (r1039)
@@ -48,7 +48,7 @@
* if more than one of them is selected. If only one is selected, it is clear
* that the user wants that one to become the default.
*/
-#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG > 1
+#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG > 1
#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one.
#endif
enum programmer programmer =
@@ -59,6 +59,9 @@
PROGRAMMER_NICREALTEK
PROGRAMMER_NICREALTEK2
#endif
+#if CONFIG_NICNATSEMI == 1
+ PROGRAMMER_NICNATSEMI
+#endif
#if CONFIG_GFXNVIDIA == 1
PROGRAMMER_GFXNVIDIA
#endif
@@ -199,6 +202,24 @@
},
#endif
+#if CONFIG_NICNATSEMI == 1
+ {
+ .name = "nicnatsemi",
+ .init = nicnatsemi_init,
+ .shutdown = nicnatsemi_shutdown,
+ .map_flash_region = fallback_map,
+ .unmap_flash_region = fallback_unmap,
+ .chip_readb = nicnatsemi_chip_readb,
+ .chip_readw = fallback_chip_readw,
+ .chip_readl = fallback_chip_readl,
+ .chip_readn = fallback_chip_readn,
+ .chip_writeb = nicnatsemi_chip_writeb,
+ .chip_writew = fallback_chip_writew,
+ .chip_writel = fallback_chip_writel,
+ .chip_writen = fallback_chip_writen,
+ .delay = internal_delay,
+ },
+#endif
#if CONFIG_GFXNVIDIA == 1
{
Added: trunk/nicnatsemi.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/nicnatsemi.c Tue Jun 8 00:37:54 2010 (r1039)
@@ -0,0 +1,87 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright (C) 2010 Andrew Morgan <ziltro(a)ziltro.com>
+ *
+ * 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
+ */
+
+#if defined(__i386__) || defined(__x86_64__)
+
+#include <stdlib.h>
+#include "flash.h"
+
+#define PCI_VENDOR_ID_NATSEMI 0x100b
+
+#define BOOT_ROM_ADDR 0x50
+#define BOOT_ROM_DATA 0x54
+
+struct pcidev_status nics_natsemi[] = {
+ {0x100b, 0x0020, NT, "National Semiconductor", "DP83815/DP83816"},
+ {0x100b, 0x0022, NT, "National Semiconductor", "DP83820"},
+ {},
+};
+
+int nicnatsemi_init(void)
+{
+ get_io_perms();
+
+ io_base_addr = pcidev_init(PCI_VENDOR_ID_NATSEMI, PCI_BASE_ADDRESS_0,
+ nics_natsemi, programmer_param);
+
+ buses_supported = CHIP_BUSTYPE_PARALLEL;
+
+ return 0;
+}
+
+int nicnatsemi_shutdown(void)
+{
+ free(programmer_param);
+ pci_cleanup(pacc);
+ release_io_perms();
+ return 0;
+}
+
+void nicnatsemi_chip_writeb(uint8_t val, chipaddr addr)
+{
+ OUTL((uint32_t)addr & 0x0000FFFF, io_base_addr + BOOT_ROM_ADDR);
+ /*
+ * The datasheet requires 32 bit accesses to this register, but it seems
+ * that requirement might only apply if the register is memory mapped.
+ * Bit 8-31 of this register are apparently don't care, and if this
+ * register is I/O port mapped 8 bit accesses to the lowest byte of the
+ * register seem to work fine. Due to that, we ignore the advice in the
+ * data sheet.
+ */
+ OUTB(val, io_base_addr + BOOT_ROM_DATA);
+}
+
+uint8_t nicnatsemi_chip_readb(const chipaddr addr)
+{
+ OUTL(((uint32_t)addr & 0x0000FFFF), io_base_addr + BOOT_ROM_ADDR);
+ /*
+ * The datasheet requires 32 bit accesses to this register, but it seems
+ * that requirement might only apply if the register is memory mapped.
+ * Bit 8-31 of this register are apparently don't care, and if this
+ * register is I/O port mapped 8 bit accesses to the lowest byte of the
+ * register seem to work fine. Due to that, we ignore the advice in the
+ * data sheet.
+ */
+ return INB(io_base_addr + BOOT_ROM_DATA);
+}
+
+#else
+#error PCI port I/O access is not supported on this architecture yet.
+#endif