Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Nov 2024 14:32:56 GMT
From:      Andriy Gapon <avg@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 71a3e9d15a4e - main - sysutils/i2c-tools: update to 4.3
Message-ID:  <202411151432.4AFEWuiG044047@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by avg:

URL: https://cgit.FreeBSD.org/ports/commit/?id=71a3e9d15a4e6d4ae02eb147fbbafc51ddf4d108

commit 71a3e9d15a4e6d4ae02eb147fbbafc51ddf4d108
Author:     Andriy Gapon <avg@FreeBSD.org>
AuthorDate: 2024-11-15 14:29:02 +0000
Commit:     Andriy Gapon <avg@FreeBSD.org>
CommitDate: 2024-11-15 14:32:14 +0000

    sysutils/i2c-tools: update to 4.3
    
    This also reworks the FreeBSD support patch to be less entrusive
    and to support page switching for DDR4's larger SPD EEPROM.
    
    PR:             282754
    Approved by:    fuz
---
 sysutils/i2c-tools/Makefile                        |   4 +-
 sysutils/i2c-tools/distinfo                        |   6 +-
 sysutils/i2c-tools/files/patch-eeprom_decode-dimms | 204 +++++++--------------
 3 files changed, 73 insertions(+), 141 deletions(-)

diff --git a/sysutils/i2c-tools/Makefile b/sysutils/i2c-tools/Makefile
index f79d689fadfe..56e690c986a6 100644
--- a/sysutils/i2c-tools/Makefile
+++ b/sysutils/i2c-tools/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	i2c-tools
-PORTVERSION=	4.1
-PORTREVISION=	1
+DISTVERSION=	4.3
+#PORTREVISION=	1
 CATEGORIES=	sysutils
 MASTER_SITES=	https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
 
diff --git a/sysutils/i2c-tools/distinfo b/sysutils/i2c-tools/distinfo
index 3ff83bf3265a..06619de2b221 100644
--- a/sysutils/i2c-tools/distinfo
+++ b/sysutils/i2c-tools/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1543829767
-SHA256 (i2c-tools-4.1.tar.xz) = 57b219efd183795bd545dd5a60d9eabbe9dcb6f8fb92bc7ba2122b87f98527d5
-SIZE (i2c-tools-4.1.tar.xz) = 83576
+TIMESTAMP = 1731517192
+SHA256 (i2c-tools-4.3.tar.xz) = 1f899e43603184fac32f34d72498fc737952dbc9c97a8dd9467fadfdf4600cf9
+SIZE (i2c-tools-4.3.tar.xz) = 81276
diff --git a/sysutils/i2c-tools/files/patch-eeprom_decode-dimms b/sysutils/i2c-tools/files/patch-eeprom_decode-dimms
index 7c95569ea628..0d4eaaa06df1 100644
--- a/sysutils/i2c-tools/files/patch-eeprom_decode-dimms
+++ b/sysutils/i2c-tools/files/patch-eeprom_decode-dimms
@@ -1,37 +1,29 @@
---- eeprom/decode-dimms.orig	2014-06-19 15:50:29.000000000 -0400
-+++ eeprom/decode-dimms	2014-06-19 16:18:34.000000000 -0400
-@@ -42,7 +42,7 @@
- use Fcntl qw(:DEFAULT :seek);
+--- eeprom/decode-dimms.orig	2024-11-13 19:00:52.000000000 +0200
++++ eeprom/decode-dimms	2024-11-13 19:37:51.930060000 +0200
+@@ -46,7 +46,8 @@
  use File::Basename;
  use vars qw($opt_html $opt_bodyonly $opt_side_by_side $opt_merge
--	    $opt_igncheck $use_sysfs $use_hexdump $sbs_col_width
-+	    $opt_igncheck $opt_smbdev $use_smbdev $use_hexdump $sbs_col_width
- 	    @vendors %decode_callback $revision @dimm $current %hexdump_cache);
+ 	    $opt_igncheck $use_sysfs $use_hexdump $sbs_col_width
+-	    @vendors %decode_callback @dimm $current %hexdump_cache);
++	    @vendors %decode_callback @dimm $current %hexdump_cache
++	    $opt_smbdev $use_smbdev);
  
  use constant LITTLEENDIAN	=> "little-endian";
-@@ -305,7 +305,7 @@
-  "Silicon Space Technology"]
- );
+ use constant BIGENDIAN		=> "big-endian";
+@@ -498,6 +499,7 @@
+ }
  
--$use_sysfs = -d '/sys/bus';
+ $use_sysfs = -d '/sys/bus';
 +$use_smbdev = '/dev/smb0';
  
  # We consider that no data was written to this area of the SPD EEPROM if
  # all bytes read 0x00 or all bytes read 0xff
