RFC - EEPROM device class

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I want to float the idea of having an EEPROM 'class' in
sysfs, similar to what the hwmon devices do.  I have prototyped the
class using the at24 driver and would like to reach out for more
feedback.

The Problem:  We work on several different switching platforms, each
of which has about 64 EEPROMs, one for each of the 10G SFP+ modules.
In addition the systems typically have a board info EEPROM, SPD and
power supply EEPROMs.  It is difficult to map the device tree entries
for the EEPROMs to the appropriate sysfs device needed for I/O in a
generic way.

Also mappings are further complicated by some systems using custom
i2c buses implemented in FPGAs.

The idea is two fold:

1. Create an EEPROM class for all EEPROM devices.  Each EEPROM driver,
at24 for example, would register with the class during probe().

2. Create a mapping in the .dts file by adding a property called
'label' to each EEPROM entry.  The EEPROM class will expose this label
property for all EEPROMs.

For example, for all the EEPROM devices in the system you would see
directories in sysfs like:

  /sys/class/eeprom_dev/eeprom0
  /sys/class/eeprom_dev/eeprom1
  /sys/class/eeprom_dev/eeprom2
  ...
  /sys/class/eeprom_dev/eeprom<N>

Within each eepromN directory you would find:

  root@switch:/sys/class/eeprom_dev# ls -l eeprom2/
  total 0
  lrwxrwxrwx 1 root root    0 Sep  3 22:08 device -> ../../../1-0050
  -r--r--r-- 1 root root 4096 Sep  3 22:08 label
  lrwxrwxrwx 1 root root    0 Sep  4 17:18 subsystem ->
  ../../../../../../../class/eeprom_dev

device -- this is a symlink to the physical device.  For example to
dump the EEPROM data of eeprom2 you could do:

  hexdump -C /sys/class/eeprom_dev/eeprom2/device/eeprom

As an example the device tree entry corresponding to eeprom2 could
look like:

	sfp_eeprom@50 {
		compatible = "at,24c04";
		reg = <0x50>;
		label = "port6";
	};

Imagine 64 similar entries for all the other ports.  Plus a few more
entries for board EEPROM and power supply EEPROMs.

>From user space if I wanted to know the device corresponding to port6
I could do something as simple as:

root@switch:~# grep port6 /sys/class/eeprom_dev/eeprom*/label
/sys/class/eeprom_dev/eeprom2/label:port6

Then I could access the information via
/sys/class/eeprom_dev/eeprom2/device/eeprom.

It is nice that it keeps the mapping all in one place, in the .dts
file.  It is not spread around in the device tree and some other
platform specific configuration file.

Note: For devices without a 'label' property the label file is still
created, however, its contents would be set to 'unknown'.

Note2: The class cannot be called 'eeprom' as that is the name of the
I/O file created by the driver.  The class name appears as a
sub-directory within the main device directory.  Hence the class name
'eeprom_dev'.  The class name is open to discussion.  You could also
imagine eeprom_device and eeprom-dev as other choices.

Thoughts, comments and feedback appreciated.

Cheers,
Curt
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux