[phosphor-ipmi-flash]: Question about in-band update of BMC firmware
Chris Chen (TPI)
Chris.Chen3 at flex.com
Fri Jul 15 16:25:20 AEST 2022
Hi Brandon,
Understood. Thank you for the information.
Just one more question would like to confirm with you, the README.md in the phosphor-ipmi-flash repo mentioned using net data transfer mechanism, this is not an in-band update, it is through the network connection, that means I can't use it if there is no network port on the motherboard, am I correct?
Regards,
Chris Chen
-----Original Message-----
From: Brandon Kim <brandonkim at google.com>
Sent: Thursday, July 14, 2022 11:58 PM
To: Chris Chen (TPI) <Chris.Chen3 at flex.com>
Cc: Willy Tu <wltu at google.com>; William Kennington <wak at google.com>; openbmc at lists.ozlabs.org; chris6906 at gmail.com
Subject: Re: [phosphor-ipmi-flash]: Question about in-band update of BMC firmware
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