From 20dc8e2c0e04b06db2cc6a3b9072917bff11bee5 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sat, 6 Apr 2024 21:43:05 +0000 Subject: [PATCH 1/8] Update version info for 1.1.x Signed-off-by: Nico Huber --- versioninfo.inc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 versioninfo.inc diff --git a/versioninfo.inc b/versioninfo.inc new file mode 100644 index 00000000..32516c01 --- /dev/null +++ b/versioninfo.inc @@ -0,0 +1,2 @@ +VERSION = 1.1.x +MAN_DATE = 2024-03-27 From 048e40d5d8552a84e4ec2475843f1112650f16f5 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sun, 21 Apr 2024 13:25:17 +0200 Subject: [PATCH 2/8] platform/meson: Check for libi386 on NetBSD The 32-bit library is called libi386, not libx86. Fixes building with Meson on i386 NetBSD. Change-Id: Ib9e1aa16558dc24f0bf14dd573934cf5164d67e8 Signed-off-by: Nico Huber Original-Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/129 Original-Reviewed-by: Arthur Heymans Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/146 --- platform/meson.build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/meson.build b/platform/meson.build index fcd32f80..e4dc7c57 100644 --- a/platform/meson.build +++ b/platform/meson.build @@ -21,11 +21,11 @@ if host_machine.system() == 'openbsd' endif endif -# NetBSD requires libx86 or libx86_64 for I/O port handling +# NetBSD requires libi386 or libx86_64 for I/O port handling if host_machine.system() == 'netbsd' if host_machine.cpu_family() == 'x86' - libx86 = cc.find_library('x86') - deps += libx86 + libi386 = cc.find_library('i386') + deps += libi386 elif host_machine.cpu_family() == 'x86_64' libx86_64 = cc.find_library('x86_64') deps += libx86_64 From 60b9b2ef66c60c1c137f4d3f08070b47456d0448 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sun, 21 Apr 2024 15:39:45 +0200 Subject: [PATCH 3/8] platform/meson: Port pciutils/pci.h workaround to Meson Change-Id: Idc6f442361ea3860d7ad3932ad1b72c6ff56ba45 Signed-off-by: Nico Huber Original-Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/130 Original-Reviewed-by: Arthur Heymans Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/147 --- platform/meson.build | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/meson.build b/platform/meson.build index e4dc7c57..cd8810d5 100644 --- a/platform/meson.build +++ b/platform/meson.build @@ -1,3 +1,5 @@ +fs = import('fs') + srcs += files( ('endian_' + host_machine.endian() + '.c'), 'memaccess.c', @@ -21,8 +23,8 @@ if host_machine.system() == 'openbsd' endif endif -# NetBSD requires libi386 or libx86_64 for I/O port handling if host_machine.system() == 'netbsd' + # NetBSD requires libi386 or libx86_64 for I/O port handling if host_machine.cpu_family() == 'x86' libi386 = cc.find_library('i386') deps += libi386 @@ -30,6 +32,10 @@ if host_machine.system() == 'netbsd' libx86_64 = cc.find_library('x86_64') deps += libx86_64 endif + # and special handling for `pci.h` not being inside `pci/` + if fs.exists('/usr/pkg/include/pciutils/pci.h') + add_project_arguments('-DPCIUTILS_PCI_H', language : 'c') + endif endif From 39bdff02978c57150171b8dc344f9ee8cbff0ae1 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sun, 21 Apr 2024 13:07:17 +0200 Subject: [PATCH 4/8] meson: Check for CPU families with known raw mem access Same as the Makefile does with $(DEPENDS_ON_RAW_MEM_ACCESS), we should tag all the programmers that require raw memory access. Otherwise, we might compile these drivers for architectures that require explicit memory barriers that we haven't implemented. As there seems to be no notion of intersection in Meson, we have to make `cpu_families' a list of lists and check them all. Change-Id: I3bd6bd7b5cb871a506178496241bacdeb40febcf Signed-off-by: Nico Huber Original-Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/131 Original-Reviewed-by: Arthur Heymans Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/148 --- meson.build | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/meson.build b/meson.build index f1905f88..efe10cd3 100644 --- a/meson.build +++ b/meson.build @@ -111,6 +111,7 @@ systems_hwaccess = [ 'linux', 'openbsd', 'freebsd', 'dragonfly', 'netbsd' ] systems_serial = [ 'linux', 'openbsd', 'freebsd', 'dragonfly', 'netbsd', 'darwin' ] cpus_port_io = [ 'x86', 'x86_64' ] +cpus_raw_mem = [ 'x86', 'x86_64', 'mips', 'mips64', 'ppc', 'ppc64', 'arm', 'aarch64', 'sparc', 'sparc64', 'arc', 'e2k' ] group_ftdi = get_option('programmer').contains('group_ftdi') group_pci = get_option('programmer').contains('group_pci') @@ -157,7 +158,7 @@ linux_headers = \ programmer = { 'atahpt' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('atahpt.c', 'pcidev.c'), @@ -166,7 +167,7 @@ programmer = { }, 'atapromise' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io, cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('atapromise.c', 'pcidev.c'), @@ -224,6 +225,7 @@ programmer = { }, 'drkaiser' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('drkaiser.c', 'pcidev.c'), @@ -241,6 +243,7 @@ programmer = { }, 'gfxnvidia' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('gfxnvidia.c', 'pcidev.c'), @@ -248,7 +251,7 @@ programmer = { }, 'internal' : { 'systems' : systems_hwaccess + ['linux'], - 'cpu_families' : (host_machine.system() == 'linux' ? [host_machine.cpu_family()] : ['x86', 'x86_64']), + 'cpu_families' : (host_machine.system() == 'linux' ? [ cpus_raw_mem ] : [ ['x86', 'x86_64'] ]), 'deps' : [ libpci ], 'groups' : [ group_internal ], 'srcs' : (host_machine.cpu_family() in ['x86', 'x86_64'] ? files( @@ -284,6 +287,7 @@ programmer = { }, 'it8212' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('it8212.c', 'pcidev.c'), @@ -328,7 +332,7 @@ programmer = { }, 'nic3com' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nic3com.c', 'pcidev.c'), @@ -336,6 +340,7 @@ programmer = { }, 'nicintel' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nicintel.c', 'pcidev.c'), @@ -343,6 +348,7 @@ programmer = { }, 'nicintel_eeprom' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nicintel_eeprom.c', 'pcidev.c'), @@ -350,6 +356,7 @@ programmer = { }, 'nicintel_spi' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nicintel_spi.c', 'pcidev.c'), @@ -357,7 +364,7 @@ programmer = { }, 'nicnatsemi' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nicnatsemi.c', 'pcidev.c'), @@ -366,7 +373,7 @@ programmer = { }, 'nicrealtek' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('nicrealtek.c', 'pcidev.c'), @@ -374,6 +381,7 @@ programmer = { }, 'ogp_spi' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('ogp_spi.c', 'pcidev.c'), @@ -393,14 +401,14 @@ programmer = { }, 'rayer_spi' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io ], 'groups' : [ group_internal ], 'srcs' : files('rayer_spi.c'), 'flags' : [ '-DCONFIG_RAYER_SPI=1' ], }, 'satamv' : { 'systems' : systems_hwaccess, - 'cpu_families' : cpus_port_io, + 'cpu_families' : [ cpus_port_io, cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('satamv.c', 'pcidev.c'), @@ -408,6 +416,7 @@ programmer = { }, 'satasii' : { 'systems' : systems_hwaccess, + 'cpu_families' : [ cpus_raw_mem ], 'deps' : [ libpci ], 'groups' : [ group_pci, group_internal ], 'srcs' : files('satasii.c', 'pcidev.c'), @@ -453,8 +462,13 @@ foreach p_name, p_data : programmer selected_soft = p_data.get('groups').contains(true) or \ 'all' in get_option('programmer') or \ 'auto' in get_option('programmer') and p_data.get('default') - available = (p_data.get('systems').contains('all') or p_data.get('systems').contains(host_machine.system())) \ - and (p_data.get('cpu_families').contains('all') or p_data.get('cpu_families').contains(host_machine.cpu_family())) + + available = (p_data.get('systems') == ['all'] or p_data.get('systems').contains(host_machine.system())) + if p_data.get('cpu_families') != ['all'] + foreach families_list : p_data.get('cpu_families') + available = available and families_list.contains(host_machine.cpu_family()) + endforeach + endif foreach dep : p_data.get('deps') if not dep.found() From 8e0aa952d44aeadeb78a405bf8d50beb873f7758 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Fri, 26 Apr 2024 21:24:26 +0000 Subject: [PATCH 5/8] Update version info for v1.1-rc1 Signed-off-by: Nico Huber --- versioninfo.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versioninfo.inc b/versioninfo.inc index 32516c01..263c59b2 100644 --- a/versioninfo.inc +++ b/versioninfo.inc @@ -1,2 +1,2 @@ -VERSION = 1.1.x +VERSION = v1.1-rc1 MAN_DATE = 2024-03-27 From 20390c997bf60e5522c35dd041eb19b3c35ac0db Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Fri, 3 May 2024 14:52:41 +0000 Subject: [PATCH 6/8] Update version info for v1.1 Signed-off-by: Nico Huber --- versioninfo.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versioninfo.inc b/versioninfo.inc index 263c59b2..a24fe0b2 100644 --- a/versioninfo.inc +++ b/versioninfo.inc @@ -1,2 +1,2 @@ -VERSION = v1.1-rc1 +VERSION = v1.1 MAN_DATE = 2024-03-27 From a0cac9fa933ce4d4dec36b7ededab8742fdaa709 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Sun, 26 May 2024 16:59:22 +0200 Subject: [PATCH 7/8] ichspi: Allow all opcodes when the "opmenu" isn't locked The opmenu is not authoritative when we can re-program it on the fly. Hence always return true in ich_spi_probe_opcode() when it isn't locked. Tested by `cobra` on IRC. Change-Id: I636f00acbdfa1661c13c2d82d7d7e61fbe6b543b Signed-off-by: Nico Huber Original-Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/151 Original-Reviewed-by: Angel Pons Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/166 --- ichspi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ichspi.c b/ichspi.c index 18f0d3f5..0fc96bab 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1576,7 +1576,7 @@ static int ich_spi_send_multicommand(const struct flashctx *flash, static bool ich_spi_probe_opcode(const struct flashctx *flash, uint8_t opcode) { - return find_opcode(curopcodes, opcode) >= 0; + return !ichspi_lock || find_opcode(curopcodes, opcode) >= 0; } #define ICH_BMWAG(x) ((x >> 24) & 0xff) From 672686cd82da767805a47f5bbf54bd646176b749 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Fri, 12 Jul 2024 23:19:06 +0200 Subject: [PATCH 8/8] Revert "dediprog: Disable SPI_MASTER_NO_4BA_MODES for additional devices" This reverts commit a32d47f14886376e71d84f224c7580f1be1b58e8. The idea was right: In theory, these Dediprogs can support 4BA modes. Due to the lack of test hardware, however, nobody actually implemented it for the newer protocol versions. So make sure once again, that we bail out before trying to write to the flash with wrong command sequences. Change-Id: Ic5cb426f9b8ed8e1df803387a0d1a22909707874 Signed-off-by: Nico Huber Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/167 --- dediprog.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dediprog.c b/dediprog.c index db4e39ff..cffb24c2 100644 --- a/dediprog.c +++ b/dediprog.c @@ -1380,8 +1380,7 @@ static int dediprog_init(struct flashprog_programmer *const prog) if (dediprog_standalone_mode(dp_data)) goto init_err_cleanup_exit; - if ((dp_data->devicetype == DEV_SF100) || - (dp_data->devicetype == DEV_SF600 && protocol(dp_data) == PROTOCOL_V3)) + if (dp_data->devicetype == DEV_SF100 && protocol(dp_data) == PROTOCOL_V1) spi_master_dediprog.features &= ~SPI_MASTER_NO_4BA_MODES; if (protocol(dp_data) >= PROTOCOL_V2)