Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) Dell Remote BIOS Update driver (dell_rbu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) Purpose
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) Document demonstrating the use of the Dell Remote BIOS Update driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) for updating BIOS images on Dell servers and desktops.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) Scope
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) This document discusses the functionality of the rbu driver only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) It does not cover the support needed from applications to enable the BIOS to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) update itself with the image downloaded in to the memory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) Overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) This driver works with Dell OpenManage or Dell Update Packages for updating
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) the BIOS on Dell servers (starting from servers sold since 1999), desktops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) and notebooks (starting from those sold in 2005).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) Please go to  http://support.dell.com register and you can find info on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) OpenManage and Dell Update packages (DUP).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) Libsmbios can also be used to update BIOS on Dell systems go to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) https://linux.dell.com/libsmbios/ for details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) Dell_RBU driver supports BIOS update using the monolithic image and packetized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) image methods. In case of monolithic the driver allocates a contiguous chunk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) of physical pages having the BIOS image. In case of packetized the app
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) using the driver breaks the image in to packets of fixed sizes and the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) would place each packet in contiguous physical memory. The driver also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) maintains a link list of packets for reading them back.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) If the dell_rbu driver is unloaded all the allocated memory is freed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) The rbu driver needs to have an application (as mentioned above) which will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) inform the BIOS to enable the update in the next system reboot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) The user should not unload the rbu driver after downloading the BIOS image
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) or updating.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) The driver load creates the following directories under the /sys file system::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	/sys/class/firmware/dell_rbu/loading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	/sys/class/firmware/dell_rbu/data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	/sys/devices/platform/dell_rbu/image_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	/sys/devices/platform/dell_rbu/data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	/sys/devices/platform/dell_rbu/packet_size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) The driver supports two types of update mechanism; monolithic and packetized.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) These update mechanism depends upon the BIOS currently running on the system.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) Most of the Dell systems support a monolithic update where the BIOS image is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) copied to a single contiguous block of physical memory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) In case of packet mechanism the single memory can be broken in smaller chunks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) of contiguous memory and the BIOS image is scattered in these packets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) By default the driver uses monolithic memory for the update type. This can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) changed to packets during the driver load time by specifying the load
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) parameter image_type=packet.  This can also be changed later as below::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	echo packet > /sys/devices/platform/dell_rbu/image_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) In packet update mode the packet size has to be given before any packets can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) be downloaded. It is done as below::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	echo XXXX > /sys/devices/platform/dell_rbu/packet_size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) In the packet update mechanism, the user needs to create a new file having
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) packets of data arranged back to back. It can be done as follows:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) The user creates packets header, gets the chunk of the BIOS image and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) places it next to the packetheader; now, the packetheader + BIOS image chunk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) added together should match the specified packet_size. This makes one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) packet, the user needs to create more such packets out of the entire BIOS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) image file and then arrange all these packets back to back in to one single
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) This file is then copied to /sys/class/firmware/dell_rbu/data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) Once this file gets to the driver, the driver extracts packet_size data from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) the file and spreads it across the physical memory in contiguous packet_sized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) This method makes sure that all the packets get to the driver in a single operation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) In monolithic update the user simply get the BIOS image (.hdr file) and copies
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) to the data file as is without any change to the BIOS image itself.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) Do the steps below to download the BIOS image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 1) echo 1 > /sys/class/firmware/dell_rbu/loading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 2) cp bios_image.hdr /sys/class/firmware/dell_rbu/data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 3) echo 0 > /sys/class/firmware/dell_rbu/loading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) The /sys/class/firmware/dell_rbu/ entries will remain till the following is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) done.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	echo -1 > /sys/class/firmware/dell_rbu/loading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) Until this step is completed the driver cannot be unloaded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) Also echoing either mono, packet or init in to image_type will free up the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) memory allocated by the driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) If a user by accident executes steps 1 and 3 above without executing step 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) it will make the /sys/class/firmware/dell_rbu/ entries disappear.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) The entries can be recreated by doing the following::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	echo init > /sys/devices/platform/dell_rbu/image_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) .. note:: echoing init in image_type does not change its original value.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) read back the image downloaded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) .. note::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)    After updating the BIOS image a user mode application needs to execute
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)    code which sends the BIOS update request to the BIOS. So on the next reboot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)    the BIOS knows about the new image downloaded and it updates itself.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)    Also don't unload the rbu driver if the image has to be updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)