[phosphor-ipmi-flash]: Question about in-band update of BMC firmware

Brandon Kim brandonkim at google.com
Fri Jul 15 01:58:12 AEST 2022


Hi Chris,

I'm unfortunately not familiar with the BIOS side of things - but I
just know that we worked with the BIOS engineers to "reserve" some
space at an arbitrary location for this MMIO and enable some flag to
mark this as a shared location. To check if it works, I would
encourage you use a mem write to the memory from the BIOS to the
shared region to verify the change can be read back from the BIOS +
BMC. To do this manually, you may also have to look through the
Intel's PCH documentation regarding eSPI or LPC - and set the
registers up using setpci commands (this should be done automatically
by the burn_my_bmc tool).

Looking through our internal codebase, we have not tested with Aspeed
LPC in a very long time so it's also possible that there were some
regression introduced, if you were able to successfully do a manual
write to this shared region.

Thanks,
Brandon

On Thu, Jul 14, 2022 at 4:39 AM Chris Chen (TPI) <Chris.Chen3 at flex.com> wrote:
>
> Hi Brandon and Willy,
>
> The host platform I'm using is Intel eagle stream with Aspeed 2600-A1.
>
> I am able to read/write to the dram memory on the BMC 0x98000000. Here is my result.
> =====
> root at hudsonbay-obmc:~# devmem 0x98000000 32
> 0xFFFFFFFF
> root at hudsonbay-obmc:~# devmem 0x98000000 32 0x55AA66BB
> root at hudsonbay-obmc:~#
> root at hudsonbay-obmc:~# devmem 0x98000000 32
> 0x55AA66BB
> =====
>
> In addition, I found the "bmc-image" and "bmc.sig" files are with part of 0x55AA66BB after I finished the upper commands. It looks like that LPC/eSPI MMIO is not working in my case as you mentioned. So I am thinking is it possible that you could share how to set BIOS with me?
>
> Thank you.
>
> Regards,
> Chris Chen
>
> ________________________________
> 寄件者: Brandon Kim <brandonkim at google.com>
> 寄件日期: 2022年7月14日 上午 12:45
> 收件者: Willy Tu <wltu at google.com>
> 副本: Chris Chen (TPI) <Chris.Chen3 at flex.com>; William Kennington <wak at google.com>; openbmc at lists.ozlabs.org <openbmc at lists.ozlabs.org>; chris6906 at gmail.com <chris6906 at gmail.com>
> 主旨: Re: [phosphor-ipmi-flash]: Question about in-band update of BMC firmware
>
> Hi Chris,
>
> The region you choose on both the BMC and the BIOS IS important as the
> BMC and the BIOS usually has a dedicated address for such a shared
> MMIO. I am not a BIOS expert so I had to ask the BIOS team for the
> address that is dedicated for LPC / eSPI (if you plan on using LPC /
> eSPI) and had to refer to the BMC's datasheet for the region (I
> believe it's defaulted to the Nuvoton region currently). As Willy
> pointed out, my guess is that a manual write to the memory won't work
> for you.
>
> Which BMC are you using if you don't mind me asking? Nuvoton vs. Aspeed?
>
> Thanks,
> Brandon
>
> On Wed, Jul 13, 2022 at 9:40 AM Willy Tu <wltu at google.com> wrote:
> >
> > Hi Chris,
> >
> > I think you were able to set it up correctly. Can you check if you can read/write to the flash memory on the BMC 0x98000000? I am also wondering if that address is correct  or not. Like if that address is mapped to the BMC's memory. I have hit an issue where the image transferred does not match because the BIOS didn't set that up properly. I am unsure how to set that up.
> >
> > Willy Tu
> >
> > On Wed, Jul 13, 2022 at 1:15 AM Chris Chen (TPI) <Chris.Chen3 at flex.com> wrote:
> >>
> >> Hi Brandon and William,
> >>
> >>
> >>
> >> As you know, I have already built the "burn_my_bmc" on my Host (Eagle Stream with Aspeed 2600). I for now tried to use it to do the in-band update of BMC firmware, the debug messages of the "burn_my_bmc" look good and I also got "bmc-image" and "bmc.sig" file in the "/run/initramfs" and "/tmp" directory respectively via LPC data transfer mechanism on the BMC. However, one thing is strange which is the content of the "bmcimage" and "bmc.sig" file are all 0xff. I think this should not be the normal case, perhaps I made a mistake. Following are my steps/changes on the Host-side and BMC-side, could you please take a look at it, is there anything wrong? Or do you have any suggestions for enabling the feature? Thanks.
> >>
> >>
> >>
> >> Host-side
> >>
> >> =====
> >>
> >> The e820 map of the Host system (just choose one area randomly, should I need to reserve a specific area for this??)
> >> ####
> >> archer at archer-ArcherCityM:mtd.all$ sudo dmesg | grep e820
> >>
> >> [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dfff] usable
> >>
> >> [    0.000000] BIOS-e820: [mem 0x000000000009e000-0x000000000009efff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x000000000009f000-0x000000000009ffff] usable
> >>
> >> [    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reserved                   <-- choose this area.
> >>
> >> [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000006d8effff] usable
> >>
> >> [    0.000000] BIOS-e820: [mem 0x000000006d8f0000-0x000000006f9effff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x000000006f9f0000-0x00000000702effff] ACPI data
> >>
> >> [    0.000000] BIOS-e820: [mem 0x00000000702f0000-0x0000000072c2ffff] ACPI NVS
> >>
> >> [    0.000000] BIOS-e820: [mem 0x0000000072c30000-0x00000000777fefff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x00000000777ff000-0x00000000777fffff] usable
> >>
> >> [    0.000000] BIOS-e820: [mem 0x0000000077800000-0x000000008fffffff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x00000000fe010000-0x00000000fe010fff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
> >>
> >> [    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000047fffffff] usable
> >>
> >> [    0.000000] e820: update [mem 0x624a8018-0x624b0057] usable ==> usable
> >>
> >> [    0.000000] e820: update [mem 0x624a8018-0x624b0057] usable ==> usable
> >>
> >> [    0.000022] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
> >>
> >> [    0.000027] e820: remove [mem 0x000a0000-0x000fffff] usable
> >>
> >> [    0.003943] e820: update [mem 0x80000000-0xffffffff] usable ==> reserved
> >>
> >> [    0.017281] e820: update [mem 0x69d87000-0x69d87fff] usable ==> reserved
> >>
> >> [    0.017300] e820: update [mem 0x686c6000-0x686c6fff] usable ==> reserved
> >>
> >> [    5.045333] e820: reserve RAM buffer [mem 0x0009e000-0x0009ffff]
> >>
> >> [    5.045336] e820: reserve RAM buffer [mem 0x624a8018-0x63ffffff]
> >>
> >> [    5.045338] e820: reserve RAM buffer [mem 0x686c6000-0x6bffffff]
> >>
> >> [    5.045340] e820: reserve RAM buffer [mem 0x69d87000-0x6bffffff]
> >>
> >> [    5.045341] e820: reserve RAM buffer [mem 0x6d8f0000-0x6fffffff]
> >>
> >> [    5.045342] e820: reserve RAM buffer [mem 0x77800000-0x77ffffff]
> >>
> >> [   33.565052] systemd[1]: Mounting Mount unit for e820-bios, revision 9...
> >>
> >> [   33.702641] systemd[1]: Mounted Mount unit for e820-bios, revision 9.
> >> ####
> >>
> >> The executed command and its result.
> >> ####
> >> archer at archer-ArcherCityM:mtd.all$ time sudo burn_my_bmc \
> >>                                                             --command update \
> >>
> >>                                                             --interface ipmilpc
> >>                                                             --image ./image-bmc \
> >>                                                             --sig ./image-bmc.sig \
> >>                                                             --type image \
> >>                                                             --address 0x000a0000 \
> >>                                                             --length 0x10000
> >>
> >> Sending over the firmware image.
> >>
> >> sending writeMeta
> >>
> >> writemeta sent
> >>
> >> Progress: 100.00%
> >>
> >> Sending over the hash file.
> >>
> >> sending writeMeta
> >>
> >> writemeta sent
> >>
> >> Progress: 100.00%
> >>
> >> Opening the verification file
> >>
> >> Committing to /flash/verify to trigger service
> >>
> >> Calling stat on /flash/verify session to check status
> >>
> >> success
> >>
> >> succeeded
> >>
> >> Opening the update file
> >>
> >> Committing to /flash/update to trigger service
> >>
> >> Calling stat on /flash/update session to check status
> >>
> >> success
> >>
> >> succeeded
> >>
> >>
> >>
> >> real  0m17.616s
> >>
> >> user  0m0.046s
> >>
> >> sys   0m0.147s
> >>
> >> ####
> >>
> >> =====
> >>
> >>
> >>
> >> BMC-side
> >>
> >> =====
> >>
> >> Code changes
> >>
> >> Add to install "phosphor-ipmi-flash" and "phosphor-ipmi-blobs" these two packages in packagegroup recipe.
> >>
> >> ####
> >> SUMMARY:${PN}-system = "Flex Ltd System"
> >>
> >> RDEPENDS:${PN}-system = " \
> >>
> >>         phosphor-ipmi-blobs \
> >>
> >>         phosphor-ipmi-flash \
> >>
> >>         "
> >>
> >> ####
> >>
> >> Add "phosphor-impi-flash_%.bbapend" recipe with these lines(Bold).
> >>
> >> ####
> >> SRCREV = "c277935e6fe0cdcf8aefc45b53d11bd6ca20f964"
> >>
> >>
> >>
> >> PACKAGECONFIG:append = " static-bmc"
> >>
> >> PACKAGECONFIG:append = " aspeed-lpc"
> >>
> >> PACKAGECONFIG:append = " reboot-update"
> >>
> >> IPMI_FLASH_BMC_ADDRESS = "0x98000000"
> >>
> >> ####
> >>
> >> Remove ",-Dupdate-type=none" in the phosphor-ipmi-flash_git.bb recipe as below, because the "Enabled Firmware Update Features" and "config-static-bmc-reboot.json" are not be included. This seems the "update-type" would always pass "none" to "phosphor-impi-flash" package without this change, but I'm not sure??
> >>
> >> ####
> >> PACKAGECONFIG[static-bmc] = "-Dupdate-type=static-layout"
> >> ####
> >>
> >> Add these lines(Bold). in Kernel dts file
> >>
> >> ####
> >>
> >> reserved-memory {
> >>
> >>        #address-cells = <1>;
> >>
> >>        #size-cells = <1>;
> >>
> >>        ranges;
> >>
> >>
> >>
> >>        video_engine_memory: video {
> >>
> >>             size = <0x04000000>;
> >>
> >>             alignment = <0x01000000>;
> >>
> >>             compatible = "shared-dma-pool";
> >>
> >>             reusable;
> >>
> >>        };
> >>
> >>
> >>
> >>        /* LPC FW cycle bridge region requires natural alignment */
> >>
> >>        flash_memory: region at 98000000 {
> >>
> >>             no-map;
> >>
> >>             reg = <0x98000000 0x04000000>; /* 64M */
> >>
> >>        };
> >>
> >> };
> >>
> >> &lpc_ctrl {
> >>
> >>       status = "okay";
> >>
> >>       memory-region = <&flash_memory>;
> >>
> >> };
> >>
> >> ####
> >>
> >> BMC console
> >>
> >> Manually modify "config-static-bmc-reboot.json" to skip "preparation", "verification", and "update" actions because I want to make sure image file transfer is okay first.
> >> ####
> >> root at hudsonbay-obmc:~# cat /usr/share/phosphor-ipmi-flash/config-static-bmc-reboot.json
> >>
> >> [{
> >>
> >>         "blob": "/flash/image",
> >>
> >>         "handler": {
> >>
> >>                 "type": "file",
> >>
> >>                 "path": "/run/initramfs/bmc-image"
> >>
> >>         },
> >>
> >>         "actions": {
> >>
> >>                 "preparation": {
> >>
> >>                         "type": "skip"
> >>
> >>                 },
> >>
> >>                 "verification": {
> >>
> >>                         "type": "skip"
> >>
> >>                 },
> >>
> >>                 "update": {
> >>
> >>                         "type": "skip"
> >>
> >>                 }
> >>
> >>         }
> >>
> >> }]
> >> ####
> >>
> >> Create "/run/initramfs" directory manually.
> >> ####
> >> root at hudsonbay-obmc:~# mkdir /run/initramfs
> >>
> >> ####
> >>
> >> Result after executing burn_my_bmc command. (the content of bmc-image and bmc.sig are all 0xff)
> >> ####
> >>
> >> root at hudsonbay-obmc:~# ls -al /run/initramfs/bmc-image
> >> -rw-r--r--    1 root     root      67108864 Jan  1 01:47 /run/initramfs/bmc-image
> >>
> >> root at hudsonbay-obmc:~# hexdump -C /run/initramfs/bmc-image
> >>
> >> 00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
> >>
> >> *
> >>
> >> 04000000
> >>
> >> root at hudsonbay-obmc:~# ls -al /tmp/bmc.sig
> >>
> >> -rw-r--r--    1 root     root           128 Jan  1 01:47 /tmp/bmc.sig
> >>
> >> root at hudsonbay-obmc:~# hexdump -C /tmp/bmc.sig
> >>
> >> 00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
> >>
> >> *
> >>
> >> 00000080
> >> ####
> >>
> >> =====
> >>
> >>
> >>
> >> Regards,
> >>
> >> Chris Chen
> >>
> >> Legal Disclaimer :
> >> The information contained in this message may be privileged and confidential.
> >> It is intended to be read only by the individual or entity to whom it is addressed
> >> or by their designee. If the reader of this message is not the intended recipient,
> >> you are on notice that any distribution of this message, in any form,
> >> is strictly prohibited. If you have received this message in error,
> >> please immediately notify the sender and delete or destroy any copy of this message!


More information about the openbmc mailing list