-@@ -1079,6 +1079,9 @@
- 	printl("Module Configuration Type",
- 	       sdram_module_configuration_type($bytes->[11]));
- 
-+	printl("Module Configuration Type",
-+	       sdram_module_configuration_type($bytes->[11]));
-+
- 	printl("Refresh Rate", ddr2_refresh_rate($bytes->[12]));
+@@ -2435,8 +2437,38 @@
  
- 	my @burst;
-@@ -1624,6 +1628,28 @@
+ 		return ($size, ($bytes->[0] < 64) ? 64 : $bytes->[0]);
  	}
- }
- 
++}
++
 +sub freebsd_readbyte ($$) {
 +	my ($offset, $dimm_i) = @_;
 +
@@ -41,8 +33,8 @@
 +	chomp($output);
 +	my $byte = hex($output);
 +	return $byte;
-+}
-+
+ }
+ 
 +sub freebsd_readword ($$) {
 +	my ($offset, $dimm_i) = @_;
 +
@@ -53,41 +45,35 @@
 +	my $word = hex($output);
 +	return $word;
 +}
++
++sub freebsd_spa_n($) {
++	my $page = shift;
++
++	my $command = sprintf('/usr/sbin/smbmsg -f %s -s %#02x -o 0 >/dev/null 2>&1',
++			      $use_smbdev, 0x6c + 2 * $page);
++	`$command`;
++}
 +
  # Read bytes from SPD-EEPROM
  # Note: offset must be a multiple of 16!
  sub readspd($$$)
-@@ -1633,22 +1659,14 @@
- 	if ($use_hexdump) {
- 		@bytes = read_hexdump($dimm_i);
+@@ -2450,6 +2482,15 @@
+ 			$size = @bytes - $offset;
+ 		}
  		return @bytes[$offset..($offset + $size - 1)];
--	} elsif ($use_sysfs) {
--		# Kernel 2.6 with sysfs
--		sysopen(HANDLE, "$dimm_i/eeprom", O_RDONLY)
--			or die "Cannot open $dimm_i/eeprom";
--		binmode HANDLE;
--		sysseek(HANDLE, $offset, SEEK_SET)
--			or die "Cannot seek $dimm_i/eeprom";
--		sysread(HANDLE, my $eeprom, $size)
--			or die "Cannot read $dimm_i/eeprom";
--		close HANDLE;
--		@bytes = unpack("C*", $eeprom);
- 	} else {
--		# Kernel 2.4 with procfs
--		for my $i (0 .. ($size-1)/16) {
--			my $hexoff = sprintf('%02x', $offset + $i * 16);
--			push @bytes, split(" ", `cat $dimm_i/$hexoff`);
-+#		for my $i (0 .. ($size - 1)) {
-+#			push (@bytes, freebsd_readbyte($offset + $i, $dimm_i));
-+#		}
++	} elsif ($use_smbdev) {
 +		for my $i (0 .. (($size - 1) / 2)) {
-+			my $word = freebsd_readword($offset + 2 * $i, $dimm_i);
++			my $off = $offset + 2 * $i;
++
++			freebsd_spa_n($off / 256);
++			my $word = freebsd_readword($off % 256, $dimm_i);
 +			push (@bytes, $word & 0xff);
 +			push (@bytes, $word >> 8);
- 		}
- 	}
- 	return @bytes;
-@@ -1702,7 +1720,7 @@
++ 		}
+ 	} elsif ($use_sysfs) {
+ 		# Kernel 2.6 with sysfs
+ 		sysopen(HANDLE, "$dimm_i/eeprom", O_RDONLY)
+@@ -2529,7 +2570,7 @@
  # Parse command-line
  foreach (@ARGV) {
  	if ($_ eq '-h' || $_ eq '--help') {
@@ -96,15 +82,15 @@
  			"       $0 -h\n\n",
  			"  -f, --format            Print nice html output\n",
  			"  -b, --bodyonly          Don't print html header\n",
-@@ -1711,6 +1729,7 @@
- 			"      --merge-cells       Merge neighbour cells with identical values\n",
+@@ -2540,6 +2581,7 @@
+ 			"      --no-merge-cells    Don't merge neighbour cells with identical values\n",
  			"                          (side-by-side output only)\n",
  			"  -c, --checksum          Decode completely even if checksum fails\n",
 +			"  -d,                     Read data from the device\n",
  			"  -x,                     Read data from hexdump files\n",
  			"  -X,                     Same as -x except treat multibyte hex\n",
  			"                          data as little endian\n",
-@@ -1746,6 +1765,10 @@
+@@ -2579,6 +2621,10 @@
  		$opt_igncheck = 1;
  		next;
  	}
@@ -115,7 +101,7 @@
  	if ($_ eq '-x') {
  		$use_hexdump = BIGENDIAN;
  		next;
-@@ -1760,7 +1783,11 @@
+@@ -2593,7 +2639,11 @@
  		exit;
  	}
  
@@ -127,85 +113,31 @@
 +	}
  }
  
