OS-7014: Add libtopo support for Upgradable Firmware Modules

Details

Issue Type:New Feature
Priority:4 - Normal
Status:Resolved
Created at:2018-06-13T01:28:30.101Z
Updated at:2019-06-19T23:45:11.304Z

People

Created by:Former user
Reported by:Former user
Assigned to:Former user

Resolution

Fixed: A fix for this issue is checked into the tree and tested.
(Resolution Date: 2019-06-19T23:45:11.289Z)

Fix Versions

2019-07-04 Verdukianism (Release Date: 2019-07-04)

Related Issues

Description

For background, please refer to the section "UFM Visibility" in RFD 89:

https://github.com/joyent/rfd/blob/master/rfd/0089/README.md

This ticket covers the work to extend libtopo with new modules APIs that can be used represent UFMs in topology in a consistent way. It also covers work to modify a number of libtopo plugin modules to exercise the new module interfaces and expose firmware information in topology.

A separate ticket (OS-7026) was filed to cover kernel-level changes to extend the DDI so UFMs can be declared by device drivers.

Comments

Comment by Former user
Created at 2019-06-12T21:45:31.776Z
Updated at 2019-06-17T16:22:58.428Z

Testing

To verify build cleanliness, I did full debug and non-debug builds and verified there were no warnings.

To check for memory leaks in the topo changes, I booted a debug PI with these changes and then ran fmtopo with the -C option, which causes it to abort and drop a core instead of exiting. I then check the core for leaks using findleaks. To ensure fmtopo didn't unload plugins (potentially hiding leaks) I set the TOPONODLCLOSE environment variable prior to running fmtopo.

To verify the functionality of the topo changes, I built a PI with the changes and booted them on a lab system that had the right hardware to hit all of the modified topo modules. I then compared the output of "fmtopo -V" before and after these changes and made sure the only difference was the addition of the new ufm nodes. See sample output below:

[root@magma /var/tmp/rejohnst]# export TOPONODLCLOSE=1
[root@magma /var/tmp/rejohnst]# /usr/lib/fm/fmd/fmtopo -C -V >& /dev/null
Abort (core dumped)
[root@magma /var/tmp/rejohnst]# mdb /cores/core.fmtopo.105894 
Loading modules: [ libc.so.1 libtopo.so.1 libumem.so.1 libnvpair.so.1 libuutil.so.1 libavl.so.1 libcmdutils.so.1 libsysevent.so.1 ld.so.1 ]
> ::findleaks -d  
BYTES             LEAKED VMEM_SEG CALLER
4096                   1 fdf5e000 MMAP
------------------------------------------------------------------------
           Total       1 oversized leak, 4096 bytes

mmap(2) leak: [fdf5e000, fdf5f000), 4096 bytes

Additionally, to verify the accuracy of the property values on the nodes in the ufm subtree, I verified that the reported firmware information was consistent with what the kernel was reporting via the UFM_IOC_REPORT ioctl. See sample output below.

# diff topo.out-before topo.out-after 
2c2
< Jun 12 19:13:20 34b0d4aa-1aac-4fb4-82b8-b317a33b2be6
---
> Jun 13 18:16:27 2abd5e0e-825d-ce22-9f70-c6604c79b6cf
5a6,9
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/ufm=0
> 
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/ufm=0/slot=0
> 
279a284,287
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=0/ufm=0
> 
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=0/ufm=0/slot=0
> 
283a292,295
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=1/ufm=0
> 
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=1/ufm=0/slot=0
> 
311a324,327
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=4/pciexrc=4/pciexbus=134/pciexdev=0/pciexfn=0/ufm=0
> 
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=4/pciexrc=4/pciexbus=134/pciexdev=0/pciexfn=0/ufm=0/slot=0
> 
415a432,435
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/sp=0/ufm=0
> 
> hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/sp=0/ufm=0/slot=0
> 
613a634,637
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=0/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=0/disk=0/ufm=0/slot=0
> 
627a652,655
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=1/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=1/disk=0/ufm=0/slot=0
> 
641a670,673
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=2/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=2/disk=0/ufm=0/slot=0
> 
655a688,691
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=3/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=3/disk=0/ufm=0/slot=0
> 
669a706,709
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=4/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=4/disk=0/ufm=0/slot=0
> 
697a738,741
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=6/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=6/disk=0/ufm=0/slot=0
> 
711a756,759
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=7/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=7/disk=0/ufm=0/slot=0
> 
725a774,777
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=8/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=8/disk=0/ufm=0/slot=0
> 
739a792,795
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=9/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=9/disk=0/ufm=0/slot=0
> 
753a810,813
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=10/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=10/disk=0/ufm=0/slot=0
> 
767a828,831
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=11/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=11/disk=0/ufm=0/slot=0
> 
781a846,849
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=12/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=12/disk=0/ufm=0/slot=0
> 
795a864,867
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=13/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=13/disk=0/ufm=0/slot=0
> 
809a882,885
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=14/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=14/disk=0/ufm=0/slot=0
> 
823a900,903
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=15/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=15/disk=0/ufm=0/slot=0
> 
837a918,921
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=16/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=16/disk=0/ufm=0/slot=0
> 
851a936,939
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=17/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=17/disk=0/ufm=0/slot=0
> 
865a954,957
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=18/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=18/disk=0/ufm=0/slot=0
> 
879a972,975
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=19/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=19/disk=0/ufm=0/slot=0
> 
893a990,993
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=20/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=20/disk=0/ufm=0/slot=0
> 
907a1008,1011
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=21/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=21/disk=0/ufm=0/slot=0
> 
921a1026,1029
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=22/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=22/disk=0/ufm=0/slot=0
> 
935a1044,1047
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=23/disk=0/ufm=0
> 
> hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=23/disk=0/ufm=0/slot=0
> 
965a1078,1081
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=0/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=0/disk=0/ufm=0/slot=0
> 
979a1096,1099
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=1/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=1/disk=0/ufm=0/slot=0
> 
993a1114,1117
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=2/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=2/disk=0/ufm=0/slot=0
> 
1007a1132,1135
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=3/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=3/disk=0/ufm=0/slot=0
> 
1021a1150,1153
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=4/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=4/disk=0/ufm=0/slot=0
> 
1035a1168,1171
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=5/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=5/disk=0/ufm=0/slot=0
> 
1049a1186,1189
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=6/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=6/disk=0/ufm=0/slot=0
> 
1063a1204,1207
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=7/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=7/disk=0/ufm=0/slot=0
> 
1077a1222,1225
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=8/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=8/disk=0/ufm=0/slot=0
> 
1091a1240,1243
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=9/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=9/disk=0/ufm=0/slot=0
> 
1105a1258,1261
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=10/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=10/disk=0/ufm=0/slot=0
> 
1119a1276,1279
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=11/disk=0/ufm=0
> 
> hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=11/disk=0/ufm=0/slot=0
> 

