^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)