- if ($opt_html && !$opt_bodyonly) {
-@@ -1777,65 +1804,20 @@
- Jean Delvare, Trent Piepho and others');
- 
- 
--# From a sysfs device path and an attribute name, return the attribute
--# value, or undef (stolen from sensors-detect)
--sub sysfs_device_attribute
--{
--	my ($device, $attr) = @_;
--	my $value;
--
--	open(local *FILE, "$device/$attr") or return "";
--	$value = <FILE>;
--	close(FILE);
--	return unless defined $value;
--
--	chomp($value);
--	return $value;
--}
--
- sub get_dimm_list
- {
--	my (@dirs, $dir, $opened, $file, @files);
--
--	if ($use_sysfs) {
--		@dirs = ('/sys/bus/i2c/drivers/eeprom',
--			 '/sys/bus/i2c/drivers/at24',
--			 '/sys/bus/i2c/drivers/ee1004');	# DDR4
--	} else {
--		@dirs = ('/proc/sys/dev/sensors');
--	}
--
--	foreach $dir (@dirs) {
--		next unless opendir(local *DIR, $dir);
--		$opened++;
--		while (defined($file = readdir(DIR))) {
--			if ($use_sysfs) {
--				# We look for I2C devices like 0-0050 or 2-0051
--				next unless $file =~ /^\d+-[\da-f]+$/i;
--				next unless -d "$dir/$file";
--
--				# Device name must be eeprom (driver eeprom)
--				# or spd (driver at24)
--				my $attr = sysfs_device_attribute("$dir/$file", "name");
--				next unless defined $attr &&
--					    ($attr eq "eeprom" ||
--					     $attr eq "spd" ||
--					     $attr eq "ee1004");	# DDR4
--			} else {
--				next unless $file =~ /^eeprom-/;
--			}
--			push @files, { eeprom => "$file",
--				       file => "$dir/$file" };
--		}
--		close(DIR);
--	}
--
--	if (!$opened) {
--		print STDERR "No EEPROM found, try loading the eeprom or at24 module\n";
--		exit;
-+	my @dimms;
-+	if (! -c $use_smbdev) {
-+        	print "SMBus device not found\n";
-+	        exit;
-+	}
-+	for my $spd (0xA0 .. 0xAE) {
-+		next if ($spd % 2 != 0);
-+		my @test_bytes = readspd(0, 4, $spd);
-+		next unless spd_written(@test_bytes);
-+		push @dimms, { eeprom => sprintf('0x%02X', $spd), file => $spd };
- 	}
--
--	return sort { $a->{file} cmp $b->{file} } @files;
-+	return @dimms;
- }
- 
- # @dimm is a list of hashes. There's one hash for each EEPROM we found.
-@@ -2022,7 +2008,7 @@
+ # Default values
+@@ -2623,6 +2673,22 @@
+ 		@drivers = ('eeprom',
+ 			    'at24',
+ 			    'ee1004');	# DDR4
++	} elsif ($use_smbdev) {
++		my @dimms;
++
++		if (! -c $use_smbdev) {
++			print STDERR "SMBus device not found\n";
++			exit;
++		}
++		for my $spd (0xA0 .. 0xAE) {
++			next if ($spd % 2 != 0);
++			my @test_bytes = readspd(0, 4, $spd);
++			next unless spd_written(@test_bytes);
++			push @dimms, { eeprom => sprintf('0x%02X', $spd),
++				       file => $spd,
++				       driver => "smbus" };
++		}
++		return @dimms;
+ 	} else {
+ 		@drivers = ('eeprom');
+ 		$dir = '/proc/sys/dev/sensors';
+@@ -2910,7 +2976,7 @@
  	if ($opt_side_by_side) {
  		print "\n\n";
  	} else {
@@ -213,4 +145,4 @@
 +		printl2("\n\nDecoding EEPROM", $dimm[$current]->{eeprom},
  			"text-decoration: underline; font-weight: bold;");
  	}
- 	print "<table border=1>\n" if $opt_html;
+ 	print "<table border=\"1\">\n" if $opt_html;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202411151432.4AFEWuiG044047>