flashrom
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
November 2012
- 36 participants
- 95 discussions
This looks to be the same Intel X79 chip from the info submitted on Sep
10th in the 'Supermicro X9QRi-F+' email (
http://www.flashrom.org/pipermail/flashrom/2012-September/009887.html) ,
but in the interest of documentation I figured I'd submit this report
from a Supermicro X9DRT-HF+ also. Any movement on support for this chip
since that initial report? Thanks for all your work!
flashrom v0.9.6.1-r1564 on FreeBSD 8.3-RELEASE-p4 (amd64)
flashrom is free software, get the source code at http://www.flashrom.org
flashrom was built with libpci 3.1.9, GCC 4.2.2 20070831 prerelease
[FreeBSD], little endian
Command line (5 args): ./flashrom -VV -p internal -r backup.bin
Calibrating delay loop... OS timer resolution is 1 usecs, 2340M loops
per second, 10 myus = 10 us, 100 myus = 124 us, 1000 myus = 1174 us,
10000 myus = 10541 us, 4 myus = 4 us, OK.
Initializing internal programmer
No coreboot table found.
DMI string system-manufacturer: "Supermicro"
DMI string system-product-name: "X9DRT-HF+"
DMI string system-version: "0123456789"
DMI string baseboard-manufacturer: "Supermicro"
DMI string baseboard-product-name: "X9DRT-HF+"
DMI string baseboard-version: "1.02"
DMI string chassis-type: "Desktop"
Found chipset "Intel X79" with PCI ID 8086:1d41.
This chipset is marked as untested. If you are using an up-to-date version
of flashrom *and* were (not) able to successfully update your firmware
with it,
then please email a report to flashrom(a)flashrom.org including a verbose
(-V) log.
Thank you!
Enabling flash write...
0xfff80000/0xffb80000 FWH IDSEL: 0x0
0xfff00000/0xffb00000 FWH IDSEL: 0x0
0xffe80000/0xffa80000 FWH IDSEL: 0x1
0xffe00000/0xffa00000 FWH IDSEL: 0x1
0xffd80000/0xff980000 FWH IDSEL: 0x2
0xffd00000/0xff900000 FWH IDSEL: 0x2
0xffc80000/0xff880000 FWH IDSEL: 0x3
0xffc00000/0xff800000 FWH IDSEL: 0x3
0xff700000/0xff300000 FWH IDSEL: 0x4
0xff600000/0xff200000 FWH IDSEL: 0x5
0xff500000/0xff100000 FWH IDSEL: 0x6
0xff400000/0xff000000 FWH IDSEL: 0x7
0xfff80000/0xffb80000 FWH decode enabled
0xfff00000/0xffb00000 FWH decode enabled
0xffe80000/0xffa80000 FWH decode enabled
0xffe00000/0xffa00000 FWH decode enabled
0xffd80000/0xff980000 FWH decode enabled
0xffd00000/0xff900000 FWH decode enabled
0xffc80000/0xff880000 FWH decode enabled
0xffc00000/0xff800000 FWH decode enabled
0xff700000/0xff300000 FWH decode enabled
0xff600000/0xff200000 FWH decode enabled
0xff500000/0xff100000 FWH decode enabled
0xff400000/0xff000000 FWH decode enabled
Maximum FWH chip size: 0x100000 bytes
BIOS Lock Enable: enabled, BIOS Write Enable: disabled, BIOS_CNTL is 0x2a
WARNING: BIOS region SMM protection is enabled!
Root Complex Register Block address = 0xfed1c000
GCS = 0xc01: BIOS Interface Lock-Down: enabled, Boot BIOS Straps: 0x3 (SPI)
Top Swap : not enabled
SPIBAR = 0xfed1c000 + 0x3800
0x04: 0x6018 (HSFS)
HSFS: FDONE=0, FCERR=0, AEL=0, BERASE=3, SCIP=0, FDOPSS=1, FDV=1, FLOCKDN=0
Programming OPCODES...
program_opcodes: preop=5006 optype=463b opmenu=05d80302c79f0190
done
OP Type Pre-OP
op[0]: 0x02, write w/ addr, none
op[1]: 0x03, read w/ addr, none
op[2]: 0xd8, write w/ addr, none
op[3]: 0x05, read w/o addr, none
op[4]: 0x90, read w/ addr, none
op[5]: 0x01, write w/o addr, none
op[6]: 0x9f, read w/o addr, none
op[7]: 0xc7, write w/o addr, none
Pre-OP 0: 0x06, Pre-OP 1: 0x50
0x06: 0x0000 (HSFC)
HSFC: FGO=0, FCYCLE=0, FDBC=0, SME=0
0x08: 0x00020000 (FADDR)
0x50: 0x00001a1b (FRAP)
BMWAG 0x00, BMRAG 0x00, BRWA 0x1a, BRRA 0x1b
0x54: 0x000f0000 FREG0: WARNING: Flash Descriptor region
(0x00000000-0x0000ffff) is read-only.
0x58: 0x0fff0400 FREG1: BIOS region (0x00400000-0x00ffffff) is read-write.
0x5C: 0x03ff0020 FREG2: WARNING: Management Engine region
(0x00020000-0x003fffff) is locked.
0x60: 0x00000fff FREG3: Gigabit Ethernet region is unused.
0x64: 0x001f0010 FREG4: Platform Data region (0x00010000-0x0001ffff) is
read-write.
0x74: 0x00000000 (PR0 is unused)
0x78: 0x00000000 (PR1 is unused)
0x7C: 0x00000000 (PR2 is unused)
0x80: 0x00000000 (PR3 is unused)
0x84: 0x00000000 (PR4 is unused)
Please send a verbose log to flashrom(a)flashrom.org if this board is not
listed on
http://flashrom.org/Supported_hardware#Supported_mainboards yet.
Writes have been disabled. You can enforce write support with the
ich_spi_force programmer option, but it will most likely harm your hardware!
If you force flashrom you will get no support if something breaks.
0x90: 0x84 (SSFS)
SSFS: SCIP=0, FDONE=1, FCERR=0, AEL=0
0x91: 0xf80000 (SSFC)
SSFC: SCGO=0, ACS=0, SPOP=0, COP=0, DBC=0, SME=0, SCF=0
0x94: 0x5006 (PREOP)
0x96: 0x463b (OPTYPE)
0x98: 0x05d80302 (OPMENU)
0x9C: 0xc79f0190 (OPMENU+4)
0xA0: 0x00000000 (BBAR)
0xC4: 0x0000d807 (LVSCC)
LVSCC: BES=0x3, WG=1, WSR=0, WEWS=0, EO=0xd8, VCL=0
0xC8: 0x0000d807 (UVSCC)
UVSCC: BES=0x3, WG=1, WSR=0, WEWS=0, EO=0xd8, VCL=0
0xD0: 0x00000000 (FPB)
Reading flash descriptors mapped by the chipset via FDOC/FDOD... done.
=== Content Section ===
FLVALSIG 0x0ff0a55a
FLMAP0 0x03040003
FLMAP1 0x12100206
FLMAP2 0x00210020
--- Details ---
NR (Number of Regions): 4
FRBA (Flash Region Base Address): 0x040
NC (Number of Components): 1
FCBA (Flash Component Base Address): 0x030
ISL (ICH/PCH Strap Length): 18
FISBA/FPSBA (Flash ICH/PCH Strap Base Address): 0x100
NM (Number of Masters): 3
FMBA (Flash Master Base Address): 0x060
MSL/PSL (MCH/PROC Strap Length): 0
FMSBA (Flash MCH/PROC Strap Base Address): 0x200
=== Component Section ===
FLCOMP 0x24900025
FLILL 0x00000000
--- Details ---
Component 1 density: 16 MB
Component 2 is not used.
Read Clock Frequency: 20 MHz
Read ID and Status Clock Freq.: 50 MHz
Write and Erase Clock Freq.: 50 MHz
Fast Read is supported.
Fast Read Clock Frequency: 50 MHz
No forbidden opcodes.
=== Region Section ===
FLREG0 0x000f0000
FLREG1 0x0fff0400
FLREG2 0x03ff0020
FLREG3 0x00000fff
FLREG4 0x001f0010
--- Details ---
Region 0 (Descr.) 0x00000000 - 0x0000ffff
Region 1 (BIOS ) 0x00400000 - 0x00ffffff
Region 2 (ME ) 0x00020000 - 0x003fffff
Region 3 (GbE ) is unused.
Region 4 (Platf.) 0x00010000 - 0x0001ffff
=== Master Section ===
FLMSTR1 0x1a1b0000
FLMSTR2 0x04050000
FLMSTR3 0x08090118
--- Details ---
Descr. BIOS ME GbE Platf.
BIOS r rw rw rw
ME r rw
GbE r rw
SPI Read Configuration: prefetching enabled, caching enabled, OK.
The following protocols are supported: FWH, SPI.
Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for SST SST25LF040A, 512 kB:
program_opcodes: preop=5006 optype=462b opmenu=05ab0302c79f0190
on-the-fly OPCODE (0xAB) re-programmed, op-pos=2
probe_spi_res2: id1 0xff, id2 0xff
Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0xff, id2 0xff
Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xff, id2 0xff
Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xff, id2 0xff
Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xff, id2 0xff
Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID.
Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID.
Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID.
Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0x20, id2
0xba18
Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0x20,
id2 0xba18
Probing for Unknown SFDP-capable chip, 0 kB:
program_opcodes: preop=5006 optype=462b opmenu=055a0302c79f0190
on-the-fly OPCODE (0x5A) re-programmed, op-pos=2
SFDP revision = 1.0
SFDP number of parameter headers is 1 (NPH = 0).
SFDP parameter table header 0/0:
ID 0x00, version 1.0
Length 36 B, Parameter Table Pointer 0x000030
Parsing JEDEC flash parameter table...
3-Byte only addressing.
Status register is non-volatile and the standard does not allow
vendors to tell us whether EWSR/WREN is needed for status register
writes - assuming EWSR.
Write chunk size is at least 64 B.
Flash chip size is 16384 kB.
Block eraser 0: 4096 x 4096 B with opcode 0x20
Tried to add a duplicate block eraser: 4096 x 4096 B with opcode 0x20.
Block eraser 1: 256 x 65536 B with opcode 0xd8
done.
===
SFDP has autodetected a flash chip which is not natively supported by
flashrom yet.
All standard operations (read, verify, erase and write) should work, but
to support all possible features we need to add them manually.
You can help us by mailing us the output of the following command to
flashrom(a)flashrom.org:
'flashrom -VV [plus the -p/--programmer parameter (if needed)]'
Thanks for your help!
===
Found Unknown flash chip "SFDP-capable chip" (16384 kB, SPI) at physical
address 0x0.
Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic:
id1 0x20, id2 0xba18
Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic:
id1 0x20, id2 0xba18
Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Macronix unknown Macronix SPI chip, 0 kB:
probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x20, id2 0xba18
Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic:
id1 0x20, id2 0xba18
Probing for Generic unknown SPI chip (RDID), 0 kB:
probe_spi_rdid_generic: id1 0x20, id2 0xba18
Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1
0xff, id2 0xff
Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF016C, 2048 kB: Chip size 2048 kB is bigger than
supported size 1024 kB of chipset/board/programmer for FWH interface,
probe/read/erase/write may fail. probe_82802ab: id1 0xea, id2 0xd0, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW016, 2048 kB: Chip size 2048 kB is bigger than
supported size 1024 kB of chipset/board/programmer for FWH interface,
probe/read/erase/write may fail. probe_82802ab: id1 0xea, id2 0xd0, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff,
id2 0xff, id1 parity violation, id1 is normal flash content, id2 is
normal flash content
Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common:
id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content,
id2 is normal flash content
Found Unknown flash chip "SFDP-capable chip" (16384 kB, SPI).
Reading flash... Transaction error!
SSFS: SCIP=0, FDONE=1, FCERR=1, AEL=0
SSFC: SCGO=0, ACS=0, SPOP=0, COP=1, DBC=63, SME=0, SCF=0
Running OPCODE 0x03 failed at address 0x020000 (payload length was 64).
Read operation failed!
FAILED.
Restoring MMIO space at 0x80058e8a0
Restoring MMIO space at 0x80058e89c
Restoring MMIO space at 0x80058e898
Restoring MMIO space at 0x80058e896
Restoring MMIO space at 0x80058e894
Restoring PCI config space for 00:1f:0 reg 0xdc
Jason
2
1
On Tue, 20 Nov 2012 08:35:19 -0400
"Chea Gittens - IT Specialist" <chea.gittens(a)cgtechinnovations.com>
wrote:
> Hi,
> I upgraded the BIOS of a Biostar H61MGC motherboard to latest version
> available on the Biostar website - H61NR709.BSS after I was getting issues
> with the onboard VGA graphics. I used the flash utility on the motherboard
> and that reported as successful. However windows 7 would not start it
> freezes at the logo screen. I cannot get windows 7 boot DVD to start either
> it also freezes at the logo screen. I was also not able to start Mini
> Windows XP on a Hiren's Boot CD. I am also unable to start the live CDs disk
> Parted Magic or SystemRescueCD. Also none of the USB ports work. I was able
> to start DOS from a FAT32 formatted SATA Hard Drive. I tried to use various
> DOS Bios Flash tools to flash the bios to a pervious version, however I am
> getting errors about the bios being write protected. I am currently trying
> to use flashrom but I would like to get some advice on how to proceed so as
> to not cause further problems. I tried to do a read and save of the bios and
> got the follow output:
> […]
> 0x54: 0x00000000 FREG0: WARNING: Flash Descriptor region
> (0x00000000-0x00000fff) is read-only.
>
> 0x58: 0x03ff0200 FREG1: BIOS region (0x00200000-0x003fffff) is read-write.
>
> 0x5C: 0x01ff0001 FREG2: WARNING: Management Engine region
> (0x00001000-0x001fffff) is locked.
> […]
> Running OPCODE 0x03 failed at address 0x001000 (payload length was 64).
>
> Read operation failed!
Hello Chea,
the problem is the locked ME region as quoted above. We are working on
unlocking it, but intel does not provide us any documentation so please
do not expect a solution soon (or ever).
I have added the board to our list of (un)supported boards (with an
appropriate note) and will commit that later together with other small
changes.
That was my standard reply in cases where there is no harm done yet (by
flashrom or a vendor tool), but it is not complete:
flashrom might still be able to help you. The safest way (and often
also the fastest, if you are prepared already) to handle such cases is
to use an external programmer, i.e. a device that is attached to
another PC and connected to the flash chip via cables, see
http://flashrom.org/ISP
If you happen to have some embedded board (e.g. an Arduino) laying
around this would be an option.
Also, flashrom IS able to write to the BIOS* region of the flash chip.
You can think of those regions as partitions like on normal storage
devices. Their layout and access restrictions are defined by the
descriptor region in the first 4kB of the flash memory. The Management
Engine is an embedded microcontroller in the chipset of the mainboard
and its firmware is stored together with the BIOS in the flash chip (in
its own region which is write and read protected as seen in the log).
The main problem for us is that there is no public documentation on how
the different ME versions interact with the BIOS. We believe that the ME
firmware can not be updated after an operating system has booted (i.e.
only the BIOS itself can flash it similarly as it can update its own
firmware as you have tried). If that is correct it should be possible
to update the BIOS region only with flashrom after preparing the image
and applying some patches to flashrom which have not been merged yet
with our main branch. We can help you with that if you want to try, but
we can not guarantee you that you will be successful and eventually you
could be forced to get an external programmer anyway.
Since you were able to boot DOS the BIOS can not be completely broken
and so the on-board flash tool should still be working (as good or
bad :) as before. Maybe you should try to flash another BIOS version
with that first.
I hope that i could make everything clear and that this will help you.
If you have further questions feel free to mail again or join our IRC
channel.
* actually there is probably no BIOS, but an UEFI firmware, but let's
not get distracted by notations.
--
Kind regards/Mit freundlichen Grüßen, Stefan Tauner
1
0
Nov. 20, 2012
Explicitly detect libusb-0.1 in the Makefile
Avoid funny interactions between libpci and libusb detection.
Leave libftdi autodetection alone for now.
Tested on Linux, needs tests on *BSD and preferably OSX/Windows.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Index: flashrom-libusb0_Makefile/Makefile
===================================================================
--- flashrom-libusb0_Makefile/Makefile (Revision 1622)
+++ flashrom-libusb0_Makefile/Makefile (Arbeitskopie)
@@ -480,6 +480,8 @@
FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'")
FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)")
PROGRAMMER_OBJS += ft2232_spi.o
+# We can't set NEED_USB here because that would transform libftdi auto-enabling
+# into a hard requirement for libusb, defeating the purpose of auto-enabling.
endif
ifeq ($(CONFIG_DUMMY), yes)
@@ -531,8 +533,8 @@
ifeq ($(CONFIG_DEDIPROG), yes)
FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1'
-FEATURE_LIBS += -lusb
PROGRAMMER_OBJS += dediprog.o
+NEED_USB := yes
endif
ifeq ($(CONFIG_SATAMV), yes)
@@ -563,23 +565,23 @@
PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o
ifeq ($(TARGET_OS), NetBSD)
# The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci.
-LIBS += -lpciutils -lpci
+PCILIBS += -lpciutils -lpci
# For (i386|x86_64)_iopl(2).
-LIBS += -l$(shell uname -p)
+PCILIBS += -l$(shell uname -p)
else
ifeq ($(TARGET_OS), DOS)
# FIXME There needs to be a better way to do this
CPPFLAGS += -I../libpci/include
-LIBS += ../libpci/lib/libpci.a
+PCILIBS += ../libpci/lib/libpci.a
else
-LIBS += -lpci
+PCILIBS += -lpci
ifeq ($(TARGET_OS), OpenBSD)
# For (i386|amd64)_iopl(2).
-LIBS += -l$(shell uname -m)
+PCILIBS += -l$(shell uname -m)
else
ifeq ($(TARGET_OS), Darwin)
# DirectHW framework can be found in the DirectHW library.
-LIBS += -framework IOKit -framework DirectHW
+PCILIBS += -framework IOKit -framework DirectHW
else
endif
endif
@@ -587,6 +589,12 @@
endif
endif
+ifeq ($(NEED_USB), yes)
+CHECK_LIBUSB0 = yes
+FEATURE_CFLAGS += -D'NEED_USB=1'
+USBLIBS := $(shell pkg-config --libs libusb 2>/dev/null || printf "%s" "-lusb")
+endif
+
ifeq ($(CONFIG_PRINT_WIKI), yes)
FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1'
CLI_OBJS += print_wiki.o
@@ -600,13 +608,13 @@
LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS)
-all: pciutils features $(PROGRAM)$(EXEC_SUFFIX)
+all: hwlibs features $(PROGRAM)$(EXEC_SUFFIX)
ifeq ($(ARCH), x86)
@+$(MAKE) -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX)
endif
$(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
- $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS)
+ $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) $(PCILIBS) $(USBLIBS)
libflashrom.a: $(LIBFLASHROM_OBJS)
$(AR) rcs $@ $^
@@ -679,8 +687,21 @@
endef
export LIBPCI_TEST
+define LIBUSB0_TEST
+#include <usb.h>
+int main(int argc, char **argv)
+{
+ (void) argc;
+ (void) argv;
+ usb_init();
+ return 0;
+}
+endef
+export LIBUSB0_TEST
+
+hwlibs: compiler
+ @printf "" > .libdeps
ifeq ($(CHECK_LIBPCI), yes)
-pciutils: compiler
@printf "Checking for libpci headers... "
@echo "$$LIBPCI_TEST" > .test.c
@$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \
@@ -689,20 +710,32 @@
echo "See README for more information."; echo; \
rm -f .test.c .test.o; exit 1)
@printf "Checking if libpci is present and sufficient... "
- @printf "" > .libdeps
- @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null && \
+ @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) >/dev/null && \
echo "yes." || ( echo "no."; \
printf "Checking if libz+libpci are present and sufficient..."; \
- $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null && \
+ $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) -lz >/dev/null && \
( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \
echo "Please install libpci (package pciutils) and/or libz."; \
echo "See README for more information."; echo; \
rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) )
@rm -f .test.c .test.o .test$(EXEC_SUFFIX)
-else
-pciutils: compiler
- @printf "" > .libdeps
endif
+ifeq ($(CHECK_LIBUSB0), yes)
+ @printf "Checking for libusb-0.1/libusb-compat headers... "
+ @echo "$$LIBUSB0_TEST" > .test.c
+ @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \
+ echo "found." || ( echo "not found."; echo; \
+ echo "Please install libusb-0.1 headers or libusb-compat headers."; \
+ echo "See README for more information."; echo; \
+ rm -f .test.c .test.o; exit 1)
+ @printf "Checking if libusb-0.1 is usable... "
+ @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(USBLIBS) >/dev/null && \
+ echo "yes." || ( echo "no."; \
+ echo "Please install libusb-0.1 or libusb-compat."; \
+ echo "See README for more information."; echo; \
+ rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1)
+ @rm -f .test.c .test.o .test$(EXEC_SUFFIX)
+endif
.features: features
@@ -816,6 +849,6 @@
libpayload: clean
make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib
-.PHONY: all clean distclean compiler pciutils features export tarball dos featuresavailable
+.PHONY: all clean distclean compiler hwlibs features export tarball dos featuresavailable
-include $(OBJS:.o=.d)
--
http://www.hailfinger.org/
2
2
Author: hailfinger
Date: Tue Nov 20 22:06:16 2012
New Revision: 1623
URL: http://flashrom.org/trac/flashrom/changeset/1623
Log:
Explicitly detect libusb-0.1 in the Makefile
Avoid funny interactions between libpci and libusb detection.
Leave libftdi autodetection alone for now.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Modified:
trunk/Makefile
Modified: trunk/Makefile
==============================================================================
--- trunk/Makefile Mon Nov 5 13:20:29 2012 (r1622)
+++ trunk/Makefile Tue Nov 20 22:06:16 2012 (r1623)
@@ -480,6 +480,8 @@
FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'")
FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)")
PROGRAMMER_OBJS += ft2232_spi.o
+# We can't set NEED_USB here because that would transform libftdi auto-enabling
+# into a hard requirement for libusb, defeating the purpose of auto-enabling.
endif
ifeq ($(CONFIG_DUMMY), yes)
@@ -531,8 +533,8 @@
ifeq ($(CONFIG_DEDIPROG), yes)
FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1'
-FEATURE_LIBS += -lusb
PROGRAMMER_OBJS += dediprog.o
+NEED_USB := yes
endif
ifeq ($(CONFIG_SATAMV), yes)
@@ -563,23 +565,23 @@
PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o
ifeq ($(TARGET_OS), NetBSD)
# The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci.
-LIBS += -lpciutils -lpci
+PCILIBS += -lpciutils -lpci
# For (i386|x86_64)_iopl(2).
-LIBS += -l$(shell uname -p)
+PCILIBS += -l$(shell uname -p)
else
ifeq ($(TARGET_OS), DOS)
# FIXME There needs to be a better way to do this
CPPFLAGS += -I../libpci/include
-LIBS += ../libpci/lib/libpci.a
+PCILIBS += ../libpci/lib/libpci.a
else
-LIBS += -lpci
+PCILIBS += -lpci
ifeq ($(TARGET_OS), OpenBSD)
# For (i386|amd64)_iopl(2).
-LIBS += -l$(shell uname -m)
+PCILIBS += -l$(shell uname -m)
else
ifeq ($(TARGET_OS), Darwin)
# DirectHW framework can be found in the DirectHW library.
-LIBS += -framework IOKit -framework DirectHW
+PCILIBS += -framework IOKit -framework DirectHW
else
endif
endif
@@ -587,6 +589,12 @@
endif
endif
+ifeq ($(NEED_USB), yes)
+CHECK_LIBUSB0 = yes
+FEATURE_CFLAGS += -D'NEED_USB=1'
+USBLIBS := $(shell pkg-config --libs libusb 2>/dev/null || printf "%s" "-lusb")
+endif
+
ifeq ($(CONFIG_PRINT_WIKI), yes)
FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1'
CLI_OBJS += print_wiki.o
@@ -600,13 +608,13 @@
LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS)
-all: pciutils features $(PROGRAM)$(EXEC_SUFFIX)
+all: hwlibs features $(PROGRAM)$(EXEC_SUFFIX)
ifeq ($(ARCH), x86)
@+$(MAKE) -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX)
endif
$(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
- $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS)
+ $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) $(PCILIBS) $(USBLIBS)
libflashrom.a: $(LIBFLASHROM_OBJS)
$(AR) rcs $@ $^
@@ -679,8 +687,21 @@
endef
export LIBPCI_TEST
+define LIBUSB0_TEST
+#include <usb.h>
+int main(int argc, char **argv)
+{
+ (void) argc;
+ (void) argv;
+ usb_init();
+ return 0;
+}
+endef
+export LIBUSB0_TEST
+
+hwlibs: compiler
+ @printf "" > .libdeps
ifeq ($(CHECK_LIBPCI), yes)
-pciutils: compiler
@printf "Checking for libpci headers... "
@echo "$$LIBPCI_TEST" > .test.c
@$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \
@@ -689,19 +710,31 @@
echo "See README for more information."; echo; \
rm -f .test.c .test.o; exit 1)
@printf "Checking if libpci is present and sufficient... "
- @printf "" > .libdeps
- @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null && \
+ @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) >/dev/null && \
echo "yes." || ( echo "no."; \
printf "Checking if libz+libpci are present and sufficient..."; \
- $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null && \
+ $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) -lz >/dev/null && \
( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \
echo "Please install libpci (package pciutils) and/or libz."; \
echo "See README for more information."; echo; \
rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) )
@rm -f .test.c .test.o .test$(EXEC_SUFFIX)
-else
-pciutils: compiler
- @printf "" > .libdeps
+endif
+ifeq ($(CHECK_LIBUSB0), yes)
+ @printf "Checking for libusb-0.1/libusb-compat headers... "
+ @echo "$$LIBUSB0_TEST" > .test.c
+ @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \
+ echo "found." || ( echo "not found."; echo; \
+ echo "Please install libusb-0.1 headers or libusb-compat headers."; \
+ echo "See README for more information."; echo; \
+ rm -f .test.c .test.o; exit 1)
+ @printf "Checking if libusb-0.1 is usable... "
+ @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(USBLIBS) >/dev/null && \
+ echo "yes." || ( echo "no."; \
+ echo "Please install libusb-0.1 or libusb-compat."; \
+ echo "See README for more information."; echo; \
+ rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1)
+ @rm -f .test.c .test.o .test$(EXEC_SUFFIX)
endif
.features: features
@@ -816,6 +849,6 @@
libpayload: clean
make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib
-.PHONY: all clean distclean compiler pciutils features export tarball dos featuresavailable
+.PHONY: all clean distclean compiler hwlibs features export tarball dos featuresavailable
-include $(OBJS:.o=.d)
1
0
Hi,
I upgraded the BIOS of a Biostar H61MGC motherboard to latest version
available on the Biostar website - H61NR709.BSS after I was getting issues
with the onboard VGA graphics. I used the flash utility on the motherboard
and that reported as successful. However windows 7 would not start it
freezes at the logo screen. I cannot get windows 7 boot DVD to start either
it also freezes at the logo screen. I was also not able to start Mini
Windows XP on a Hiren's Boot CD. I am also unable to start the live CDs disk
Parted Magic or SystemRescueCD. Also none of the USB ports work. I was able
to start DOS from a FAT32 formatted SATA Hard Drive. I tried to use various
DOS Bios Flash tools to flash the bios to a pervious version, however I am
getting errors about the bios being write protected. I am currently trying
to use flashrom but I would like to get some advice on how to proceed so as
to not cause further problems. I tried to do a read and save of the bios and
got the follow output:
flashrom v0.9.6.1-r1612 on MS-DOS 7 (i686)
flashrom was built with libpci 3.1.5, GCC 4.4.4, little endian
Command line (7 args): c:/flashrom.exe -r test2.bss -p
internal:laptop=this_is_not_a_laptop -o output.txt -V
Calibrating delay loop... OS timer resolution is 50000 usecs, 1589M loops
per second, delay more than 10% too short (got 88% of expected delay),
recalculating... 1661M loops per second, 10 myus = 0 us, 100 myus = 0 us,
1000 myus = 0 us, 10000 myus = 0 us, 200000 myus = 220000 us, OK.
Initializing internal programmer
No coreboot table found.
DMI string system-manufacturer: ""
DMI string system-product-name: ""
DMI string system-version: ""
DMI string baseboard-manufacturer: ""
DMI string baseboard-product-name: ""
DMI string baseboard-version: ""
DMI string chassis-type: ""
DMI chassis-type is not specific enough.
Found ITE Super I/O, ID 0x8728 on port 0x2e
========================================================================
WARNING! You may be running flashrom on an unsupported laptop. We could
not detect this for sure because your vendor has not setup the SMBIOS
tables correctly. You can enforce execution by adding
'-p internal:laptop=this_is_not_a_laptop' to the command line, but
please read the following warning if you are not sure.
Laptops, notebooks and netbooks are difficult to support and we
recommend to use the vendor flashing utility. The embedded controller
(EC) in these machines often interacts badly with flashing.
See http://www.flashrom.org/Laptops for details.
If flash is shared with the EC, erase is guaranteed to brick your laptop
and write may brick your laptop.
Read and probe may irritate your EC and cause fan failure, backlight
failure and sudden poweroff.
You have been warned.
========================================================================
Proceeding anyway because user forced us to.
Found chipset "Intel H61" with PCI ID 8086:1c5c. Enabling flash write...
0xfff80000/0xffb80000 FWH IDSEL: 0x0
0xfff00000/0xffb00000 FWH IDSEL: 0x0
0xffe80000/0xffa80000 FWH IDSEL: 0x1
0xffe00000/0xffa00000 FWH IDSEL: 0x1
0xffd80000/0xff980000 FWH IDSEL: 0x2
0xffd00000/0xff900000 FWH IDSEL: 0x2
0xffc80000/0xff880000 FWH IDSEL: 0x3
0xffc00000/0xff800000 FWH IDSEL: 0x3
0xff700000/0xff300000 FWH IDSEL: 0x4
0xff600000/0xff200000 FWH IDSEL: 0x5
0xff500000/0xff100000 FWH IDSEL: 0x6
0xff400000/0xff000000 FWH IDSEL: 0x7
0xfff80000/0xffb80000 FWH decode enabled
0xfff00000/0xffb00000 FWH decode enabled
0xffe80000/0xffa80000 FWH decode enabled
0xffe00000/0xffa00000 FWH decode enabled
0xffd80000/0xff980000 FWH decode enabled
0xffd00000/0xff900000 FWH decode enabled
0xffc80000/0xff880000 FWH decode enabled
0xffc00000/0xff800000 FWH decode enabled
0xff700000/0xff300000 FWH decode disabled
0xff600000/0xff200000 FWH decode disabled
0xff500000/0xff100000 FWH decode disabled
0xff400000/0xff000000 FWH decode disabled
Maximum FWH chip size: 0x100000 bytes
BIOS_CNTL = 0x01: BIOS Lock Enable: disabled, BIOS Write Enable: enabled
Root Complex Register Block address = 0xfed1c000
GCS = 0xc04: BIOS Interface Lock-Down: disabled, Boot BIOS Straps: 0x3 (SPI)
Top Swap : not enabled
SPIBAR = 0xfed1c000 + 0x3800
0x04: 0x6008 (HSFS)
HSFS: FDONE=0, FCERR=0, AEL=0, BERASE=1, SCIP=0, FDOPSS=1, FDV=1, FLOCKDN=0
Programming OPCODES...
program_opcodes: preop=5006 optype=463b opmenu=05d80302c79f0190
done
OP Type Pre-OP
op[0]: 0x02, write w/ addr, none
op[1]: 0x03, read w/ addr, none
op[2]: 0xd8, write w/ addr, none
op[3]: 0x05, read w/o addr, none
op[4]: 0x90, read w/ addr, none
op[5]: 0x01, write w/o addr, none
op[6]: 0x9f, read w/o addr, none
op[7]: 0xc7, write w/o addr, none
Pre-OP 0: 0x06, Pre-OP 1: 0x50
0x06: 0x0000 (HSFC)
HSFC: FGO=0, FCYCLE=0, FDBC=0, SME=0
0x08: 0x00001000 (FADDR)
0x50: 0x00000a0b (FRAP)
BMWAG 0x00, BMRAG 0x00, BRWA 0x0a, BRRA 0x0b
0x54: 0x00000000 FREG0: WARNING: Flash Descriptor region
(0x00000000-0x00000fff) is read-only.
0x58: 0x03ff0200 FREG1: BIOS region (0x00200000-0x003fffff) is read-write.
0x5C: 0x01ff0001 FREG2: WARNING: Management Engine region
(0x00001000-0x001fffff) is locked.
0x60: 0x00001fff FREG3: Gigabit Ethernet region is unused.
0x64: 0x00001fff FREG4: Platform Data region is unused.
0x74: 0x00000000 (PR0 is unused)
0x78: 0x00000000 (PR1 is unused)
0x7C: 0x00000000 (PR2 is unused)
0x80: 0x00000000 (PR3 is unused)
0x84: 0x00000000 (PR4 is unused)
Please send a verbose log to flashrom(a)flashrom.org if this board is not
listed on
http://flashrom.org/Supported_hardware#Supported_mainboards yet.
Writes have been disabled. You can enforce write support with the
ich_spi_force programmer option, but it will most likely harm your hardware!
If you force flashrom you will get no support if something breaks.
0x90: 0x84 (SSFS)
SSFS: SCIP=0, FDONE=1, FCERR=0, AEL=0
0x91: 0xf80000 (SSFC)
SSFC: SCGO=0, ACS=0, SPOP=0, COP=0, DBC=0, SME=0, SCF=0
0x94: 0x5006 (PREOP)
0x96: 0x463b (OPTYPE)
0x98: 0x05d80302 (OPMENU)
0x9C: 0xc79f0190 (OPMENU+4)
0xA0: 0x00000000 (BBAR)
0xC4: 0x00002005 (LVSCC)
LVSCC: BES=0x1, WG=1, WSR=0, WEWS=0, EO=0x20, VCL=0
0xC8: 0x00002005 (UVSCC)
UVSCC: BES=0x1, WG=1, WSR=0, WEWS=0, EO=0x20, VCL=0
0xD0: 0x00000000 (FPB)
Reading flash descriptors mapped by the chipset via FDOC/FDOD... done.
=== Content Section ===
FLVALSIG 0x0ff0a55a
FLMAP0 0x02040003
FLMAP1 0x12100206
FLMAP2 0x00210120
--- Details ---
NR (Number of Regions): 3
FRBA (Flash Region Base Address): 0x040
NC (Number of Components): 1
FCBA (Flash Component Base Address): 0x030
ISL (ICH/PCH Strap Length): 18
FISBA/FPSBA (Flash ICH/PCH Strap Base Address): 0x100
NM (Number of Masters): 3
FMBA (Flash Master Base Address): 0x060
MSL/PSL (MCH/PROC Strap Length): 1
FMSBA (Flash MCH/PROC Strap Base Address): 0x200
=== Component Section ===
FLCOMP 0x09900023
FLILL 0x00000000
--- Details ---
Component 1 density: 4 MB
Component 2 is not used.
Read Clock Frequency: 20 MHz
Read ID and Status Clock Freq.: 33 MHz
Write and Erase Clock Freq.: 33 MHz
Fast Read is supported.
Fast Read Clock Frequency: 50 MHz
No forbidden opcodes.
=== Region Section ===
FLREG0 0x00000000
FLREG1 0x03ff0200
FLREG2 0x01ff0001
FLREG3 0x00001fff
--- Details ---
Region 0 (Descr.) 0x00000000 - 0x00000fff
Region 1 (BIOS ) 0x00200000 - 0x003fffff
Region 2 (ME ) 0x00001000 - 0x001fffff
Region 3 (GbE ) is unused.
=== Master Section ===
FLMSTR1 0x0a0b0000
FLMSTR2 0x0c0d0000
FLMSTR3 0x08080118
--- Details ---
Descr. BIOS ME GbE Platf.
BIOS r rw rw
ME r rw rw
GbE rw
SPI Read Configuration: prefetching disabled, caching enabled, OK.
Super I/O ID 0x8728 is not on the list of flash capable controllers.
The following protocols are supported: FWH, SPI.
Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25F64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Chip status register is 00
Found Eon flash chip "EN25Q32(A/B)" (4096 kB, SPI) at physical address
0xffc00000.
Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for GigaDevice GD25LQ32, 4096 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Numonyx N25Q064..1E, 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Numonyx N25Q064..3E, 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for SST SST25LF040A, 512 kB:
program_opcodes: preop=5006 optype=462b opmenu=05ab0302c79f0190
on-the-fly OPCODE (0xAB) re-programmed, op-pos=2
probe_spi_res2: id1 0x15, id2 0x15
Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x15, id2 0x15
Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0x1c, id2 0x15
Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0x1c, id2 0x15
Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0x1c, id2 0x15
Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25WF512, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25WF010, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25WF020, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for SST SST25WF040, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID.
Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID.
Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID.
Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0x1c, id2
0x3016
Probing for Unknown SFDP-capable chip, 0 kB:
program_opcodes: preop=5006 optype=462b opmenu=055a0302c79f0190
on-the-fly OPCODE (0x5A) re-programmed, op-pos=2
Signature = 0xffffffff (should be 0x50444653)
No SFDP signature found.
Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for Macronix unknown Macronix SPI chip, 0 kB:
probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1c,
id2 0x3016
Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1
0x1c, id2 0x3016
Probing for Winbond unknown Winbond (ex Nexcom) SPI chip, 0 kB:
probe_spi_rdid_generic: id1 0x1c, id2 0x3016
Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic:
id1 0x1c, id2 0x3016
Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0x1c,
id2 0x15
Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xf9, id2 0x17, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xea, id2 0xd0, id1 is
normal flash content, id2 is normal flash content
Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1
is normal flash content, id2 is normal flash content
Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xf9, id2 0x17,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xea, id2 0xd0,
id1 is normal flash content, id2 is normal flash content
Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1
is normal flash content, id2 is normal flash content
Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xf9, id2
0x17, id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0x00, id2
0x00, id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xea, id2
0xd0, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xea, id2 0xd0, id1
is normal flash content, id2 is normal flash content
Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xae, id2
0x7b, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1
is normal flash content, id2 is normal flash content
Probing for SST SST49LF016C, 2048 kB: Chip size 2048 kB is bigger than
supported size 1024 kB of chipset/board/programmer for FWH interface,
probe/read/erase/write may fail. probe_82802ab: id1 0x00, id2 0x00, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xea, id2 0xd0, id1 is
normal flash content, id2 is normal flash content
Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xea, id2 0xd0, id1 is
normal flash content, id2 is normal flash content
Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xf9, id2 0x17, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW016, 2048 kB: Chip size 2048 kB is bigger than supported
size 1024 kB of chipset/board/programmer for FWH interface,
probe/read/erase/write may fail. probe_82802ab: id1 0x00, id2 0x00, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xea, id2 0xd0, id1 is
normal flash content, id2 is normal flash content
Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xae, id2 0x7b, id1 is
normal flash content, id2 is normal flash content
Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xea, id2
0xd0, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xea, id2
0xd0, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xea, id2
0xd0, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xf9, id2
0x17, id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xae, id2
0x7b, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1
0xea, id2 0xd0, id1 is normal flash content, id2 is normal flash content
Found Eon flash chip "EN25Q32(A/B)" (4096 kB, SPI).
This chip may contain one-time programmable memory. flashrom cannot read
and may never be able to write it, hence it may not be able to completely
clone the contents of this chip (see man page for details).
===
This flash part has status UNTESTED for operations: READ 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,
-VE, -Vw), and mention which mainboard or programmer you tested.
Please mention your board in the subject line. Thanks for your help!
Reading flash... Transaction error!
SSFS: SCIP=0, FDONE=1, FCERR=1, AEL=0
SSFC: SCGO=0, ACS=0, SPOP=0, COP=1, DBC=63, SME=0, SCF=0
Running OPCODE 0x03 failed at address 0x001000 (payload length was 64).
Read operation failed!
FAILED.
Restoring MMIO space at fe91f8a0
Restoring MMIO space at fe91f89c
Restoring MMIO space at fe91f898
Restoring MMIO space at fe91f896
Restoring MMIO space at fe91f894
Restoring PCI config space for 00:1f:0 reg 0xdc
Best Regards,
Chea Gittens
1
0
I'd like to raise a concern flashroom members how to make flash motherboards computer SFF HP DC 71000
2
1
flashrom v0.9.5.2-r1530 on Linux 2.6.32-279.14.1.el6.x86_64 (x86_64), built
with libpci 3.1.4, GCC 4.4.6 20110731 (Red Hat 4.4.6-3), little endian
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OS timer resolution is 1 usecs, 732M loops per
second, 10 myus = 11 us, 100 myus = 100 us, 1000 myus = 1049 us, 10000 myus
= 10046 us, 4 myus = 5 us, OK.
Initializing internal programmer
No coreboot table found.
DMI string system-manufacturer: "Gigabyte Technology Co., Ltd."
DMI string system-product-name: "M61SME-S2L"
DMI string system-version: " "
DMI string baseboard-manufacturer: "Gigabyte Technology Co., Ltd."
DMI string baseboard-product-name: "M61SME-S2L"
DMI string baseboard-version: "x.x"
DMI string chassis-type: "Desktop"
Found ITE Super I/O, ID 0x8716 on port 0x2e
Found chipset "NVIDIA MCP61" with PCI ID 10de:03e0. Enabling flash write...
This chipset is not really supported yet. Guesswork...
ISA/LPC bridge reg 0x8a contents: 0x00, bit 6 is 0, bit 5 is 0
Flash bus type is LPC
Found SMBus device 10de:03eb at 00:01:1
MCP SPI BAR is at 0xfec80000
Strange. MCP SPI BAR is valid, but chipset apparently doesn't have SPI
enabled.
Please send the output of "flashrom -V" to flashrom(a)flashrom.org with
your board name: flashrom -V as the subject to help us finish support for
your
chipset. Thanks.
OK.
Serial flash segment 0xfffe0000-0xffffffff enabled
Serial flash segment 0x000e0000-0x000fffff enabled
Serial flash segment 0xffee0000-0xffefffff disabled
Serial flash segment 0xfff80000-0xfffeffff enabled
LPC write to serial flash enabled
Serial flash pin 29
Serial flash port 0x0820
The following protocols are supported: LPC, SPI.
Probing for AMIC A25L05PT, 64 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L05PU, 64 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L10PT, 128 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L10PU, 128 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L20PT, 256 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L20PU, 256 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L40PT, 512 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L40PU, 512 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L80P, 1024 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L16PT, 2048 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L16PU, 2048 kB: 4 byte RDID not supported on this SPI
controller
Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Chip status register is 00
Chip status register: Status Register Write Disable (SRWD) is not set
Chip status register: Bit 6 is not set
Chip status register: Bit 5 / Block Protect 3 (BP3) is not set
Chip status register: Bit 4 / Block Protect 2 (BP2) is not set
Chip status register: Bit 3 / Block Protect 1 (BP1) is not set
Chip status register: Bit 2 / Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Found Macronix flash chip "MX25L4005" (512 kB, SPI) at physical address
0xfff80000.
Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x12, id2 0x12
Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x12, id2 0x12
Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xc2, id2 0x12
Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xc2, id2 0x12
Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xc2, id2 0x12
Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID.
Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID.
Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID.
Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2
0x2013
Probing for Unknown SFDP-capable chip, 0 kB: No SFDP signature found.
Probing for AMIC unknown AMIC SPI chip, 0 kB: 4 byte RDID not supported on
this SPI controller
Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for Macronix unknown Macronix SPI chip, 0 kB:
probe_spi_rdid_generic: id1 0xc2, id2 0x2013
Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2,
id2 0x2013
Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1
0xc2, id2 0x2013
Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic:
id1 0xc2, id2 0x2013
Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1
0xc2, id2 0x12
Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0x49, id2 0x4d,
id1 is normal flash content, id2 is normal flash content
Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xcf, id2 0xa0, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xcf, id2 0xa0,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0x49, id2 0x4d,
id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xcf, id2 0xa0,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xcf, id2
0xa0, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0x49, id2 0x4d,
id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0x49, id2
0x4d, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing
information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff,
id1 parity violation, id1 is normal flash content, id2 is normal flash
content
Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0x49, id2 0x4d, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0x49, id2 0x4d, id1
is normal flash content, id2 is normal flash content
Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1
parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0x49, id2
0x4d, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0x49, id2
0x4d, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0x49, id2
0x4d, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2
0xff, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xcf, id2
0xa0, id1 parity violation, id1 is normal flash content, id2 is normal
flash content
Found Macronix flash chip "MX25L4005" (512 kB, SPI).
No operations were specified.
Restoring PCI config space for 00:01:0 reg 0x6d
Restoring PCI config space for 00:01:0 reg 0x90
Restoring PCI config space for 00:01:0 reg 0x8c
Restoring PCI config space for 00:01:0 reg 0x88
--
Best regards,
Anton Sizov.
phone: +375-25-9771385
e-mail: a.sysoff(a)gmail.com
1
0
[PATCH 3/3] [RFC] Unify usbdev_status and pcidev_status into dev_status.
by Stefan Tauner Nov. 17, 2012
by Stefan Tauner Nov. 17, 2012
Nov. 17, 2012
usbdev_status was created for the ft2232 programmer. Its IDs are semantically
different because they indicate USB instead of PCI IDs, but apart from that both
data structures are equal. This change makes life easier for everything involved
in handling and printing the status of devices that is noted in that structure.
---
It is still possible to distinguish between PCI and USB devices by using the
struct programmer's type field. It still seems a bit hacky, but i think we are better
off with it anyway. If we really would want to distinguish between the different
types of IDs i'd rater make the IDs a union of different ID types inside struct
dev_status.
Signed-off-by: Stefan Tauner <stefan.tauner(a)student.tuwien.ac.at>
---
atahpt.c | 2 +-
drkaiser.c | 2 +-
flashrom.c | 40 ++++++++++++++++++++--------------------
ft2232_spi.c | 2 +-
gfxnvidia.c | 2 +-
nic3com.c | 2 +-
nicintel.c | 2 +-
nicintel_spi.c | 2 +-
nicnatsemi.c | 2 +-
nicrealtek.c | 2 +-
ogp_spi.c | 2 +-
pcidev.c | 2 +-
print.c | 19 +++++++++----------
print_wiki.c | 46 +++++++++-------------------------------------
programmer.h | 52 +++++++++++++++++++++++++++++-----------------------
satamv.c | 2 +-
satasii.c | 2 +-
17 files changed, 80 insertions(+), 103 deletions(-)
diff --git a/atahpt.c b/atahpt.c
index 8ec0f3f..c81b3c4 100644
--- a/atahpt.c
+++ b/atahpt.c
@@ -33,7 +33,7 @@
#define PCI_VENDOR_ID_HPT 0x1103
-const struct pcidev_status ata_hpt[] = {
+const struct dev_status ata_hpt[] = {
{0x1103, 0x0004, NT, "Highpoint", "HPT366/368/370/370A/372/372N"},
{0x1103, 0x0005, NT, "Highpoint", "HPT372A/372N"},
{0x1103, 0x0006, NT, "Highpoint", "HPT302/302N"},
diff --git a/drkaiser.c b/drkaiser.c
index 8c9f560..9c6ba01 100644
--- a/drkaiser.c
+++ b/drkaiser.c
@@ -33,7 +33,7 @@
/* Mask to restrict flash accesses to the 128kB memory window. */
#define DRKAISER_MEMMAP_MASK ((1 << 17) - 1)
-const struct pcidev_status drkaiser_pcidev[] = {
+const struct dev_status drkaiser_pcidev[] = {
{0x1803, 0x5057, OK, "Dr. Kaiser", "PC-Waechter (Actel FPGA)"},
{0},
diff --git a/flashrom.c b/flashrom.c
index d873276..ae8f70c 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -65,7 +65,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "internal",
.type = OTHER,
- .devices.note = NULL,
+ .devs.note = NULL,
.init = internal_init,
.map_flash_region = physmap,
.unmap_flash_region = physunmap,
@@ -78,7 +78,7 @@ const struct programmer_entry programmer_table[] = {
.name = "dummy",
.type = OTHER,
/* FIXME */
- .devices.note = "Dummy device, does nothing and logs all accesses\n",
+ .devs.note = "Dummy device, does nothing and logs all accesses\n",
.init = dummy_init,
.map_flash_region = dummy_map,
.unmap_flash_region = dummy_unmap,
@@ -90,7 +90,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "nic3com",
.type = PCI,
- .devices.pci = nics_3com,
+ .devs.status = nics_3com,
.init = nic3com_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -103,7 +103,7 @@ const struct programmer_entry programmer_table[] = {
/* This programmer works for Realtek RTL8139 and SMC 1211. */
.name = "nicrealtek",
.type = PCI,
- .devices.pci = nics_realtek,
+ .devs.status = nics_realtek,
.init = nicrealtek_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -115,7 +115,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "nicnatsemi",
.type = PCI,
- .devices.pci = nics_natsemi,
+ .devs.status = nics_natsemi,
.init = nicnatsemi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -127,7 +127,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "gfxnvidia",
.type = PCI,
- .devices.pci = gfx_nvidia,
+ .devs.status = gfx_nvidia,
.init = gfxnvidia_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -139,7 +139,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "drkaiser",
.type = PCI,
- .devices.pci = drkaiser_pcidev,
+ .devs.status = drkaiser_pcidev,
.init = drkaiser_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -151,7 +151,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "satasii",
.type = PCI,
- .devices.pci = satas_sii,
+ .devs.status = satas_sii,
.init = satasii_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -163,7 +163,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "atahpt",
.type = PCI,
- .devices.pci = ata_hpt,
+ .devs.status = ata_hpt,
.init = atahpt_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -175,7 +175,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "ft2232_spi",
.type = USB,
- .devices.usb = devs_ft2232spi,
+ .devs.status = devs_ft2232spi,
.init = ft2232_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -188,7 +188,7 @@ const struct programmer_entry programmer_table[] = {
.name = "serprog",
.type = OTHER,
/* FIXME */
- .devices.note = "All programmer devices speaking the serprog protocol\n",
+ .devs.note = "All programmer devices speaking the serprog protocol\n",
.init = serprog_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -201,7 +201,7 @@ const struct programmer_entry programmer_table[] = {
.name = "buspirate_spi",
.type = OTHER,
/* FIXME */
- .devices.note = "Dangerous Prototypes Bus Pirate\n",
+ .devs.note = "Dangerous Prototypes Bus Pirate\n",
.init = buspirate_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -214,7 +214,7 @@ const struct programmer_entry programmer_table[] = {
.name = "dediprog",
.type = OTHER,
/* FIXME */
- .devices.note = "Dediprog SF100\n",
+ .devs.note = "Dediprog SF100\n",
.init = dediprog_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -227,7 +227,7 @@ const struct programmer_entry programmer_table[] = {
.name = "rayer_spi",
.type = OTHER,
/* FIXME */
- .devices.note = "RayeR parallel port programmer\n",
+ .devs.note = "RayeR parallel port programmer\n",
.init = rayer_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -240,7 +240,7 @@ const struct programmer_entry programmer_table[] = {
.name = "pony_spi",
.type = OTHER,
/* FIXME */
- .devices.note = "Programmers compatible with SI-Prog, serbang or AJAWe\n",
+ .devs.note = "Programmers compatible with SI-Prog, serbang or AJAWe\n",
.init = pony_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -252,7 +252,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "nicintel",
.type = PCI,
- .devices.pci = nics_intel,
+ .devs.status = nics_intel,
.init = nicintel_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -264,7 +264,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "nicintel_spi",
.type = PCI,
- .devices.pci = nics_intel_spi,
+ .devs.status = nics_intel_spi,
.init = nicintel_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -276,7 +276,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "ogp_spi",
.type = PCI,
- .devices.pci = ogp_spi,
+ .devs.status = ogp_spi,
.init = ogp_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -288,7 +288,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "satamv",
.type = PCI,
- .devices.pci = satas_mv,
+ .devs.status = satas_mv,
.init = satamv_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
@@ -300,7 +300,7 @@ const struct programmer_entry programmer_table[] = {
{
.name = "linux_spi",
.type = OTHER,
- .devices.note = "Device files /dev/spidev*.*\n",
+ .devs.note = "Device files /dev/spidev*.*\n",
.init = linux_spi_init,
.map_flash_region = fallback_map,
.unmap_flash_region = fallback_unmap,
diff --git a/ft2232_spi.c b/ft2232_spi.c
index dc17d00..aaeca67 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -57,7 +57,7 @@
#define OLIMEX_ARM_OCD_H_PID 0x002B
#define OLIMEX_ARM_TINY_H_PID 0x002A
-const struct usbdev_status devs_ft2232spi[] = {
+const struct dev_status devs_ft2232spi[] = {
{FTDI_VID, FTDI_FT2232H_PID, OK, "FTDI", "FT2232H"},
{FTDI_VID, FTDI_FT4232H_PID, OK, "FTDI", "FT4232H"},
{FTDI_VID, FTDI_FT232H_PID, OK, "FTDI", "FT232H"},
diff --git a/gfxnvidia.c b/gfxnvidia.c
index 7bdbda8..4c334eb 100644
--- a/gfxnvidia.c
+++ b/gfxnvidia.c
@@ -34,7 +34,7 @@
uint8_t *nvidia_bar;
-const struct pcidev_status gfx_nvidia[] = {
+const struct dev_status gfx_nvidia[] = {
{0x10de, 0x0010, NT, "NVIDIA", "Mutara V08 [NV2]" },
{0x10de, 0x0018, NT, "NVIDIA", "RIVA 128" },
{0x10de, 0x0020, NT, "NVIDIA", "RIVA TNT" },
diff --git a/nic3com.c b/nic3com.c
index c7fc800..4e623e0 100644
--- a/nic3com.c
+++ b/nic3com.c
@@ -36,7 +36,7 @@
static uint32_t internal_conf;
static uint16_t id;
-const struct pcidev_status nics_3com[] = {
+const struct dev_status nics_3com[] = {
/* 3C90xB */
{0x10b7, 0x9055, OK, "3COM", "3C90xB: PCI 10/100 Mbps; shared 10BASE-T/100BASE-TX"},
{0x10b7, 0x9001, NT, "3COM", "3C90xB: PCI 10/100 Mbps; shared 10BASE-T/100BASE-T4" },
diff --git a/nicintel.c b/nicintel.c
index 4399377..8c8ce0d 100644
--- a/nicintel.c
+++ b/nicintel.c
@@ -27,7 +27,7 @@
uint8_t *nicintel_bar;
uint8_t *nicintel_control_bar;
-const struct pcidev_status nics_intel[] = {
+const struct dev_status nics_intel[] = {
{PCI_VENDOR_ID_INTEL, 0x1209, NT, "Intel", "8255xER/82551IT Fast Ethernet Controller"},
{PCI_VENDOR_ID_INTEL, 0x1229, OK, "Intel", "82557/8/9/0/1 Ethernet Pro 100"},
diff --git a/nicintel_spi.c b/nicintel_spi.c
index 24d5732..160e050 100644
--- a/nicintel_spi.c
+++ b/nicintel_spi.c
@@ -67,7 +67,7 @@
uint8_t *nicintel_spibar;
-const struct pcidev_status nics_intel_spi[] = {
+const struct dev_status nics_intel_spi[] = {
{PCI_VENDOR_ID_INTEL, 0x105e, OK, "Intel", "82571EB Gigabit Ethernet Controller"},
{PCI_VENDOR_ID_INTEL, 0x1076, OK, "Intel", "82541GI Gigabit Ethernet Controller"},
{PCI_VENDOR_ID_INTEL, 0x107c, OK, "Intel", "82541PI Gigabit Ethernet Controller"},
diff --git a/nicnatsemi.c b/nicnatsemi.c
index fcfc613..e7ba5af 100644
--- a/nicnatsemi.c
+++ b/nicnatsemi.c
@@ -30,7 +30,7 @@
#define BOOT_ROM_ADDR 0x50
#define BOOT_ROM_DATA 0x54
-const struct pcidev_status nics_natsemi[] = {
+const struct dev_status nics_natsemi[] = {
{0x100b, 0x0020, NT, "National Semiconductor", "DP83815/DP83816"},
{0x100b, 0x0022, NT, "National Semiconductor", "DP83820"},
diff --git a/nicrealtek.c b/nicrealtek.c
index 92f48a8..2fee7c4 100644
--- a/nicrealtek.c
+++ b/nicrealtek.c
@@ -30,7 +30,7 @@
static int bios_rom_addr, bios_rom_data;
-const struct pcidev_status nics_realtek[] = {
+const struct dev_status nics_realtek[] = {
{0x10ec, 0x8139, OK, "Realtek", "RTL8139/8139C/8139C+"},
{0x10ec, 0x8169, NT, "Realtek", "RTL8169"},
{0x1113, 0x1211, OK, "SMC", "1211TX"}, /* RTL8139 clone */
diff --git a/ogp_spi.c b/ogp_spi.c
index 7aee72b..d2fec8a 100644
--- a/ogp_spi.c
+++ b/ogp_spi.c
@@ -47,7 +47,7 @@ static uint32_t ogp_reg_siso;
static uint32_t ogp_reg__ce;
static uint32_t ogp_reg_sck;
-const struct pcidev_status ogp_spi[] = {
+const struct dev_status ogp_spi[] = {
{PCI_VENDOR_ID_OGP, 0x0000, OK, "Open Graphics Project", "Development Board OGD1"},
{0},
diff --git a/pcidev.c b/pcidev.c
index bfc8a5d..e1d3875 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -154,7 +154,7 @@ uintptr_t pcidev_readbar(struct pci_dev *dev, int bar)
return (uintptr_t)addr;
}
-uintptr_t pcidev_init(int bar, const struct pcidev_status *devs)
+uintptr_t pcidev_init(int bar, const struct dev_status *devs)
{
struct pci_dev *dev;
struct pci_filter filter;
diff --git a/print.c b/print.c
index 4b23ca0..69c9688 100644
--- a/print.c
+++ b/print.c
@@ -433,11 +433,12 @@ static void print_supported_boards_helper(const struct board_info *boards,
}
#endif
-void print_supported_usbdevs(const struct usbdev_status *devs)
+void print_supported_devs(const struct programmer_entry prog, const char *const type)
{
int i;
- msg_pinfo("USB devices:\n");
+ const struct dev_status *const devs = prog.devs.status;
+ msg_ginfo("\nSupported %s devices for the %s programmer:\n", type, prog.name);
for (i = 0; devs[i].vendor_name != NULL; i++) {
msg_pinfo("%s %s [%04x:%04x]%s\n", devs[i].vendor_name, devs[i].device_name, devs[i].vendor_id,
devs[i].device_id, (devs[i].status == NT) ? " (untested)" : "");
@@ -477,20 +478,18 @@ int print_supported(void)
const struct programmer_entry prog = programmer_table[i];
switch (prog.type) {
case USB:
- msg_ginfo("\nSupported USB devices for the %s programmer:\n", prog.name);
- print_supported_usbdevs(prog.devices.usb);
+ print_supported_devs(prog, "USB");
break;
#if NEED_PCI == 1
case PCI:
- msg_ginfo("\nSupported PCI devices for the %s programmer:\n", prog.name);
- print_supported_pcidevs(prog.devices.pci);
+ print_supported_devs(prog, "PCI");
break;
#endif
case OTHER:
- if (prog.devices.note == NULL)
- break;
- msg_ginfo("\nSupported devices for the %s programmer:\n", prog.name);
- msg_ginfo("%s", prog.devices.note);
+ if (prog.devs.note != NULL) {
+ msg_ginfo("\nSupported devices for the %s programmer:\n", prog.name);
+ msg_ginfo("%s", prog.devs.note);
+ }
break;
default:
msg_gerr("\n%s: %s: Uninitialized programmer type! Please report a bug at "
diff --git a/print_wiki.c b/print_wiki.c
index d936682..55a88fa 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -301,49 +301,21 @@ static void print_supported_chips_wiki(int cols)
/* Following functions are not needed when no PCI/USB programmers are compiled in,
* but since print_wiki code has no size constraints we include it unconditionally. */
-static int count_supported_pcidevs_wiki(const struct pcidev_status *devs)
+static int count_supported_devs_wiki(const struct dev_status *devs)
{
unsigned int count = 0;
unsigned int i = 0;
for (i = 0; devs[i].vendor_name != NULL; i++)
- count++;
+ count++;
return count;
}
-static void print_supported_pcidevs_wiki_helper(const struct programmer_entry prog)
+static void print_supported_devs_wiki_helper(const struct programmer_entry prog)
{
int i = 0;
static int c = 0;
- const struct pcidev_status *devs = prog.devices.pci;
- const unsigned int count = count_supported_pcidevs_wiki(devs);
-
- /* Alternate colors if the vendor changes. */
- c = !c;
-
- for (i = 0; devs[i].vendor_name != NULL; i++) {
- printf("|- bgcolor=\"#%s\"\n", (c) ? "eeeeee" : "dddddd");
- if (i == 0)
- printf("| rowspan=\"%u\" | %s |", count, prog.name);
- printf("| %s || %s || %04x:%04x || {{%s}}\n", devs[i].vendor_name, devs[i].device_name,
- devs[i].vendor_id, devs[i].device_id, (devs[i].status == NT) ? "?3" : "OK");
- }
-}
-
-static int count_supported_usbdevs_wiki(const struct usbdev_status *devs)
-{
- unsigned int count = 0;
- unsigned int i = 0;
- for (i = 0; devs[i].vendor_name != NULL; i++)
- count++;
- return count;
-}
-
-static void print_supported_usbdevs_wiki_helper(const struct programmer_entry prog)
-{
- int i = 0;
- static int c = 0;
- const struct usbdev_status *devs = prog.devices.usb;
- const unsigned int count = count_supported_usbdevs_wiki(devs);
+ const struct dev_status *devs = prog.devs.status;
+ const unsigned int count = count_supported_devs_wiki(devs);
/* Alternate colors if the vendor changes. */
c = !c;
@@ -367,10 +339,10 @@ static void print_supported_devs_wiki()
const struct programmer_entry prog = programmer_table[i];
switch (prog.type) {
case USB:
- usb_count += count_supported_usbdevs_wiki(prog.devices.usb);
+ usb_count += count_supported_devs_wiki(prog.devs.status);
break;
case PCI:
- pci_count += count_supported_pcidevs_wiki(prog.devices.pci);
+ pci_count += count_supported_devs_wiki(prog.devs.status);
break;
case OTHER:
default:
@@ -385,7 +357,7 @@ static void print_supported_devs_wiki()
for (i = 0; i < PROGRAMMER_INVALID; i++) {
const struct programmer_entry prog = programmer_table[i];
if (prog.type == PCI) {
- print_supported_pcidevs_wiki_helper(prog);
+ print_supported_devs_wiki_helper(prog);
}
}
printf("\n|}\n\n|}\n");
@@ -397,7 +369,7 @@ static void print_supported_devs_wiki()
for (i = 0; i < PROGRAMMER_INVALID; i++) {
const struct programmer_entry prog = programmer_table[i];
if (prog.type == USB) {
- print_supported_usbdevs_wiki_helper(prog);
+ print_supported_devs_wiki_helper(prog);
}
}
printf("\n|}\n\n|}\n");
diff --git a/programmer.h b/programmer.h
index 21fa707..90033a9 100644
--- a/programmer.h
+++ b/programmer.h
@@ -96,15 +96,22 @@ enum programmer_type {
OTHER,
};
+struct dev_status {
+ uint16_t vendor_id;
+ uint16_t device_id;
+ const enum test_state status;
+ const char *vendor_name;
+ const char *device_name;
+};
+
struct programmer_entry {
const char *vendor;
const char *name;
const enum programmer_type type;
union {
- const struct pcidev_status *const pci;
- const struct usbdev_status *const usb;
+ const struct dev_status *const status;
const char *const note;
- } devices;
+ } devs;
int (*init) (void);
@@ -234,7 +241,7 @@ extern uint32_t io_base_addr;
extern struct pci_access *pacc;
extern struct pci_dev *pcidev_dev;
uintptr_t pcidev_readbar(struct pci_dev *dev, int bar);
-uintptr_t pcidev_init(int bar, const struct pcidev_status *devs);
+uintptr_t pcidev_init(int bar, const struct dev_status *devs);
/* rpci_write_* are reversible writes. The original PCI config space register
* contents will be restored on shutdown.
*/
@@ -243,12 +250,6 @@ int rpci_write_word(struct pci_dev *dev, int reg, uint16_t data);
int rpci_write_long(struct pci_dev *dev, int reg, uint32_t data);
#endif
-/* print.c */
-#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV >= 1
-/* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */
-void print_supported_pcidevs(const struct pcidev_status *devs);
-#endif
-
struct usbdev_status {
uint16_t vendor_id;
uint16_t device_id;
@@ -264,6 +265,12 @@ struct pcidev_status {
const char *device_name;
};
+/* print.c */
+#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV >= 1
+/* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */
+void print_supported_pcidevs(const struct pcidev_status *devs);
+#endif
+
#if CONFIG_INTERNAL == 1
/* board_enable.c */
int board_parse_parameter(const char *boardstring, const char **vendor, const char **model);
@@ -377,74 +384,73 @@ void dummy_unmap(void *virt_addr, size_t len);
/* nic3com.c */
#if CONFIG_NIC3COM == 1
int nic3com_init(void);
-extern const struct pcidev_status nics_3com[];
+extern const struct dev_status nics_3com[];
#endif
/* gfxnvidia.c */
#if CONFIG_GFXNVIDIA == 1
int gfxnvidia_init(void);
-extern const struct pcidev_status gfx_nvidia[];
+extern const struct dev_status gfx_nvidia[];
#endif
/* drkaiser.c */
#if CONFIG_DRKAISER == 1
int drkaiser_init(void);
-extern const struct pcidev_status drkaiser_pcidev[];
+extern const struct dev_status drkaiser_pcidev[];
#endif
/* nicrealtek.c */
#if CONFIG_NICREALTEK == 1
int nicrealtek_init(void);
-extern const struct pcidev_status nics_realtek[];
+extern const struct dev_status nics_realtek[];
#endif
/* nicnatsemi.c */
#if CONFIG_NICNATSEMI == 1
int nicnatsemi_init(void);
-extern const struct pcidev_status nics_natsemi[];
+extern const struct dev_status nics_natsemi[];
#endif
/* nicintel.c */
#if CONFIG_NICINTEL == 1
int nicintel_init(void);
-extern const struct pcidev_status nics_intel[];
+extern const struct dev_status nics_intel[];
#endif
/* nicintel_spi.c */
#if CONFIG_NICINTEL_SPI == 1
int nicintel_spi_init(void);
-extern const struct pcidev_status nics_intel_spi[];
+extern const struct dev_status nics_intel_spi[];
#endif
/* ogp_spi.c */
#if CONFIG_OGP_SPI == 1
int ogp_spi_init(void);
-extern const struct pcidev_status ogp_spi[];
+extern const struct dev_status ogp_spi[];
#endif
/* satamv.c */
#if CONFIG_SATAMV == 1
int satamv_init(void);
-extern const struct pcidev_status satas_mv[];
+extern const struct dev_status satas_mv[];
#endif
/* satasii.c */
#if CONFIG_SATASII == 1
int satasii_init(void);
-extern const struct pcidev_status satas_sii[];
+extern const struct dev_status satas_sii[];
#endif
/* atahpt.c */
#if CONFIG_ATAHPT == 1
int atahpt_init(void);
-extern const struct pcidev_status ata_hpt[];
+extern const struct dev_status ata_hpt[];
#endif
/* ft2232_spi.c */
#if CONFIG_FT2232_SPI == 1
int ft2232_spi_init(void);
-extern const struct usbdev_status devs_ft2232spi[];
-void print_supported_usbdevs(const struct usbdev_status *devs);
+extern const struct dev_status devs_ft2232spi[];
#endif
/* rayer_spi.c */
diff --git a/satamv.c b/satamv.c
index 27ad699..0fc9a25 100644
--- a/satamv.c
+++ b/satamv.c
@@ -29,7 +29,7 @@
uint8_t *mv_bar;
uint16_t mv_iobar;
-const struct pcidev_status satas_mv[] = {
+const struct dev_status satas_mv[] = {
/* 88SX6041 and 88SX6042 are the same according to the datasheet. */
{0x11ab, 0x7042, OK, "Marvell", "88SX7042 PCI-e 4-port SATA-II"},
diff --git a/satasii.c b/satasii.c
index f991686..96b73a1 100644
--- a/satasii.c
+++ b/satasii.c
@@ -30,7 +30,7 @@
static uint8_t *sii_bar;
static uint16_t id;
-const struct pcidev_status satas_sii[] = {
+const struct dev_status satas_sii[] = {
{0x1095, 0x0680, OK, "Silicon Image", "PCI0680 Ultra ATA-133 Host Ctrl"},
{0x1095, 0x3112, OK, "Silicon Image", "SiI 3112 [SATALink/SATARaid] SATA Ctrl"},
{0x1095, 0x3114, OK, "Silicon Image", "SiI 3114 [SATALink/SATARaid] SATA Ctrl"},
--
Kind regards, Stefan Tauner
1
0
[PATCH 2/3] print_wiki.c: add a programmer column to the PCI and USB devices lists
by Stefan Tauner Nov. 17, 2012
by Stefan Tauner Nov. 17, 2012
Nov. 17, 2012
Signed-off-by: Stefan Tauner <stefan.tauner(a)student.tuwien.ac.at>
---
print_wiki.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/print_wiki.c b/print_wiki.c
index 17e2e85..d936682 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -77,6 +77,7 @@ static const char chip_th[] = "\
| align=\"center\" | Min \n| align=\"center\" | Max\n\n";
static const char programmer_th[] = "\
+! align=\"left\" | Programmer\n\
! align=\"left\" | Vendor\n\
! align=\"left\" | Device\n\
! align=\"center\" | IDs\n\
@@ -309,18 +310,22 @@ static int count_supported_pcidevs_wiki(const struct pcidev_status *devs)
return count;
}
-static void print_supported_pcidevs_wiki_helper(const struct pcidev_status *devs)
+static void print_supported_pcidevs_wiki_helper(const struct programmer_entry prog)
{
int i = 0;
static int c = 0;
+ const struct pcidev_status *devs = prog.devices.pci;
+ const unsigned int count = count_supported_pcidevs_wiki(devs);
/* Alternate colors if the vendor changes. */
c = !c;
for (i = 0; devs[i].vendor_name != NULL; i++) {
- printf("|- bgcolor=\"#%s\"\n| %s || %s || %04x:%04x || {{%s}}\n", (c) ? "eeeeee" : "dddddd",
- devs[i].vendor_name, devs[i].device_name, devs[i].vendor_id, devs[i].device_id,
- (devs[i].status == NT) ? "?3" : "OK");
+ printf("|- bgcolor=\"#%s\"\n", (c) ? "eeeeee" : "dddddd");
+ if (i == 0)
+ printf("| rowspan=\"%u\" | %s |", count, prog.name);
+ printf("| %s || %s || %04x:%04x || {{%s}}\n", devs[i].vendor_name, devs[i].device_name,
+ devs[i].vendor_id, devs[i].device_id, (devs[i].status == NT) ? "?3" : "OK");
}
}
@@ -333,18 +338,22 @@ static int count_supported_usbdevs_wiki(const struct usbdev_status *devs)
return count;
}
-static void print_supported_usbdevs_wiki_helper(const struct usbdev_status *devs)
+static void print_supported_usbdevs_wiki_helper(const struct programmer_entry prog)
{
int i = 0;
static int c = 0;
+ const struct usbdev_status *devs = prog.devices.usb;
+ const unsigned int count = count_supported_usbdevs_wiki(devs);
/* Alternate colors if the vendor changes. */
c = !c;
for (i = 0; devs[i].vendor_name != NULL; i++) {
- printf("|- bgcolor=\"#%s\"\n| %s || %s || %04x:%04x || {{%s}}\n", (c) ? "eeeeee" : "dddddd",
- devs[i].vendor_name, devs[i].device_name, devs[i].vendor_id, devs[i].device_id,
- (devs[i].status == NT) ? "?3" : "OK");
+ printf("|- bgcolor=\"#%s\"\n", (c) ? "eeeeee" : "dddddd");
+ if (i == 0)
+ printf("| rowspan=\"%u\" | %s |", count, prog.name);
+ printf("| %s || %s || %04x:%04x || {{%s}}\n", devs[i].vendor_name, devs[i].device_name,
+ devs[i].vendor_id, devs[i].device_id, devs[i].status == NT ? "?3" : "OK");
}
}
@@ -376,7 +385,7 @@ static void print_supported_devs_wiki()
for (i = 0; i < PROGRAMMER_INVALID; i++) {
const struct programmer_entry prog = programmer_table[i];
if (prog.type == PCI) {
- print_supported_pcidevs_wiki_helper(prog.devices.pci);
+ print_supported_pcidevs_wiki_helper(prog);
}
}
printf("\n|}\n\n|}\n");
@@ -388,7 +397,7 @@ static void print_supported_devs_wiki()
for (i = 0; i < PROGRAMMER_INVALID; i++) {
const struct programmer_entry prog = programmer_table[i];
if (prog.type == USB) {
- print_supported_usbdevs_wiki_helper(prog.devices.usb);
+ print_supported_usbdevs_wiki_helper(prog);
}
}
printf("\n|}\n\n|}\n");
--
Kind regards, Stefan Tauner
1
0