Which firmware is contained in Librem products?

Recetly there have been a couple of discuusions again on the security of chips, their firmware and open hardware alternatives.

As many people (me included) have limited knowledge about low level subjects I ask for information about firmware. This should serve two purposes: a) transparency and b) transfer of knowledge.

I don’t know how much information can be contributet by purism and by the community and which information is availible at all. What I imagine is a table with the columns

  1. “Librem product”
  2. Chip model
  3. firmware/microcode/blobs
  4. purpose
  5. Information about freeness, openness, licence, blob / nonblob, proprietarity

I can only guess that chips can include multiple different codes.

As I am writing from mobile I don’t know whether the forum has tables. Maybe this is something for the wiki (at least in long term).

What is your opinion and can you contribute?

1 Like

Some related info concerning the Librem 5 phone: Comparing specs of upcoming Linux phones

Concerning blobs in it: Comparing specs of upcoming Linux phones (comment)

Concerning laptops, see https://puri.sm/faq/, “What mystery code, or binary blobs remain with Purism laptops? Is there any concern with them?”.

The first step is to ask people to run lshw and dmidecode on different Librem products, so you know what are the components in each model. It would also be helpful if people would take photos of their motherboards, or write down the labels of the chips on the board.

You have to find out which SSD models Purism has used. Then look up who makes the controller for each SSD model. The Atheros ath9k WiFi/BT doesn’t have firmware, so you don’t have to worry about that one.

We know that there is proprietary firmware in the Intel Core CPU/GPU, SSD and embedded controller. There is probably an LCD controller as well that has firmware. Once you have a list of the chips in a Librem model, then you can look up those parts to find out if they have firmware.

So does anyone want to help by posting the output of lshw and dmidecode on your machine and making a list of the chips on the motherboard?

Librem 15v3 (Qubes OS):

bash: lshw: command not found

# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
8 structures occupying 414 bytes.
Table at 0x7AA9D020.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
	Vendor: coreboot
	Version: 4.7-Purism-4
	Release Date: 03/20/2018
	ROM Size: 16 MB
		PCI is supported
		PC Card (PCMCIA) is supported
		BIOS is upgradeable
		Selectable boot is supported
		ACPI is supported
		Targeted content distribution is supported
	BIOS Revision: 4.0
	Firmware Revision: 0.0

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: Purism
	Product Name: Librem 15 v3
	Version: 3.0
	Serial Number: XXXXXX
	UUID: Not Settable
	Wake-up Type: Reserved
	SKU Number: Not Specified
	Family: Librem 15

Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
	Manufacturer: Purism
	Product Name: Librem 15 v3
	Version: 3.0
	Serial Number: XXXXXX

Handle 0x0003, DMI type 3, 22 bytes
Chassis Information
	Manufacturer: Purism
	Type: Laptop
	Lock: Not Present
	Version: Not Specified
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Boot-up State: Safe
	Power Supply State: Safe
	Thermal State: Safe
	Security Status: None
	OEM Information: 0x00000000
	Height: Unspecified
	Number Of Power Cords: Unspecified
	Contained Elements: 0
	SKU Number: Not Specified

Handle 0x0004, DMI type 4, 42 bytes
Processor Information
	Socket Designation: Not Specified
	Type: Central Processor
	Family: Pentium Pro
	Manufacturer: GenuineIntel
	ID: E3 06 04 00 FF FB EB BF
	Signature: Type 0, Family 6, Model 78, Stepping 3
		FPU (Floating-point unit on-chip)
		VME (Virtual mode extension)
		DE (Debugging extension)
		PSE (Page size extension)
		TSC (Time stamp counter)
		MSR (Model specific registers)
		PAE (Physical address extension)
		MCE (Machine check exception)
		CX8 (CMPXCHG8 instruction supported)
		APIC (On-chip APIC hardware supported)
		SEP (Fast system call)
		MTRR (Memory type range registers)
		PGE (Page global enable)
		MCA (Machine check architecture)
		CMOV (Conditional move instruction supported)
		PAT (Page attribute table)
		PSE-36 (36-bit page size extension)
		CLFSH (CLFLUSH instruction supported)
		DS (Debug store)
		ACPI (ACPI supported)
		MMX (MMX technology supported)
		FXSR (FXSAVE and FXSTOR instructions supported)
		SSE (Streaming SIMD extensions)
		SSE2 (Streaming SIMD extensions 2)
		SS (Self-snoop)
		HTT (Multi-threading)
		TM (Thermal monitor supported)
		PBE (Pending break enabled)
	Version: Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
	Voltage: Unknown
	External Clock: Unknown
	Max Speed: Unknown
	Current Speed: Unknown
	Status: Unpopulated
	Upgrade: Other
	L1 Cache Handle: Not Provided
	L2 Cache Handle: Not Provided
	L3 Cache Handle: Not Provided
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Core Count: 16
	Characteristics: None

Handle 0x0005, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x0000
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 0 kB
	Form Factor: Unknown
	Set: None
	Locator: Channel-0-DIMM-0
	Bank Locator: BANK 0
	Type: <OUT OF SPEC>
	Type Detail: Synchronous
	Speed: Unknown
	Manufacturer: Unknown (0)
	Serial Number: None
	Asset Tag: Not Specified
	Part Number: M471A4G43MB1-CTD  
	Rank: Unknown
	Configured Clock Speed: Unknown
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

Handle 0x0006, DMI type 32, 11 bytes
System Boot Information
	Status: No errors detected

Handle 0x0007, DMI type 127, 4 bytes
End Of Table
1 Like

If you install lshw:
sudo apt install lshw

Then you should be able to run:
sudo lshw

Thanks. Actually, first, as I mentioned, I am using Qubes OS, so this command won’t work (another one is needed instead: “qubes-dom0-update lshw”). Second, I am not sure I am ready to install something non-default in dom0 for security reasons (one should install there as few things as possible).