Novena/EEPROM

From Studio Kousagi Wiki
Revision as of 03:59, 27 April 2015 by Xobs (talk | contribs) (Version 2 structure)
Jump to: navigation, search

Novena has a utility EEPROM that can be used for storing device-specific data. This is optional, and default values will be used if it is blank / not present.

All multi-byte integers are in native host order.

Version 1 structure

EEPROM structure
Size Default Value Description Result if no EEPROM present
6 'Novena' Unterminated EEPROM signature The EEPROM contents will not be used
1 1 Version number of EEPROM structure The EEPROM contents will not be used
1 0 Reserved No change
4 0 Device serial number No change
6 (Random) Gigabit MAC address Random MAC address is generated on each boot
2 0 Feature bitmask No features are enabled

Version 2 structure

The actual structure is defined in novena-eeprom.h as "struct novena_eeprom_data".

EEPROM structure
Size Default Value Description Result if no EEPROM present
6 'Novena' Unterminated EEPROM signature The EEPROM contents will not be used
1 2 Version number of EEPROM structure The EEPROM contents will not be used
1 32 Length of EEPROM read/write page EEPROMOops may not be able to properly save panics
4 0 Device serial number No change
6 (Random) Gigabit MAC address Random MAC address is generated on each boot
2 0 Feature bitmask No features are enabled

The following fields were intended to allow for custom panels. However, due to the way Linux now defines LCD panels, these fields were never actually used, and are not likely to ever be used. They are kept here for historical reasons.

Deprecated EEPROM structure
Size Default Value Description Result if no EEPROM present
4 0 LVDS channel 1 frequency No display
2 0 LVDS channel 1 display width No display
2 0 LVDS channel 1 display height No display
2 0 LVDS channel 1 horizontal back porch No display
2 0 LVDS channel 1 horizontal front porch No display
2 0 LVDS channel 1 horizontal sync length No display
2 0 LVDS channel 1 vertical back porch No display
2 0 LVDS channel 1 vertical front porch No display
2 0 LVDS channel 1 vertical sync length No display
4 0 LVDS channel 1 flags (see below) No display
4 0 LVDS channel 2 frequency No display
2 0 LVDS channel 2 display width No display
2 0 LVDS channel 2 display height No display
2 0 LVDS channel 2 horizontal back porch No display
2 0 LVDS channel 2 horizontal front porch No display
2 0 LVDS channel 2 horizontal sync length No display
2 0 LVDS channel 2 vertical back porch No display
2 0 LVDS channel 2 vertical front porch No display
2 0 LVDS channel 2 vertical sync length No display
4 0 LVDS channel 2 flags (see below) No display
4 0 HDMI default frequency No display
2 0 HDMI default display width No display
2 0 HDMI default display height No display
2 0 HDMI default horizontal back porch No display
2 0 HDMI default horizontal front porch No display
2 0 HDMI default horizontal sync length No display
2 0 HDMI default vertical back porch No display
2 0 HDMI default vertical front porch No display
2 0 HDMI default vertical sync length No display
4 0 HDMI default flags (see below) No display
4 4096 EEPROM capacity (in bytes) No change
4 4096 EEPROMoops offset (in bytes) EEPROMoops support will be disabled
4 61440 EEPROMoops length (in bytes) EEPROMoops support will be disabled

Feature bitmask

There is a bitmask field that defines various board features. In this way, a single image can be shipped that supports various components. For example, a router might not have a display, but a laptop would need to have its LCD turned on. A bit is "1" if the feature is present (and needs to be enabled), and "0" if it is not present. Note that some values are mutually-exclusive (e.g. you can only have one kind of LVDS display attached).

Feature list
Bit position Mask Feature
0 0x0001 ES8328 Audio Codec
1 0x0002 Senono-based battery board
2 0x0004 Retina LVDS display (in version 2, indicates there is an IT6251)
3 0x0008 (Reserved: Other LVDS display)
4 0x0010 mPCIe port
5 0x0020 Gigabit Ethernet
6 0x0040 HDMI Output (flag ignored in version 2)
7 0x0080 EEPROM Oops support
8 0x0100 Root is on SATA (if 0, root is on internal MMC)
9 0x0200 Laptop is an "Heirloom" model
10 0x0400 Don't boot if lid is closed

LVDS/HDMI flags bitmask

Feature list
Bit position Mask Feature
0 0x0001 Channel is present
1 0x0002 If 1, use both LVDS channels together
2 0x0004 Polarity of vsync signal
3 0x0008 Polarity of hsync signal
4 0x0010 1 if LVDS is JEIDA mapping, 0 if it's PSWG/SWPG
5 0x0020 1 if data is 8-bit (24 bpp), 0 if it's 6-bit (18 bpp)
6 0x0040 Auto-detect settings, rather than taking them from the EEPROM