mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-11-04 08:34:47 +10:00 
			
		
		
		
	Fixes generated by 'codespell' and manually reviewed. Signed-off-by: Lucas De Marchi <lucas.demarchi@profusion.mobi>
		
			
				
	
	
		
			101 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Purpose:
 | 
						|
Demonstrate the usage of the new open sourced rbu (Remote BIOS Update) driver
 | 
						|
for updating BIOS images on Dell servers and desktops.
 | 
						|
 | 
						|
Scope:
 | 
						|
This document discusses the functionality of the rbu driver only.
 | 
						|
It does not cover the support needed from applications to enable the BIOS to
 | 
						|
update itself with the image downloaded in to the memory.
 | 
						|
 | 
						|
Overview:
 | 
						|
This driver works with Dell OpenManage or Dell Update Packages for updating
 | 
						|
the BIOS on Dell servers (starting from servers sold since 1999), desktops
 | 
						|
and notebooks (starting from those sold in 2005).
 | 
						|
Please go to  http://support.dell.com register and you can find info on
 | 
						|
OpenManage and Dell Update packages (DUP).
 | 
						|
Libsmbios can also be used to update BIOS on Dell systems go to
 | 
						|
http://linux.dell.com/libsmbios/ for details.
 | 
						|
 | 
						|
Dell_RBU driver supports BIOS update using the monolithic image and packetized
 | 
						|
image methods. In case of monolithic the driver allocates a contiguous chunk
 | 
						|
of physical pages having the BIOS image. In case of packetized the app
 | 
						|
using the driver breaks the image in to packets of fixed sizes and the driver
 | 
						|
would place each packet in contiguous physical memory. The driver also
 | 
						|
maintains a link list of packets for reading them back.
 | 
						|
If the dell_rbu driver is unloaded all the allocated memory is freed.
 | 
						|
 | 
						|
The rbu driver needs to have an application (as mentioned above)which will
 | 
						|
inform the BIOS to enable the update in the next system reboot.
 | 
						|
 | 
						|
The user should not unload the rbu driver after downloading the BIOS image
 | 
						|
or updating.
 | 
						|
 | 
						|
The driver load creates the following directories under the /sys file system.
 | 
						|
/sys/class/firmware/dell_rbu/loading
 | 
						|
/sys/class/firmware/dell_rbu/data
 | 
						|
/sys/devices/platform/dell_rbu/image_type
 | 
						|
/sys/devices/platform/dell_rbu/data
 | 
						|
/sys/devices/platform/dell_rbu/packet_size
 | 
						|
 | 
						|
The driver supports two types of update mechanism; monolithic and packetized.
 | 
						|
These update mechanism depends upon the BIOS currently running on the system.
 | 
						|
Most of the Dell systems support a monolithic update where the BIOS image is
 | 
						|
copied to a single contiguous block of physical memory.
 | 
						|
In case of packet mechanism the single memory can be broken in smaller chunks
 | 
						|
of contiguous memory and the BIOS image is scattered in these packets.
 | 
						|
 | 
						|
By default the driver uses monolithic memory for the update type. This can be
 | 
						|
changed to packets during the driver load time by specifying the load
 | 
						|
parameter image_type=packet.  This can also be changed later as below
 | 
						|
echo packet > /sys/devices/platform/dell_rbu/image_type
 | 
						|
 | 
						|
In packet update mode the packet size has to be given before any packets can
 | 
						|
be downloaded. It is done as below
 | 
						|
echo XXXX > /sys/devices/platform/dell_rbu/packet_size
 | 
						|
In the packet update mechanism, the user needs to create a new file having
 | 
						|
packets of data arranged back to back. It can be done as follows
 | 
						|
The user creates packets header, gets the chunk of the BIOS image and
 | 
						|
places it next to the packetheader; now, the packetheader + BIOS image chunk
 | 
						|
added together should match the specified packet_size. This makes one
 | 
						|
packet, the user needs to create more such packets out of the entire BIOS
 | 
						|
image file and then arrange all these packets back to back in to one single
 | 
						|
file.
 | 
						|
This file is then copied to /sys/class/firmware/dell_rbu/data.
 | 
						|
Once this file gets to the driver, the driver extracts packet_size data from
 | 
						|
the file and spreads it across the physical memory in contiguous packet_sized
 | 
						|
space.
 | 
						|
This method makes sure that all the packets get to the driver in a single operation.
 | 
						|
 | 
						|
In monolithic update the user simply get the BIOS image (.hdr file) and copies
 | 
						|
to the data file as is without any change to the BIOS image itself.
 | 
						|
 | 
						|
Do the steps below to download the BIOS image.
 | 
						|
1) echo 1 > /sys/class/firmware/dell_rbu/loading
 | 
						|
2) cp bios_image.hdr /sys/class/firmware/dell_rbu/data
 | 
						|
3) echo 0 > /sys/class/firmware/dell_rbu/loading
 | 
						|
 | 
						|
The /sys/class/firmware/dell_rbu/ entries will remain till the following is
 | 
						|
done.
 | 
						|
echo -1 > /sys/class/firmware/dell_rbu/loading
 | 
						|
Until this step is completed the driver cannot be unloaded.
 | 
						|
Also echoing either mono, packet or init in to image_type will free up the
 | 
						|
memory allocated by the driver.
 | 
						|
 | 
						|
If a user by accident executes steps 1 and 3 above without executing step 2;
 | 
						|
it will make the /sys/class/firmware/dell_rbu/ entries disappear.
 | 
						|
The entries can be recreated by doing the following
 | 
						|
echo init > /sys/devices/platform/dell_rbu/image_type
 | 
						|
NOTE: echoing init in image_type does not change it original value.
 | 
						|
 | 
						|
Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to
 | 
						|
read back the image downloaded.
 | 
						|
 | 
						|
NOTE:
 | 
						|
This driver requires a patch for firmware_class.c which has the modified
 | 
						|
request_firmware_nowait function.
 | 
						|
Also after updating the BIOS image a user mode application needs to execute
 | 
						|
code which sends the BIOS update request to the BIOS. So on the next reboot
 | 
						|
the BIOS knows about the new image downloaded and it updates itself.
 | 
						|
Also don't unload the rbu driver if the image has to be updated.
 | 
						|
 |