# /usr/lib/fm/fmd/fmtopo -P ufm-properties -P ufm-slot-properties "*ufm=[0-9]*"
TIME                 UUID
Jun 13 18:20:05 06922d77-36ca-c525-e005-ca8608aef7ed

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    BIOS

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x1
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    T20180716142909
    firmware-vendor   string    American-Megatrends-Inc.
    firmware-release-date string    07-16-2018

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    Firmware

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x1
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    3.1
    firmware-build    string    cc7d
    api-version       string    1.5

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=1/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    Firmware

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=2/pciexrc=2/pciexbus=24/pciexdev=0/pciexfn=0/pciexbus=25/pciexdev=3/pciexfn=0/pciexbus=26/pciexdev=0/pciexfn=1/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x1
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    3.1
    firmware-build    string    cc7d
    api-version       string    1.5

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=4/pciexrc=4/pciexbus=134/pciexdev=0/pciexfn=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    IOC Firmware

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/hostbridge=4/pciexrc=4/pciexbus=134/pciexdev=0/pciexfn=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x1
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    15.0.3.0

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/sp=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    Baseboard Management Controller firmware

hc://:product-id=Joyent-S10G5:server-id=magma:chassis-id=S287161X8300740/motherboard=0/sp=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x1
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    1.40

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=0/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=0/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=1/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=1/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=2/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=2/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=3/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=3/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=4/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=4/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=6/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=6/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=7/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=7/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=8/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=8/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=9/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=9/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=10/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=10/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=11/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=11/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=12/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=12/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=13/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=13/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=14/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=14/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=15/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=15/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=16/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=16/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=17/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=17/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=18/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=18/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=19/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=19/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=20/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=20/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=21/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=21/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=22/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=22/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=23/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=SMC-SC846P:server-id=:chassis-id=500304801861347f/ses-enclosure=0/bay=23/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=0/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=0/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=1/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=1/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=2/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=2/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=3/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=3/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=4/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=4/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=5/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=5/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=6/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=6/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=7/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=7/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=8/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=8/disk=0/ufm=0/slot=0
  group: ufm-slot-properties            version: 1   stability: Private/Private
    ufm-slot-mode     uint32    0x3
    ufm-slot-active   uint32    0x1
    ufm-slot-version  string    A3D0

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=9/disk=0/ufm=0
  group: ufm-properties                 version: 1   stability: Private/Private
    ufm-description   string    drive firmware

hc://:product-id=LSI-SAS3x28:server-id=:chassis-id=500304801e84c7ff/ses-enclosure=1/bay=9/disk=0/ufm=0/

Comment by Jira Bot
Created at 2019-06-19T23:42:59.370Z

illumos-joyent commit 285d665c1bfb19b7a0d31074cbb554aae649ca56 (branch master, by Rob Johnston)

OS-7014 Add libtopo support for Upgradable Firmware Modules
OS-7026 Add DDI support for Upgradable Firmware Modules
Reviewed by: Robert Mustacchi <robert.mustacchi@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Approved by: Jerry Jelinek <jerry.jelinek@joyent.com>